From dcf90064e3671d4eccc5f0f59182a4afe23c95f9 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 28 May 2026 10:02:03 +0300 Subject: refactor(forge): unify repo lifecycle across GitHub and Codeberg (dq) --- internal/codeberg/codeberg.go | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) (limited to 'internal/codeberg/codeberg.go') diff --git a/internal/codeberg/codeberg.go b/internal/codeberg/codeberg.go index 9ecb3d8..4b5e552 100644 --- a/internal/codeberg/codeberg.go +++ b/internal/codeberg/codeberg.go @@ -10,6 +10,7 @@ import ( "path/filepath" "time" + "codeberg.org/snonux/gitsyncer/internal/forge" "codeberg.org/snonux/gitsyncer/internal/httpclient" ) @@ -37,6 +38,8 @@ type Client struct { token string } +var _ forge.RepoClient = (*Client)(nil) + // NewClient creates a new Codeberg API client func NewClient(org, token string) Client { c := Client{ @@ -266,9 +269,9 @@ func (c *Client) RepoExists(repoName string) (bool, error) { // CreateRepo creates a new repository on Codeberg func (c *Client) CreateRepo(repoName, description string, private bool) error { - exists, err := c.RepoExists(repoName) + exists, err := forge.CheckRepoExists(repoName, c.RepoExists) if err != nil { - return fmt.Errorf("failed to check if repo exists: %w", err) + return err } if exists { return nil // Repository already exists @@ -333,14 +336,8 @@ func (c *Client) DeleteRepo(repoName string) error { return fmt.Errorf("Codeberg token required to delete repository") } - // First check if the repo exists - exists, err := c.RepoExists(repoName) - if err != nil { - return fmt.Errorf("failed to check if repo exists: %w", err) - } - if !exists { - // Repo doesn't exist, nothing to delete - return fmt.Errorf("repository %s/%s does not exist", c.org, repoName) + if err := forge.EnsureRepoExists(c.org, repoName, c.RepoExists); err != nil { + return err } url := fmt.Sprintf("%s/repos/%s/%s", c.baseURL, c.org, repoName) @@ -359,20 +356,6 @@ func (c *Client) DeleteRepo(repoName string) error { } defer resp.Body.Close() - if resp.StatusCode == 204 { - // Successfully deleted - return nil - } else if resp.StatusCode == 404 { - // Already gone, consider it a success - return nil - } else if resp.StatusCode == 403 { - body, _ := io.ReadAll(resp.Body) - return fmt.Errorf("permission denied (403): %s", string(body)) - } else if resp.StatusCode == 401 { - body, _ := io.ReadAll(resp.Body) - return fmt.Errorf("authentication failed (401): %s", string(body)) - } - body, _ := io.ReadAll(resp.Body) - return fmt.Errorf("failed to delete repository: status %d: %s", resp.StatusCode, string(body)) + return forge.DeleteStatusError(resp.StatusCode, string(body)) } -- cgit v1.2.3