From 044ff1575f4eddb07af7af678d438e409201ac1a Mon Sep 17 00:00:00 2001 From: Rachel Dowavic Date: Thu, 26 Feb 2026 17:25:04 +1100 Subject: [PATCH] Fix -ignore-fork filtering for GitLab, Bitbucket, and Forgejo The ignoreFork flag was only implemented for GitHub. Add fork detection to the other three services: - GitLab: skip repos where ForkedFromProject is non-nil - Bitbucket: skip repos where Parent is non-nil - Forgejo: skip repos where Fork is true, threading ignoreFork into paginateForgejoRepositories Also pass ignoreFork from getRepositories to each service function. --- bitbucket.go | 4 ++++ forgejo.go | 10 +++++++--- gitlab.go | 4 ++++ repositories.go | 3 +++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/bitbucket.go b/bitbucket.go index 898abf6..089163e 100644 --- a/bitbucket.go +++ b/bitbucket.go @@ -8,6 +8,7 @@ import ( func getBitbucketRepositories( client *bitbucket.Client, + ignoreFork bool, ) ([]*Repository, error) { var repositories []*Repository @@ -26,6 +27,9 @@ func getBitbucketRepositories( } for _, repo := range resp.Items { + if repo.Parent != nil && ignoreFork { + continue + } namespace := strings.Split(repo.Full_name, "/")[0] httpsURL, sshURL := extractBitbucketCloneURLs(repo.Links) diff --git a/forgejo.go b/forgejo.go index 5f63d0b..99dd006 100644 --- a/forgejo.go +++ b/forgejo.go @@ -10,6 +10,7 @@ import ( func getForgejoRepositories( client *forgejo.Client, forgejoRepoType string, + ignoreFork bool, ) ([]*Repository, error) { switch forgejoRepoType { @@ -26,7 +27,7 @@ func getForgejoRepositories( ListOptions: forgejo.ListOptions{Page: page}, StarredByUserID: user.ID, }) - }) + }, ignoreFork) if err != nil { return nil, fmt.Errorf("fetching starred repositories from forgejo: %v", err) } @@ -37,7 +38,7 @@ func getForgejoRepositories( return client.ListMyRepos(forgejo.ListReposOptions{ ListOptions: forgejo.ListOptions{Page: page}, }) - }) + }, ignoreFork) if err != nil { return nil, fmt.Errorf("fetching user repositories from forgejo: %v", err) } @@ -48,7 +49,7 @@ func getForgejoRepositories( } } -func paginateForgejoRepositories(fetch func(page int) ([]*forgejo.Repository, *forgejo.Response, error)) ([]*Repository, error) { +func paginateForgejoRepositories(fetch func(page int) ([]*forgejo.Repository, *forgejo.Response, error), ignoreFork bool) ([]*Repository, error) { var repositories []*Repository page := 1 @@ -59,6 +60,9 @@ func paginateForgejoRepositories(fetch func(page int) ([]*forgejo.Repository, *f } for _, repo := range results { + if repo.Fork && ignoreFork { + continue + } repositories = append(repositories, &Repository{ CloneURL: getCloneURL(repo.CloneURL, repo.SSHURL), Name: repo.Name, diff --git a/gitlab.go b/gitlab.go index ef9ebfd..9e2b9c8 100644 --- a/gitlab.go +++ b/gitlab.go @@ -9,6 +9,7 @@ import ( func getGitlabRepositories( client *gitlab.Client, gitlabProjectVisibility string, gitlabProjectMembershipType string, + ignoreFork bool, ) ([]*Repository, error) { var repositories []*Repository @@ -51,6 +52,9 @@ func getGitlabRepositories( return nil, err } for _, repo := range repos { + if repo.ForkedFromProject != nil && ignoreFork { + continue + } namespace := strings.Split(repo.PathWithNamespace, "/")[0] cloneURL := getCloneURL(repo.WebURL, repo.SSHURLToRepo) repositories = append(repositories, &Repository{ diff --git a/repositories.go b/repositories.go index 7ec2a4a..4277677 100644 --- a/repositories.go +++ b/repositories.go @@ -63,15 +63,18 @@ func getRepositories( client.(*gitlab.Client), gitlabProjectVisibility, gitlabProjectMembershipType, + ignoreFork, ) case "bitbucket": repositories, err = getBitbucketRepositories( client.(*bitbucket.Client), + ignoreFork, ) case "forgejo": repositories, err = getForgejoRepositories( client.(*forgejo.Client), forgejoRepoType, + ignoreFork, ) } return repositories, err