fix: do not update package status if it is unchanged

In order to prevent timestamp bumps, filter by status is added
This commit is contained in:
2026-02-24 15:33:06 +02:00
parent e376f1307f
commit 49ebbc34fa
2 changed files with 20 additions and 7 deletions

View File

@@ -292,6 +292,7 @@ class PackageOperations(Operations):
(:package_base, :status, :last_updated, :repository) (:package_base, :status, :last_updated, :repository)
on conflict (package_base, repository) do update set on conflict (package_base, repository) do update set
status = :status, last_updated = :last_updated status = :status, last_updated = :last_updated
where status != :status
""", """,
{ {
"package_base": package_base, "package_base": package_base,

View File

@@ -157,8 +157,7 @@ def test_package_update_get(database: SQLite, package_ahriman: Package) -> None:
database.package_update(package_ahriman) database.package_update(package_ahriman)
database.status_update(package_ahriman.base, status) database.status_update(package_ahriman.base, status)
assert next((db_package, db_status) assert next((db_package, db_status)
for db_package, db_status in database.packages_get() for db_package, db_status in database.packages_get()) == (package_ahriman, status)
if db_package.base == package_ahriman.base) == (package_ahriman, status)
def test_package_update_remove_get(database: SQLite, package_ahriman: Package) -> None: 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) database.package_update(package_ahriman)
package_ahriman.version = "1.0.0" package_ahriman.version = "1.0.0"
database.package_update(package_ahriman) database.package_update(package_ahriman)
assert next(db_package.version assert next(db_package.version
for db_package, _ in database.packages_get() for db_package, _ in database.packages_get()) == package_ahriman.version
if db_package.base == package_ahriman.base) == package_ahriman.version
def test_status_update(database: SQLite, package_ahriman: Package) -> None: 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() status = BuildStatus()
database.package_update(package_ahriman, database._repository_id) database.package_update(package_ahriman)
database.status_update(package_ahriman.base, status, database._repository_id) database.status_update(package_ahriman.base, status)
assert database.packages_get(database._repository_id) == [(package_ahriman, 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