From f83ae9ce7a2d7f3158ca043d947b230f27dbe7bd Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 17 May 2023 21:16:13 +0300 Subject: Postpone failure due to unsatisfied dependency constraint for existing dependent --- bpkg/pkg-configure.cxx | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'bpkg/pkg-configure.cxx') diff --git a/bpkg/pkg-configure.cxx b/bpkg/pkg-configure.cxx index 45ab10b..2801539 100644 --- a/bpkg/pkg-configure.cxx +++ b/bpkg/pkg-configure.cxx @@ -30,6 +30,8 @@ using namespace butl; namespace bpkg { + static optional absent_constraint; + configure_prerequisites_result pkg_configure_prerequisites (const common_options& o, database& db, @@ -40,10 +42,15 @@ namespace bpkg const vector* prev_prereqs, bool simulate, const function& fdb, - const function& fps) + const function& fps, + const vector* unconstrain_deps) { tracer trace ("pkg_configure_prerequisites"); + // Unconstraining dependencies are only allowed in the simulation mode. + // + assert (unconstrain_deps == nullptr || simulate); + tracer_guard tg (db, trace); package_prerequisites prereqs; @@ -161,12 +168,28 @@ namespace bpkg if (dp == nullptr) break; + database& pdb (*spd.second); + optional> dps; if (fps != nullptr) dps = fps (dp); + const optional* dc (&d.constraint); + + // Unconstrain this dependency, if requested. + // + if (unconstrain_deps != nullptr) + { + const vector& uds (*unconstrain_deps); + if (find (uds.begin (), uds.end (), package_key (pdb, n)) != + uds.end ()) + { + dc = &absent_constraint; + } + } + if ((dps ? dps->first : dp->state) != package_state::configured || - !satisfies (dp->version, d.constraint) || + !satisfies (dp->version, *dc) || (pps != nullptr && find (pps->begin (), pps->end (), dp->name) == pps->end ())) break; @@ -177,8 +200,8 @@ namespace bpkg bool conf (da.prefer || da.require); prerequisites.emplace_back ( - lazy_shared_ptr (*spd.second, dp), - prerequisite_info {d.constraint, + lazy_shared_ptr (pdb, dp), + prerequisite_info {*dc, make_pair (conf ? di + 1 : 0, conf ? dai + 1 : 0)}); } -- cgit v1.1