diff --git a/bitbucket.go b/bitbucket.go index d9e458b..898abf6 100644 --- a/bitbucket.go +++ b/bitbucket.go @@ -1,26 +1,18 @@ package main import ( - "log" "strings" bitbucket "github.com/ktrysmt/go-bitbucket" ) func getBitbucketRepositories( - client interface{}, - service string, githubRepoType string, githubNamespaceWhitelist []string, - gitlabProjectVisibility string, gitlabProjectMembershipType string, - ignoreFork bool, forgejoRepoType string, + client *bitbucket.Client, ) ([]*Repository, error) { - if client == nil { - log.Fatalf("Couldn't acquire a client to talk to %s", service) - } - var repositories []*Repository - resp, err := client.(*bitbucket.Client).Workspaces.List() + resp, err := client.Workspaces.List() if err != nil { return nil, err } @@ -28,7 +20,7 @@ func getBitbucketRepositories( for _, workspace := range resp.Workspaces { options := &bitbucket.RepositoriesOptions{Owner: workspace.Slug} - resp, err := client.(*bitbucket.Client).Repositories.ListForAccount(options) + resp, err := client.Repositories.ListForAccount(options) if err != nil { return nil, err } diff --git a/forgejo.go b/forgejo.go index 980bb2f..071075c 100644 --- a/forgejo.go +++ b/forgejo.go @@ -8,45 +8,38 @@ import ( ) func getForgejoRepositories( - client interface{}, - service string, githubRepoType string, githubNamespaceWhitelist []string, - gitlabProjectVisibility string, gitlabProjectMembershipType string, - ignoreFork bool, forgejoRepoType string, + client *forgejo.Client, + forgejoRepoType string, ) ([]*Repository, error) { - if client == nil { - log.Fatalf("Couldn't acquire a client to talk to %s", service) - } - - forgejoClient := client.(*forgejo.Client) switch forgejoRepoType { case "starred": - user, _, err := forgejoClient.GetMyUserInfo() + user, _, err := client.GetMyUserInfo() if err != nil { - log.Fatalf("Error fetching user info from %s: %v", service, err) + log.Fatalf("Error fetching user info from forgejo: %v", err) } log.Printf("Found user %s with ID %d", user.UserName, user.ID) repos, err := paginateForgejoRepositories(func(page int) ([]*forgejo.Repository, *forgejo.Response, error) { - return forgejoClient.SearchRepos(forgejo.SearchRepoOptions{ + return client.SearchRepos(forgejo.SearchRepoOptions{ ListOptions: forgejo.ListOptions{Page: page}, StarredByUserID: user.ID, }) }) if err != nil { - return nil, fmt.Errorf("fetching starred repositories from %s: %v", service, err) + return nil, fmt.Errorf("fetching starred repositories from forgejo: %v", err) } return repos, nil case "user", "": repos, err := paginateForgejoRepositories(func(page int) ([]*forgejo.Repository, *forgejo.Response, error) { - return forgejoClient.ListMyRepos(forgejo.ListReposOptions{ + return client.ListMyRepos(forgejo.ListReposOptions{ ListOptions: forgejo.ListOptions{Page: page}, }) }) if err != nil { - return nil, fmt.Errorf("fetching user repositories from %s: %v", service, err) + return nil, fmt.Errorf("fetching user repositories from forgejo: %v", err) } return repos, nil diff --git a/github.go b/github.go index d8a2b37..cea7088 100644 --- a/github.go +++ b/github.go @@ -2,35 +2,29 @@ package main import ( "context" - "log" "strings" "github.com/google/go-github/v34/github" ) func getGithubRepositories( - client interface{}, - service string, githubRepoType string, githubNamespaceWhitelist []string, - gitlabProjectVisibility string, gitlabProjectMembershipType string, - ignoreFork bool, forgejoRepoType string, + client *github.Client, + githubRepoType string, githubNamespaceWhitelist []string, + ignoreFork bool, ) ([]*Repository, error) { - if client == nil { - log.Fatalf("Couldn't acquire a client to talk to %s", service) - } - var repositories []*Repository ctx := context.Background() if githubRepoType == "starred" { - return getGithubStarredRepositories(ctx, client.(*github.Client), ignoreFork) + return getGithubStarredRepositories(ctx, client, ignoreFork) } options := github.RepositoryListOptions{Type: githubRepoType} for { - repos, resp, err := client.(*github.Client).Repositories.List(ctx, "", &options) + repos, resp, err := client.Repositories.List(ctx, "", &options) if err != nil { return nil, err } diff --git a/gitlab.go b/gitlab.go index eb92f60..ef9ebfd 100644 --- a/gitlab.go +++ b/gitlab.go @@ -1,23 +1,16 @@ package main import ( - "log" "strings" gitlab "github.com/xanzy/go-gitlab" ) func getGitlabRepositories( - client interface{}, - service string, githubRepoType string, githubNamespaceWhitelist []string, + client *gitlab.Client, gitlabProjectVisibility string, gitlabProjectMembershipType string, - ignoreFork bool, forgejoRepoType string, ) ([]*Repository, error) { - if client == nil { - log.Fatalf("Couldn't acquire a client to talk to %s", service) - } - var repositories []*Repository var visibility gitlab.VisibilityValue @@ -53,7 +46,7 @@ func getGitlabRepositories( } for { - repos, resp, err := client.(*gitlab.Client).Projects.ListProjects(&gitlabListOptions) + repos, resp, err := client.Projects.ListProjects(&gitlabListOptions) if err != nil { return nil, err } diff --git a/repositories.go b/repositories.go index 2add91d..7ec2a4a 100644 --- a/repositories.go +++ b/repositories.go @@ -1,7 +1,13 @@ package main import ( + "log" "net/http" + + forgejo "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2" + "github.com/google/go-github/v34/github" + bitbucket "github.com/ktrysmt/go-bitbucket" + gitlab "github.com/xanzy/go-gitlab" ) // Response is derived from the following sources: @@ -37,53 +43,34 @@ func getRepositories( gitlabProjectVisibility string, gitlabProjectMembershipType string, ignoreFork bool, forgejoRepoType string, ) ([]*Repository, error) { + if client == nil { + log.Fatalf("Couldn't acquire a client to talk to %s", service) + } + var repositories []*Repository var err error switch service { case "github": repositories, err = getGithubRepositories( - client, - service, + client.(*github.Client), githubRepoType, githubNamespaceWhitelist, - gitlabProjectVisibility, - gitlabProjectMembershipType, ignoreFork, - forgejoRepoType, ) - case "gitlab": repositories, err = getGitlabRepositories( - client, - service, - githubRepoType, - githubNamespaceWhitelist, + client.(*gitlab.Client), gitlabProjectVisibility, gitlabProjectMembershipType, - ignoreFork, - forgejoRepoType, ) case "bitbucket": repositories, err = getBitbucketRepositories( - client, - service, - githubRepoType, - githubNamespaceWhitelist, - gitlabProjectVisibility, - gitlabProjectMembershipType, - ignoreFork, - forgejoRepoType, + client.(*bitbucket.Client), ) case "forgejo": repositories, err = getForgejoRepositories( - client, - service, - githubRepoType, - githubNamespaceWhitelist, - gitlabProjectVisibility, - gitlabProjectMembershipType, - ignoreFork, + client.(*forgejo.Client), forgejoRepoType, ) }