diff --git a/gitea/gitea.go b/gitea/gitea.go index 5d0ac64..1ee267f 100644 --- a/gitea/gitea.go +++ b/gitea/gitea.go @@ -82,6 +82,7 @@ func Get(conf *types.Conf) []types.Repo { include := types.GetMap(repo.Include) exclude := types.GetMap(repo.Exclude) + includeorgs := types.GetMap(repo.IncludeOrgs) excludeorgs := types.GetMap(repo.ExcludeOrgs) for _, r := range gitearepos { @@ -116,21 +117,30 @@ func Get(conf *types.Conf) []types.Repo { orgopt.Page++ } - orgopt.Page = 1 orgrepos := []*gitea.Repository{} for _, org := range orgs { + orgopt.Page = 1 if excludeorgs[org.UserName] { continue } - o, _, err := client.ListOrgRepos(org.UserName, gitea.ListOrgReposOptions{orgopt}) - if err != nil { - log.Fatal().Str("stage", "gitea").Str("url", repo.Url).Msg(err.Error()) + for { + if len(includeorgs) > 0 { + if includeorgs[org.UserName] { + o := getOrgRepos(client, org, orgopt, repo) + if len(o) == 0 { + break + } + orgrepos = append(orgrepos, o...) + } + } else { + o := getOrgRepos(client, org, orgopt, repo) + if len(o) == 0 { + break + } + orgrepos = append(orgrepos, o...) + } + orgopt.Page++ } - if len(o) == 0 { - break - } - orgrepos = append(orgrepos, o...) - orgopt.Page++ } for _, r := range orgrepos { if include[r.Name] { @@ -153,3 +163,11 @@ func Get(conf *types.Conf) []types.Repo { } return repos } + +func getOrgRepos(client *gitea.Client, org *gitea.Organization, orgopt gitea.ListOptions, repo types.GenRepo) []*gitea.Repository { + o, _, err := client.ListOrgRepos(org.UserName, gitea.ListOrgReposOptions{orgopt}) + if err != nil { + log.Fatal().Str("stage", "gitea").Str("url", repo.Url).Msg(err.Error()) + } + return o +} diff --git a/github/github.go b/github/github.go index 42d2090..561d5f9 100644 --- a/github/github.go +++ b/github/github.go @@ -50,6 +50,7 @@ func Get(conf *types.Conf) []types.Repo { } include := types.GetMap(repo.Include) + includeorgs := types.GetMap(repo.IncludeOrgs) exclude := types.GetMap(repo.Exclude) excludeorgs := types.GetMap(repo.ExcludeOrgs) @@ -68,9 +69,18 @@ func Get(conf *types.Conf) []types.Repo { continue } if len(repo.Include) == 0 { - repos = append(repos, types.Repo{Name: r.GetName(), Url: r.GetCloneURL(), SshUrl: r.GetSSHURL(), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) - if *r.HasWiki && repo.Wiki && *r.HasPages { - repos = append(repos, types.Repo{Name: *r.Name + ".wiki", Url: types.DotGitRx.ReplaceAllString(r.GetCloneURL(), ".wiki.git"), SshUrl: types.DotGitRx.ReplaceAllString(r.GetSSHURL(), ".wiki.git"), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) + if len(includeorgs) > 0 { + if includeorgs[r.GetOwner().GetLogin()] { + repos = append(repos, types.Repo{Name: r.GetName(), Url: r.GetCloneURL(), SshUrl: r.GetSSHURL(), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) + if *r.HasWiki && repo.Wiki && *r.HasPages { + repos = append(repos, types.Repo{Name: *r.Name + ".wiki", Url: types.DotGitRx.ReplaceAllString(r.GetCloneURL(), ".wiki.git"), SshUrl: types.DotGitRx.ReplaceAllString(r.GetSSHURL(), ".wiki.git"), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) + } + } + } else { + repos = append(repos, types.Repo{Name: r.GetName(), Url: r.GetCloneURL(), SshUrl: r.GetSSHURL(), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) + if *r.HasWiki && repo.Wiki && *r.HasPages { + repos = append(repos, types.Repo{Name: *r.Name + ".wiki", Url: types.DotGitRx.ReplaceAllString(r.GetCloneURL(), ".wiki.git"), SshUrl: types.DotGitRx.ReplaceAllString(r.GetSSHURL(), ".wiki.git"), Token: token, Defaultbranch: r.GetDefaultBranch(), Origin: repo, Owner: r.GetOwner().GetLogin(), Hoster: "github.com"}) + } } } } diff --git a/gogs/gogs.go b/gogs/gogs.go index c2bc411..dfb4b28 100644 --- a/gogs/gogs.go +++ b/gogs/gogs.go @@ -51,6 +51,7 @@ func Get(conf *types.Conf) []types.Repo { } include := types.GetMap(repo.Include) + includeorgs := types.GetMap(repo.IncludeOrgs) exclude := types.GetMap(repo.Exclude) excludeorgs := types.GetMap(repo.ExcludeOrgs) @@ -82,14 +83,29 @@ func Get(conf *types.Conf) []types.Repo { if excludeorgs[org.UserName] { continue } - o, err := client.ListOrgRepos(org.UserName) - if err != nil { - log.Fatal().Str("stage", "gogs").Str("url", repo.Url).Msg(err.Error()) + for { + if len(includeorgs) > 0 { + if includeorgs[org.UserName] { + o, err := client.ListOrgRepos(org.UserName) + if err != nil { + log.Fatal().Str("stage", "gogs").Str("url", repo.Url).Msg(err.Error()) + } + if len(o) == 0 { + break + } + orgrepos = append(orgrepos, o...) + } + } else { + o, err := client.ListOrgRepos(org.UserName) + if err != nil { + log.Fatal().Str("stage", "gogs").Str("url", repo.Url).Msg(err.Error()) + } + if len(o) == 0 { + break + } + orgrepos = append(orgrepos, o...) + } } - if len(o) == 0 { - break - } - orgrepos = append(orgrepos, o...) } for _, r := range orgrepos { if include[r.Name] { diff --git a/types/types.go b/types/types.go index a29fd75..69dc85c 100644 --- a/types/types.go +++ b/types/types.go @@ -164,6 +164,7 @@ type GenRepo struct { Exclude []string `yaml:"exclude"` ExcludeOrgs []string `yaml:"excludeorgs"` Include []string `yaml:"include"` + IncludeOrgs []string `yaml:"includeorgs"` Wiki bool `yaml:"wiki"` }