From 49ebbc34fae89391a379d0f3af47eb31dcabcddb Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Tue, 24 Feb 2026 15:33:06 +0200 Subject: [PATCH] fix: do not update package status if it is unchanged In order to prevent timestamp bumps, filter by status is added --- .../database/operations/package_operations.py | 1 + .../operations/test_package_operations.py | 26 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ahriman/core/database/operations/package_operations.py b/src/ahriman/core/database/operations/package_operations.py index 3b806eb2..13a96436 100644 --- a/src/ahriman/core/database/operations/package_operations.py +++ b/src/ahriman/core/database/operations/package_operations.py @@ -292,6 +292,7 @@ class PackageOperations(Operations): (:package_base, :status, :last_updated, :repository) on conflict (package_base, repository) do update set status = :status, last_updated = :last_updated + where status != :status """, { "package_base": package_base, diff --git a/tests/ahriman/core/database/operations/test_package_operations.py b/tests/ahriman/core/database/operations/test_package_operations.py index c87d478e..60c0327e 100644 --- a/tests/ahriman/core/database/operations/test_package_operations.py +++ b/tests/ahriman/core/database/operations/test_package_operations.py @@ -157,8 +157,7 @@ def test_package_update_get(database: SQLite, package_ahriman: Package) -> None: database.package_update(package_ahriman) database.status_update(package_ahriman.base, status) assert next((db_package, db_status) - for db_package, db_status in database.packages_get() - if db_package.base == package_ahriman.base) == (package_ahriman, status) + for db_package, db_status in database.packages_get()) == (package_ahriman, status) def test_package_update_remove_get(database: SQLite, package_ahriman: Package) -> None: @@ -176,10 +175,10 @@ def test_package_update_update(database: SQLite, package_ahriman: Package) -> No """ database.package_update(package_ahriman) package_ahriman.version = "1.0.0" + database.package_update(package_ahriman) assert next(db_package.version - for db_package, _ in database.packages_get() - if db_package.base == package_ahriman.base) == package_ahriman.version + for db_package, _ in database.packages_get()) == package_ahriman.version def test_status_update(database: SQLite, package_ahriman: Package) -> None: @@ -188,6 +187,19 @@ def test_status_update(database: SQLite, package_ahriman: Package) -> None: """ status = BuildStatus() - database.package_update(package_ahriman, database._repository_id) - database.status_update(package_ahriman.base, status, database._repository_id) - assert database.packages_get(database._repository_id) == [(package_ahriman, status)] + database.package_update(package_ahriman) + database.status_update(package_ahriman.base, status) + assert database.packages_get() == [(package_ahriman, status)] + + +def test_status_update_skip_same_status(database: SQLite, package_ahriman: Package) -> None: + """ + must preserve original timestamp when status is unchanged + """ + status = BuildStatus(timestamp=42) + database.package_update(package_ahriman) + + database.status_update(package_ahriman.base, status) + database.status_update(package_ahriman.base, BuildStatus()) + assert next(db_status.timestamp + for _, db_status in database.packages_get()) == status.timestamp