From 72fdf2163fb1a6d70b1be567eb6b8ec586d766f0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 23 Apr 2016 07:46:46 +0200 Subject: Revert revision ignoring in satisfy(constraint, constraint) --- bpkg/package | 6 ++++-- bpkg/pkg-configure.cxx | 11 ++++++----- bpkg/satisfaction.cxx | 10 ++++------ 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/bpkg/package b/bpkg/package index ad465e9..ddd385c 100644 --- a/bpkg/package +++ b/bpkg/package @@ -447,8 +447,10 @@ namespace bpkg // optional out_root; - // A map of "effective" prerequisites (i.e., pointers to other - // selected packages) to optional dependency constraint. + // A map of "effective" prerequisites (i.e., pointers to other selected + // packages) to optional dependency constraint. Note that because it is a + // single constraint, we don't support multiple dependencies on the same + // package (e.g., two ranges of versions). See pkg_configure(). // using prerequisites_type = std::map, optional, diff --git a/bpkg/pkg-configure.cxx b/bpkg/pkg-configure.cxx index 8cccddf..abb0ff7 100644 --- a/bpkg/pkg-configure.cxx +++ b/bpkg/pkg-configure.cxx @@ -72,8 +72,9 @@ namespace bpkg auto r (p->prerequisites.emplace (dp, d.constraint)); - // If we already have a dependency on this package, pick the - // stricter of the two constraints. + // Currently we can only capture a single constraint, so if we + // already have a dependency on this package and one constraint is + // not a subset of the other, complain. // if (!r.second) { @@ -83,9 +84,9 @@ namespace bpkg bool s2 (satisfies (d.constraint, c)); if (!s1 && !s2) - fail << "incompatible constraints " - << "(" << n << " " << *c << ") and " - << "(" << n << " " << *d.constraint << ")"; + fail << "multiple dependencies on package " << n << + info << n << " " << *c << + info << n << " " << *d.constraint; if (s2 && !s1) c = d.constraint; diff --git a/bpkg/satisfaction.cxx b/bpkg/satisfaction.cxx index c53e64b..a0ebbfb 100644 --- a/bpkg/satisfaction.cxx +++ b/bpkg/satisfaction.cxx @@ -42,8 +42,8 @@ namespace bpkg { assert (!l.empty () && !r.empty ()); - // See notes in pkg-build:find_available() on ignoring revision in - // comparison. + // Note: the revision ignoring logic is still unclear/unimplemented. It + // seems it will be specific to each case below. // bool s (false); @@ -51,8 +51,7 @@ namespace bpkg { if (r.min_version) { - int i (l.min_version->compare (*r.min_version, - r.min_version->revision == 0)); + int i (l.min_version->compare (*r.min_version, false)); if (l.min_open) // Doesn't matter if r is min_open or not. // @@ -72,8 +71,7 @@ namespace bpkg { if (r.max_version) { - int i (l.max_version->compare (*r.max_version, - r.max_version->revision == 0)); + int i (l.max_version->compare (*r.max_version, false)); if (l.max_open) // Doesn't matter if r is max_open or not. // -- cgit v1.1