Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions bitbucket.go
Original file line number Diff line number Diff line change
@@ -1,34 +1,26 @@
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
}

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
}
Expand Down
23 changes: 8 additions & 15 deletions forgejo.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 5 additions & 11 deletions github.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
11 changes: 2 additions & 9 deletions gitlab.go
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
}
Expand Down
41 changes: 14 additions & 27 deletions repositories.go
Original file line number Diff line number Diff line change
@@ -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:
Expand Down Expand Up @@ -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,
)
}
Expand Down
Loading