From 50a5c7b14250dab7941e8b0a67dfe6c442d2c5a9 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 29 Jun 2021 19:11:26 +0300 Subject: Fix selection of build entry between two in pkg-build --- bpkg/pkg-build.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'bpkg/pkg-build.cxx') 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 -- cgit v1.1