From 2eae99f8439203463b376a9d0733d5a9d620d316 Mon Sep 17 00:00:00 2001 From: Martin Varga Date: Tue, 29 Sep 2026 10:20:04 +0200 Subject: [PATCH] Fix inconsistent error code For existing version we must return ProjectVersionExists not an generic upload error. Stale upload and processed tmp files should be removed as well. --- server/mergin/sync/public_api_v2_controller.py | 5 ++--- server/mergin/tests/test_public_api_v2.py | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/server/mergin/sync/public_api_v2_controller.py b/server/mergin/sync/public_api_v2_controller.py index e90c0a99..6dc54dbd 100644 --- a/server/mergin/sync/public_api_v2_controller.py +++ b/server/mergin/sync/public_api_v2_controller.py @@ -351,9 +351,8 @@ def create_project_version(id): if ProjectVersion.query.filter_by( project_id=project.id, name=next_version ).count(): - return UploadError( - error=f"Version {v_next_version} already exists" - ).response(409) + upload.clear() + return ProjectVersionExists(version, next_version).response(409) move_to_tmp(version_dir) try: diff --git a/server/mergin/tests/test_public_api_v2.py b/server/mergin/tests/test_public_api_v2.py index f9b2cf73..d44516d1 100644 --- a/server/mergin/tests/test_public_api_v2.py +++ b/server/mergin/tests/test_public_api_v2.py @@ -1108,6 +1108,14 @@ def test_create_version_failures(client): response = client.post(f"v2/projects/{project.id}/versions", json=data) assert response.status_code == 409 + # target version already exists on server (both on disk and in db), upload is released + with patch.object(Project, "next_version", return_value=1): + response = client.post(f"v2/projects/{project.id}/versions", json=data) + assert response.status_code == 409 + assert response.json["code"] == ProjectVersionExists.code + assert not Upload.query.filter_by(project_id=project.id).first() + assert project.latest_version == 1 + def test_create_version_permanent_error_takes_priority(client): """Permanent errors (e.g. storage limit) must be reported before a