From 2e8fe783a11bcd6ccc7f1a08d8b38eb76d87dc35 Mon Sep 17 00:00:00 2001
From: Timo Teräs <timo.teras@iki.fi>
Date: Tue, 28 Feb 2012 14:56:08 +0200
Subject: add: allow specifying repository tag with added virtual packages

---
 src/add.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/add.c b/src/add.c
index 36f51cf..2afe834 100644
--- a/src/add.c
+++ b/src/add.c
@@ -69,21 +69,31 @@ static int add_main(void *ctx, struct apk_database *db, int argc, char **argv)
 	apk_dependency_array_copy(&world, db->world);
 
 	if (actx->virtpkg) {
+		apk_blob_t b = APK_BLOB_STR(actx->virtpkg);
+
 		if (non_repository_check(db))
 			return -1;
 
+		apk_blob_pull_dep(&b, db, &virtdep);
+		if (APK_BLOB_IS_NULL(b) ||
+		    virtdep.result_mask != APK_DEPMASK_REQUIRE ||
+		    virtdep.version != &apk_null_blob) {
+			apk_error("%s: bad package specifier");
+			return -1;
+		}
+
 		virtpkg = apk_pkg_new();
 		if (virtpkg == NULL) {
 			apk_error("Failed to allocate virtual meta package");
 			return -1;
 		}
-		virtpkg->name = apk_db_get_name(db, APK_BLOB_STR(actx->virtpkg));
+		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"));
 		virtpkg->description = strdup("virtual meta package");
 		virtpkg->arch = apk_blob_atomize(APK_BLOB_STR("noarch"));
-		apk_dep_from_pkg(&virtdep, db, virtpkg);
+		virtpkg->repos |= db->repo_tags[virtdep.repository_tag].allowed_repos;
 		virtpkg = apk_db_pkg_add(db, virtpkg);
 	}
 
-- 
cgit v1.2.3-70-g09d2