aboutsummaryrefslogtreecommitdiff
path: root/bpkg/pkg-build.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2021-06-29 19:11:26 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-07-09 13:12:35 +0300
commit50a5c7b14250dab7941e8b0a67dfe6c442d2c5a9 (patch)
tree8c85c9a949673d8516d1b6fa44817db31db0238e /bpkg/pkg-build.cxx
parentce6b3c9c1f0b550181ca1f5a89d732fc3df8fdf4 (diff)
Fix selection of build entry between two in pkg-build
Diffstat (limited to 'bpkg/pkg-build.cxx')
-rw-r--r--bpkg/pkg-build.cxx18
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