summaryrefslogtreecommitdiff
path: root/internal/codeberg/codeberg.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-28 10:02:03 +0300
committerPaul Buetow <paul@buetow.org>2026-05-28 10:02:03 +0300
commitdcf90064e3671d4eccc5f0f59182a4afe23c95f9 (patch)
treeb2d866e647e036962a0f000d6aea8517097a234e /internal/codeberg/codeberg.go
parent1325155d123d9403ea964152b125efd960522603 (diff)
refactor(forge): unify repo lifecycle across GitHub and Codeberg (dq)
Diffstat (limited to 'internal/codeberg/codeberg.go')
-rw-r--r--internal/codeberg/codeberg.go33
1 files changed, 8 insertions, 25 deletions
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))
}