From c85197ea5ec8e0c98b4fbea9855d8e3c1eeb72c9 Mon Sep 17 00:00:00 2001 From: gitea-mcp bot Date: Wed, 6 May 2026 14:04:36 +0000 Subject: [PATCH] fix(files): route UpsertFile to POST when sha is empty so new files can be created --- internal/gitea/files.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/gitea/files.go b/internal/gitea/files.go index e579dd4..3fcd229 100644 --- a/internal/gitea/files.go +++ b/internal/gitea/files.go @@ -92,13 +92,24 @@ type FileWriteResult struct { } `json:"commit"` } +// UpsertFile creates a file when args.Sha is empty (POST) or updates an existing +// file when args.Sha is set (PUT). Gitea routes both operations by HTTP method on +// the same /contents/{path} URL, and rejects PUT without a sha. func (c *Client) UpsertFile(ctx context.Context, owner, repo, path string, args UpsertFileArgs) (*FileWriteResult, error) { p := fmt.Sprintf("/api/v1/repos/%s/%s/contents/%s", owner, repo, path) payload, err := json.Marshal(args) if err != nil { return nil, err } - body, status, err := c.PutJSON(ctx, p, payload) + var ( + body []byte + status int + ) + if args.Sha == "" { + body, status, err = c.PostJSON(ctx, p, payload) + } else { + body, status, err = c.PutJSON(ctx, p, payload) + } if err != nil { return nil, err }