diff --git a/.gitignore b/.gitignore index f6006c4..925166e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ gickup conf.yml .idea dist/ +.vscode \ No newline at end of file diff --git a/conf.example.yml b/conf.example.yml index 695a44c..477d1d6 100644 --- a/conf.example.yml +++ b/conf.example.yml @@ -33,6 +33,7 @@ source: languages: # only clone repositories with the following languages - go - java + excludeforks: true # exclude forked repositories gitea: - token: some-token # token_file: token.txt # alternatively, specify token in a file @@ -67,6 +68,7 @@ source: languages: # only clone repositories with the following languages - go - java + excludeforks: true # exclude forked repositories gogs: - token: some-token # token_file: token.txt # alternatively, specify token in a file @@ -96,6 +98,7 @@ source: filter: stars: 100 # only clone repos with 100 stars lastactivity: 1y # only clone repos which had activity during the last year + excludeforks: true # exclude forked repositories gitlab: - token: some-token # token_file: token.txt # alternatively, specify token in a file @@ -123,6 +126,14 @@ source: - bar1 wiki: true # includes wiki too starred: true # includes the user's starred repositories too + filter: + stars: 100 # only clone repos with 100 stars + lastactivity: 1y # only clone repos which had activity during the last year + excludearchived: true + languages: # only clone repositories with the following languages + - go + - java + excludeforks: true # exclude forked repositories bitbucket: - user: some-user # the user you want to clone the repositories from. url: http(s)://url-to-bitbucket # if empty, it uses https://bitbucket.org @@ -151,6 +162,7 @@ source: - foobar filter: lastactivity: 1y # only clone repos which had activity during the last year + excludeforks: true # exclude forked repositories sourcehut: - token: some-token # token_file: token.txt # alternatively, specify token in a file diff --git a/gitea/gitea.go b/gitea/gitea.go index 1baf013..7e38382 100644 --- a/gitea/gitea.go +++ b/gitea/gitea.go @@ -262,6 +262,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { languages := types.GetMap(repo.Filter.Languages) for _, r := range gitearepos { + if repo.Filter.ExcludeForks { + if r.Fork { + continue + } + } if repo.Filter.ExcludeArchived { if r.Archived { continue @@ -404,6 +409,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { } } for _, r := range orgrepos { + if repo.Filter.ExcludeForks { + if r.Fork { + continue + } + } if repo.Filter.ExcludeArchived { if r.Archived { continue diff --git a/github/github.go b/github/github.go index fec2dec..8206941 100644 --- a/github/github.go +++ b/github/github.go @@ -227,6 +227,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { languages := types.GetMap(repo.Filter.Languages) for _, r := range githubrepos { + if repo.Filter.ExcludeForks { + if *r.Fork { + continue + } + } if repo.Filter.ExcludeArchived { if r.Archived != nil { if *r.Archived { diff --git a/gitlab/gitlab.go b/gitlab/gitlab.go index 8b313bc..a41ac02 100644 --- a/gitlab/gitlab.go +++ b/gitlab/gitlab.go @@ -190,6 +190,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { languages := types.GetMap(repo.Filter.Languages) for _, r := range gitlabrepos { + if repo.Filter.ExcludeForks { + if r.ForkedFromProject != nil { + continue + } + } if repo.Filter.ExcludeArchived { if r.Archived { continue @@ -355,6 +360,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { } for k, gr := range gitlabgrouprepos { for _, r := range gr { + if repo.Filter.ExcludeForks { + if r.ForkedFromProject != nil { + continue + } + } if repo.Filter.ExcludeArchived { if r.Archived { continue diff --git a/gogs/gogs.go b/gogs/gogs.go index b91c830..19a316a 100644 --- a/gogs/gogs.go +++ b/gogs/gogs.go @@ -181,6 +181,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { excludeorgs := types.GetMap(repo.ExcludeOrgs) for _, r := range gogsrepos { + if repo.Filter.ExcludeForks { + if r.Fork { + continue + } + } if r.Stars < repo.Filter.Stars { continue } @@ -306,6 +311,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { } } for _, r := range orgrepos { + if repo.Filter.ExcludeForks { + if r.Fork { + continue + } + } if r.Stars < repo.Filter.Stars { continue } diff --git a/onedev/onedev.go b/onedev/onedev.go index ca10a80..c0d438d 100644 --- a/onedev/onedev.go +++ b/onedev/onedev.go @@ -84,6 +84,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { } for _, r := range userrepos { + if repo.Filter.ExcludeForks { + if r.ForkedFromID != 0 { + continue + } + } if len(repo.Include) > 0 { if !include[r.Name] { continue @@ -178,6 +183,11 @@ func Get(conf *types.Conf) ([]types.Repo, bool) { } for _, r := range orgrepos { + if repo.Filter.ExcludeForks { + if r.ForkedFromID != 0 { + continue + } + } urls, err := client.GetCloneUrl(r.ID) if err != nil { log.Error(). diff --git a/types/types.go b/types/types.go index 099e1ea..94b4e71 100644 --- a/types/types.go +++ b/types/types.go @@ -255,6 +255,7 @@ type Filter struct { Stars int `yaml:"stars"` Languages []string `yaml:"languages"` ExcludeArchived bool `yaml:"excludearchived"` + ExcludeForks bool `yaml:"excludeforks"` } // GetToken TODO.