summaryrefslogtreecommitdiff
path: root/src/enquiry.c
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2012-09-13 21:34:43 +0200
committerGuillem Jover <guillem@debian.org>2014-08-09 22:25:46 +0200
commit5bb02fe80e9f40dcad9703a72f67cf615ff217b5 (patch)
tree64a586a6225ebd2023c3d827b4458c35be74c663 /src/enquiry.c
parent840d33bf1de3c65a54f87658b24be7f3e338b14c (diff)
downloaddpkg-5bb02fe80e9f40dcad9703a72f67cf615ff217b5.tar.gz
Add versioned Provides support
- 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 <bcollins@debian.org>
Diffstat (limited to 'src/enquiry.c')
-rw-r--r--src/enquiry.c12
1 files changed, 10 insertions, 2 deletions
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;