From af8ab19f5def6f00081b0a6d1e5b20b76683f720 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 24 Jun 2025 10:00:28 +0300 Subject: refactor: use value semantics for GitHub and Codeberg clients MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed github.NewClient() to return Client instead of *Client - Changed codeberg.NewClient() to return Client instead of *Client - Updated sync_handlers.go to handle value semantics properly - Both clients only contain immutable string fields, making value semantics more appropriate docs: add comprehensive documentation - Added doc/ directory with full documentation - Created architecture overview explaining system design - Added complete API reference for all packages, types, and functions - Created configuration guide with examples - Added usage examples and common workflows - Created development guide for contributors - Updated README with links to documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- internal/cli/sync_handlers.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'internal/cli') diff --git a/internal/cli/sync_handlers.go b/internal/cli/sync_handlers.go index dd0dcf9..4fbb6cf 100644 --- a/internal/cli/sync_handlers.go +++ b/internal/cli/sync_handlers.go @@ -37,9 +37,13 @@ func HandleSyncAll(cfg *config.Config, flags *Flags) int { } // Initialize GitHub client if needed - var githubClient *github.Client + var githubClient github.Client + var hasGithubClient bool if flags.CreateGitHubRepos { - githubClient = initGitHubClient(cfg) + if client := initGitHubClient(cfg); client != nil { + githubClient = *client + hasGithubClient = true + } } syncer := sync.New(cfg, flags.WorkDir) @@ -49,8 +53,8 @@ func HandleSyncAll(cfg *config.Config, flags *Flags) int { fmt.Printf("\n[%d/%d] Syncing %s...\n", i+1, len(cfg.Repositories), repo) // Create GitHub repo if needed - if githubClient != nil { - if err := createRepoWithClient(githubClient, repo, fmt.Sprintf("Mirror of %s", repo)); err != nil { + if hasGithubClient { + if err := createRepoWithClient(&githubClient, repo, fmt.Sprintf("Mirror of %s", repo)); err != nil { fmt.Printf("ERROR: Failed to create GitHub repo %s: %v\n", repo, err) fmt.Printf("Stopping sync due to error.\n") return 1 @@ -207,7 +211,7 @@ func initGitHubClient(cfg *config.Config) *github.Client { } fmt.Println("GitHub client initialized successfully with token") - return githubClient + return &githubClient } func createRepoWithClient(client *github.Client, repoName, description string) error { @@ -230,9 +234,13 @@ func printFullSyncSeparator() { func syncCodebergRepos(cfg *config.Config, flags *Flags, repos []codeberg.Repository, repoNames []string) int { // Initialize GitHub client if needed - var githubClient *github.Client + var githubClient github.Client + var hasGithubClient bool if flags.CreateGitHubRepos { - githubClient = initGitHubClient(cfg) + if client := initGitHubClient(cfg); client != nil { + githubClient = *client + hasGithubClient = true + } } fmt.Printf("\nStarting sync of %d repositories...\n", len(repoNames)) @@ -250,7 +258,7 @@ func syncCodebergRepos(cfg *config.Config, flags *Flags, repos []codeberg.Reposi fmt.Printf("\n[%d/%d] Syncing %s...\n", i+1, len(repoNames), repoName) // Create GitHub repo if needed - if githubClient != nil && flags.CreateGitHubRepos { + if hasGithubClient && flags.CreateGitHubRepos { codebergRepo := repoMap[repoName] description := codebergRepo.Description if description == "" { -- cgit v1.2.3