summaryrefslogtreecommitdiff
path: root/internal/cli
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli')
-rw-r--r--internal/cli/forge_client.go21
-rw-r--r--internal/cli/forge_client_test.go52
-rw-r--r--internal/cli/handlers.go26
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)