From 5bb02fe80e9f40dcad9703a72f67cf615ff217b5 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Thu, 13 Sep 2012 21:34:43 +0200 Subject: Add versioned Provides support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add a new dpkg --assert-versioned-provides command. - Packages can provide a specific version, “virtual (= 1.0)” which will be honored, previously it would just be accepted when parsing. - Non-versioned virtual packages will not satisfy versioned dependencies. - Versioned virtual packages will satisfy non-versioned dependencies. This commit is very slightly based on the code reverted in commit 7df7d53a57b9913f4a20b2c9dcd554a2d88ff9f3, which was mostly skeletal. Closes: #7330, #24934, #112131, #134582, #180316 Based-on-patch-by: Ben Collins --- src/enquiry.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/enquiry.c') diff --git a/src/enquiry.c b/src/enquiry.c index f1597b002..e3f49cfbb 100644 --- a/src/enquiry.c +++ b/src/enquiry.c @@ -432,6 +432,14 @@ assertmultiarch(const char *const *argv) return assert_version_support(argv, &version, _("multi-arch")); } +int +assertverprovides(const char *const *argv) +{ + struct dpkg_version version = { 0, "1.17.11", NULL }; + + return assert_version_support(argv, &version, _("versioned Provides")); +} + /** * Print a single package which: * (a) is the target of one or more relevant predependencies. @@ -508,13 +516,13 @@ predeppackage(const char *const *argv) pkg = trypkg; break; } - if (possi->verrel != DPKG_RELATION_NONE) - continue; for (provider = possi->ed->depended.available; !pkg && provider; provider = provider->next) { if (provider->up->type != dep_provides) continue; + if (!pkg_virtual_deppossi_satisfied(possi, provider)) + continue; trypkg = provider->up->up; if (!trypkg->files) continue; -- cgit v1.2.3