From f28fb217054e58ca935b632d2f7f61a21143a968 Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Sun, 1 Nov 2026 15:20:58 +1100 Subject: [PATCH] keep existing repo_type on explicit empty PUT; repair wiped locals as local --- internal/api/v2/remotes.go | 4 +++- internal/api/v2/remotes_ttl_test.go | 1 + migrations/0011_remote_repo_type_repair.sql | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/api/v2/remotes.go b/internal/api/v2/remotes.go index 8f378ab..42c92e0 100644 --- a/internal/api/v2/remotes.go +++ b/internal/api/v2/remotes.go @@ -135,13 +135,15 @@ func (h *RemotesHandler) update(w http.ResponseWriter, r *http.Request) { if oldKnown { remote.MutableTTL = existing.MutableTTL remote.QuarantineDays = existing.QuarantineDays - remote.RepoType = existing.RepoType } if err := json.NewDecoder(r.Body).Decode(&remote); err != nil { http.Error(w, "invalid json", http.StatusBadRequest) return } remote.Name = name + if remote.RepoType == "" && oldKnown { + remote.RepoType = existing.RepoType + } if remote.RepoType == "" { remote.RepoType = models.RepoTypeRemote } diff --git a/internal/api/v2/remotes_ttl_test.go b/internal/api/v2/remotes_ttl_test.go index 0ce8f44..ecaa824 100644 --- a/internal/api/v2/remotes_ttl_test.go +++ b/internal/api/v2/remotes_ttl_test.go @@ -201,6 +201,7 @@ func TestRepoTypeKeptOnUpdate(t *testing.T) { {"PUT", "/rt-remote", `{` + body + `}`, 200, "rt-remote", "remote"}, {"POST", "/", `{"name":"rt-local","package_type":"rpm","repo_type":"local"}`, 201, "rt-local", "local"}, {"PUT", "/rt-local", `{"package_type":"rpm","description":"x"}`, 200, "rt-local", "local"}, + {"PUT", "/rt-local", `{"package_type":"rpm","repo_type":""}`, 200, "rt-local", "local"}, {"PUT", "/rt-local", `{"package_type":"rpm","repo_type":"bogus"}`, 400, "rt-local", "local"}, } { if c := do(t, h, s.method, s.path, s.json); c != s.code { diff --git a/migrations/0011_remote_repo_type_repair.sql b/migrations/0011_remote_repo_type_repair.sql index 164e44b..9c4d7b2 100644 --- a/migrations/0011_remote_repo_type_repair.sql +++ b/migrations/0011_remote_repo_type_repair.sql @@ -1 +1 @@ -UPDATE remotes SET repo_type = 'remote' WHERE repo_type = '' OR repo_type IS NULL; +UPDATE remotes SET repo_type = CASE WHEN COALESCE(base_url, '') = '' THEN 'local' ELSE 'remote' END WHERE repo_type = '' OR repo_type IS NULL;