Hacktoberfest / hacktoberfest-repo-topic-apply

Cmd line tool to add a topic to your github repo, defaults to hacktoberfest
Apache License 2.0
51 stars 43 forks source link

Refactor code to not fetch repos that are explicitly excluded #26

Open MasonEgger opened 4 years ago

MasonEgger commented 4 years ago

Currently in the code base we fetch the repositories for a user or an organization with the following respectively

opt := &github.RepositoryListOptions{Type: "all"}
...
var repos, resp, err = client.Repositories.List(ctx, *githubUser, opt)

and

opt := &github.RepositoryListByOrgOptions{Type: "all"}
...
var repos, resp, err = client.Repositories.ListByOrg(ctx, *githubOrg, opt)

And when we want to exclude things such as forks,private, archived or disabled repos we simply pass over them in our evaluation

if *repo.Archived == true {
    loggerWithFields.Info("skipping archived")
    continue
}

if *repo.Disabled == true {
    loggerWithFields.Info("skipping disabled")
    continue
}

if *includeForks == false {
    if *repo.Fork == true {
        loggerWithFields.Info("skipping fork")
        continue
    }
}

if *includePrivate == false {
    if *repo.Private == true {
        loggerWithFields.Info("skipping private")
        continue
    }
}

The GitHub API supports changing the types in the options that are declared above as shown in their documentation https://developer.github.com/v3/repos/#list-repositories-for-the-authenticated-user

This would be a good issue if someone wanted to investigate this and see if they can instead modify the opts variable with the appropriate string to prevent us from getting unnecessary repos.

dragoneena12 commented 4 years ago

I worked on this issue and find a few things

ListByOrg is easy to refactor to fetch only appropriate repos thanks to the list-organization-repositories API has useful type values like public, private, and forks. I created PR about this. #27

However List is not because the list-repos-for-user API does not have such type values. Also this API does not provide private repo and this mean include-private flag does not work for user repos.

I think it is good to use list-repositories-for-the authenticated-user API if no username is provided. The go-github library List method uses this API if no username is provided too(https://godoc.org/github.com/google/go-github/github#RepositoriesService.List ).

Daksheshapkare commented 2 years ago

The go-github library List method uses this API if no username is provided too(https://godoc.org/github.com/google/go-github/github#RepositoriesService.List ). https://godoc.org/github.com/google/go-github/github#RepositoriesService.List