diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2021-06-29 19:11:26 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-07-09 13:12:35 +0300 |
commit | 50a5c7b14250dab7941e8b0a67dfe6c442d2c5a9 (patch) | |
tree | 8c85c9a949673d8516d1b6fa44817db31db0238e /bpkg | |
parent | ce6b3c9c1f0b550181ca1f5a89d732fc3df8fdf4 (diff) |
Fix selection of build entry between two in pkg-build
Diffstat (limited to 'bpkg')
-rw-r--r-- | bpkg/pkg-build.cxx | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx index 32a680f..1e80d1e 100644 --- a/bpkg/pkg-build.cxx +++ b/bpkg/pkg-build.cxx @@ -604,12 +604,20 @@ namespace bpkg { using constraint_type = build_package::constraint_type; - // If the versions differ, we have to pick one. Start with the - // newest version since if both satisfy, then that's the one we - // should prefer. So get the first to try into p1 and the second - // to try -- into p2. + // If the versions differ, we have to pick one. Pick with the + // following preference order: user selection over implicit one, + // source package over a system one, newer version over an older + // one. So get the preferred to try into p1 and the other to try + // -- into p2. // - if (p2->available_version () > p1->available_version ()) + int us (p1->user_selection () - p2->user_selection ()); + int sf (p1->system - p2->system); + + if (us < 0 || + (us == 0 && sf > 0) || + (us == 0 && + sf == 0 && + p2->available_version () > p1->available_version ())) swap (p1, p2); // See if pv's version satisfies pc's constraints. Return the |