diff options
Diffstat (limited to 'internal/cli')
| -rw-r--r-- | internal/cli/forge_client.go | 21 | ||||
| -rw-r--r-- | internal/cli/forge_client_test.go | 52 | ||||
| -rw-r--r-- | internal/cli/handlers.go | 26 |
3 files changed, 78 insertions, 21 deletions
diff --git a/internal/cli/forge_client.go b/internal/cli/forge_client.go new file mode 100644 index 0000000..4d8eb60 --- /dev/null +++ b/internal/cli/forge_client.go @@ -0,0 +1,21 @@ +package cli + +import ( + "codeberg.org/snonux/gitsyncer/internal/codeberg" + "codeberg.org/snonux/gitsyncer/internal/config" + "codeberg.org/snonux/gitsyncer/internal/forge" + "codeberg.org/snonux/gitsyncer/internal/github" +) + +func newRepoClientForOrg(org config.Organization) (forge.RepoClient, bool) { + switch { + case org.IsGitHub(): + client := github.NewClient(org.GitHubToken, org.Name) + return &client, true + case org.IsCodeberg(): + client := codeberg.NewClient(org.Name, org.CodebergToken) + return &client, true + default: + return nil, false + } +} diff --git a/internal/cli/forge_client_test.go b/internal/cli/forge_client_test.go new file mode 100644 index 0000000..84f819b --- /dev/null +++ b/internal/cli/forge_client_test.go @@ -0,0 +1,52 @@ +package cli + +import ( + "testing" + + "codeberg.org/snonux/gitsyncer/internal/config" +) + +func TestNewRepoClientForOrg(t *testing.T) { + t.Parallel() + + t.Run("github", func(t *testing.T) { + client, ok := newRepoClientForOrg(config.Organization{ + Host: "git@github.com", + Name: "acme", + GitHubToken: "token", + }) + if !ok { + t.Fatal("expected supported github client") + } + if !client.HasToken() { + t.Fatal("expected github client token to be loaded") + } + }) + + t.Run("codeberg", func(t *testing.T) { + client, ok := newRepoClientForOrg(config.Organization{ + Host: "git@codeberg.org", + Name: "acme", + CodebergToken: "token", + }) + if !ok { + t.Fatal("expected supported codeberg client") + } + if !client.HasToken() { + t.Fatal("expected codeberg client token to be loaded") + } + }) + + t.Run("unsupported", func(t *testing.T) { + client, ok := newRepoClientForOrg(config.Organization{ + Host: "ssh://example.org", + Name: "acme", + }) + if ok { + t.Fatal("expected unsupported host") + } + if client != nil { + t.Fatal("expected nil client for unsupported host") + } + }) +} diff --git a/internal/cli/handlers.go b/internal/cli/handlers.go index aa43a86..242bc53 100644 --- a/internal/cli/handlers.go +++ b/internal/cli/handlers.go @@ -7,7 +7,6 @@ import ( "path/filepath" "strings" - "codeberg.org/snonux/gitsyncer/internal/codeberg" "codeberg.org/snonux/gitsyncer/internal/config" "codeberg.org/snonux/gitsyncer/internal/github" "codeberg.org/snonux/gitsyncer/internal/version" @@ -175,20 +174,12 @@ func HandleDeleteRepo(cfg *config.Config, repoName string) int { } for _, org := range cfg.Organizations { - var exists bool - var err error - - switch org.Host { - case "git@github.com": - client := github.NewClient(org.GitHubToken, org.Name) - exists, err = client.RepoExists(repoName) - case "git@codeberg.org": - client := codeberg.NewClient(org.Name, org.CodebergToken) - exists, err = client.RepoExists(repoName) - default: + client, supported := newRepoClientForOrg(org) + if !supported { fmt.Printf("Skipping unsupported host: %s\n", org.Host) continue } + exists, err := client.RepoExists(repoName) orgsWithRepo = append(orgsWithRepo, struct { org config.Organization @@ -240,15 +231,8 @@ func HandleDeleteRepo(cfg *config.Config, repoName string) int { fmt.Printf(" Deleting from %s... ", info.org.GetGitURL()) - var deleteErr error - switch info.org.Host { - case "git@github.com": - client := github.NewClient(info.org.GitHubToken, info.org.Name) - deleteErr = client.DeleteRepo(repoName) - case "git@codeberg.org": - client := codeberg.NewClient(info.org.Name, info.org.CodebergToken) - deleteErr = client.DeleteRepo(repoName) - } + client, _ := newRepoClientForOrg(info.org) + deleteErr := client.DeleteRepo(repoName) if deleteErr != nil { fmt.Printf("FAILED: %v\n", deleteErr) |
