summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2019-06-03 09:27:33 +0300
committerTimo Teräs <timo.teras@iki.fi>2019-06-03 09:33:43 +0300
commit37fbafcd928c466c82c892a7868d686d710e5d07 (patch)
tree626eb11fa3ca37dbd72c5dced707ebccc5b9bf03
parentd901444ec94a1874e19c8c30b805e2d17b61e6fc (diff)
downloadapk-tools-37fbafcd928c466c82c892a7868d686d710e5d07.tar.gz
apk-tools-37fbafcd928c466c82c892a7868d686d710e5d07.tar.bz2
apk-tools-37fbafcd928c466c82c892a7868d686d710e5d07.tar.xz
apk-tools-37fbafcd928c466c82c892a7868d686d710e5d07.zip
add: make virtual packages upgradeable (ref #9957)
Originally the virtual packages could have dependencies added to it. However, commit b06e3b99 broke this behaviour to fix error reporting. The root cause however was that the virtual depedency package was not properly versioned. This fixes to use current date/time as the package version, and constructs the "faked" package hash from it. This effectively makes "add -t virtpkg deps.." replace the dependencies which should be the desired behaviour for "abuild deps". 'world' dependency to the generated virtual package is also now versioned to make sure it get's upgraded.
-rw-r--r--src/add.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/add.c b/src/add.c
index 946dc55..7df8197 100644
--- a/src/add.c
+++ b/src/add.c
@@ -93,6 +93,9 @@ static int add_main(void *ctx, struct apk_database *db, struct apk_string_array
if (actx->virtpkg) {
apk_blob_t b = APK_BLOB_STR(actx->virtpkg);
+ struct tm tm;
+ time_t now;
+ char ver[32];
apk_blob_pull_dep(&b, db, &virtdep);
if (APK_BLOB_IS_NULL(b) || virtdep.conflict ||
@@ -105,17 +108,23 @@ static int add_main(void *ctx, struct apk_database *db, struct apk_string_array
if (virtdep.name->name[0] != '.' && non_repository_check(db))
return -1;
+ time(&now);
+ localtime_r(&now, &tm);
+ strftime(ver, sizeof ver, "%Y%m%d.%H%M%S", &tm);
+
virtpkg = apk_pkg_new();
if (virtpkg == NULL) {
apk_error("Failed to allocate virtual meta package");
return -1;
}
virtpkg->name = virtdep.name;
- apk_blob_checksum(APK_BLOB_STR(virtpkg->name->name),
- apk_checksum_default(), &virtpkg->csum);
- virtpkg->version = apk_blob_atomize(APK_BLOB_STR("0"));
+ apk_blob_checksum(APK_BLOB_STR(ver), apk_checksum_default(), &virtpkg->csum);
+ virtpkg->version = apk_blob_atomize(APK_BLOB_STR(ver));
virtpkg->description = strdup("virtual meta package");
virtpkg->arch = apk_blob_atomize(APK_BLOB_STR("noarch"));
+
+ virtdep.result_mask = APK_VERSION_EQUAL;
+ virtdep.version = virtpkg->version;
}
foreach_array_item(parg, args) {