diff options
author | Guillem Jover <guillem@debian.org> | 2012-09-13 21:34:43 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2014-08-09 22:25:46 +0200 |
commit | 5bb02fe80e9f40dcad9703a72f67cf615ff217b5 (patch) | |
tree | 64a586a6225ebd2023c3d827b4458c35be74c663 /src/enquiry.c | |
parent | 840d33bf1de3c65a54f87658b24be7f3e338b14c (diff) | |
download | dpkg-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.c | 12 |
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; |