diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2023-10-30 14:43:35 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2023-11-02 14:04:09 +0300 |
commit | ee7ec3887d5c15ae3ef719dd38237282fe8c11e8 (patch) | |
tree | d932883dd588d40e8403e4efddb7755d2d3baf1d | |
parent | 87a284335715301fa2cea695386bfcd21a2fe781 (diff) |
Fix configuration negotiation machinery to postpone collecting cluster's existing dependent which is already a dependency in some cluster
-rw-r--r-- | bpkg/pkg-build-collect.cxx | 108 | ||||
-rw-r--r-- | tests/pkg-build.testscript | 306 |
2 files changed, 341 insertions, 73 deletions
diff --git a/bpkg/pkg-build-collect.cxx b/bpkg/pkg-build-collect.cxx index f664bf7..c83645b 100644 --- a/bpkg/pkg-build-collect.cxx +++ b/bpkg/pkg-build-collect.cxx @@ -5158,28 +5158,28 @@ namespace bpkg build_package p { build_package::build, - db, - sp, - move (rp.first), - move (rp.second), - nullopt, // Dependencies. - nullopt, // Dependencies alternatives. - nullopt, // Package skeleton. - nullopt, // Postponed dependency alternatives. - false, // Recursive collection. - nullopt, // Hold package. - nullopt, // Hold version. - {}, // Constraints. - sp->system (), - false, // Keep output directory. - false, // Disfigure (from-scratch reconf). - false, // Configure-only. - nullopt, // Checkout root. - false, // Checkout purge. - strings (), // Configuration variables. - move (required_by), // Required by (dependencies). - false, // Required by dependents. - build_package::adjust_reconfigure | build_package::build_repoint}; + db, + sp, + move (rp.first), + move (rp.second), + nullopt, // Dependencies. + nullopt, // Dependencies alternatives. + nullopt, // Package skeleton. + nullopt, // Postponed dependency alternatives. + false, // Recursive collection. + nullopt, // Hold package. + nullopt, // Hold version. + {}, // Constraints. + sp->system (), + false, // Keep output directory. + false, // Disfigure (from-scratch reconf). + false, // Configure-only. + nullopt, // Checkout root. + false, // Checkout purge. + strings (), // Configuration variables. + move (required_by), // Required by (dependencies). + false, // Required by dependents. + build_package::adjust_reconfigure | build_package::build_repoint}; build_package_refs dep_chain; @@ -5639,11 +5639,12 @@ namespace bpkg { package_key pk (ed.db, ed.selected->name); - // If this dependent is present in postponed_deps, then it - // means someone depends on it with configuration and it's no - // longer considered an existing dependent (it will be - // reconfigured). However, this fact may not be reflected - // yet. And it can actually turn out bogus. + // If this dependent is present in postponed_deps or in some + // cluster as a dependency, then it means that someone depends + // on it with configuration and it's no longer considered an + // existing dependent (it will be reconfigured). However, this + // fact may not be reflected yet. And it can actually turn out + // bogus. // auto pi (postponed_deps.find (pk)); if (pi != postponed_deps.end ()) @@ -5660,6 +5661,20 @@ namespace bpkg continue; } + const postponed_configuration* pcfg ( + postponed_cfgs.find_dependency (pk)); + + if (pcfg != nullptr) + { + l5 ([&]{trace << "skip existing dependent " << pk + << " of dependency " << p << " since " + << "dependent already in cluster " << *pcfg + << " (as a dependency)";}); + + postponed_existing_dependents.insert (pk); + continue; + } + auto i (dependents.find (pk)); // If the existing dependent is not in the map yet, then add @@ -5786,14 +5801,29 @@ namespace bpkg } } - l5 ([&]{trace << "cfg-negotiate begin " << *pcfg;}); - // Negotiate the configuration. // // The overall plan is as follows: continue refining the configuration // until there are no more changes by giving each dependent a chance to // make further adjustments. // + l5 ([&]{trace << "cfg-negotiate begin " << *pcfg;}); + + // For the cluster's dependencies, the skeleton should not be present + // since we haven't yet started recursively collecting them. And we + // couldn't have started collecting them before we negotiated their + // configurations (that's in contrast to the up-negotiation). Let's + // assert for that here to make sure that's also true for dependencies + // of the postponed existing dependents of this cluster. + // +#ifndef NDEBUG + for (const package_key& p: pcfg->dependencies) + { + build_package* b (entered_build (p)); + assert (b != nullptr && !b->skeleton && !b->recursive_collection); + } +#endif + for (auto b (pcfg->dependents.begin ()), i (b), e (pcfg->dependents.end ()); i != e; ) @@ -5831,7 +5861,6 @@ namespace bpkg // pair<size_t, size_t> pos; small_vector<reference_wrapper<package_skeleton>, 1> depcs; - forward_list<package_skeleton> depcs_storage; // Ref stability. bool has_alt; { // A non-negotiated cluster must only have one depends position for @@ -5856,21 +5885,14 @@ namespace bpkg for (const package_key& pk: ds) { build_package* b (entered_build (pk)); - assert (b != nullptr); - package_skeleton* depc; - if (b->recursive_collection) - { - assert (b->skeleton); + // Shouldn't be here otherwise. + // + assert (b != nullptr && !b->recursive_collection); - depcs_storage.push_front (*b->skeleton); - depc = &depcs_storage.front (); - depc->reset (); - } - else - depc = &(b->skeleton - ? *b->skeleton - : b->init_skeleton (o /* options */)); + package_skeleton* depc (&(b->skeleton + ? *b->skeleton + : b->init_skeleton (o /* options */))); depcs.push_back (*depc); } diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript index a37ea9f..cc69b1a 100644 --- a/tests/pkg-build.testscript +++ b/tests/pkg-build.testscript @@ -13862,6 +13862,280 @@ test.arguments += --sys-no-query $pkg_drop tiz } + : skip-existing-dependent-cluster + : + : Similar to skip-existing-dependent but skip the existing dependent + : because it is already in a cluster as a dependency. + : + { + $clone_cfg; + + # Dependencies: + # + # bac: depends: libbar(c) + # depends: libbaz(c) + # depends: libfoo(c) + # + # bas: depends: libbar(c) + # depends: bus(c) + # + # bus: depends: libbaz(c) + # depends: foo(c) + # + # foo: depends: libfoo(c) + # + # box: depends: {libbar libfoo} (c) | libbox + # + $* bac bas 2>!; + + $pkg_status -r >>EOO; + !bac configured 1.0.0 + libbar configured 1.0.0 + libbaz configured 1.0.0 + libfoo configured 1.0.0 + !bas configured 1.0.0 + bus configured 1.0.0 + foo configured 1.0.0 + libfoo configured 1.0.0 + libbaz configured 1.0.0 + libbar configured 1.0.0 + EOO + + $* box 2>&1 | $filter 2>>~%EOE%; + %.* + trace: pkg_build: refine package collection/plan execution from scratch + trace: collect_build: add box/1.0.0 + trace: collect_build_prerequisites: begin box/1.0.0 + trace: collect_build_prerequisites: alt-postpone dependent box/1.0.0 since max index is reached: 0 + info: dependency alternative: {libbar libfoo} + { + require + { + config.libbar.extras = true + config.libfoo.extras = true + } + } + trace: collect_build_prerequisites: postpone box/1.0.0 + trace: collect_build_postponed (0): begin + trace: collect_build_postponed (0): index 1 collect alt-postponed box/1.0.0 + trace: collect_build_prerequisites: resume box/1.0.0 + trace: collect_build: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 + trace: collect_build: add libfoo/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0 + trace: postponed_configurations::add: create {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: postpone box/1.0.0 + trace: collect_build_postponed (1): begin {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: pre-reeval bac/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bac/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval bas/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bas/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval foo/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated foo/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval bac/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bac/1.0.0: 1,1 + trace: collect_build_postponed (1): re-evaluate existing dependents for {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build: add bac/1.0.0 + trace: collect_build_prerequisites: reeval bac/1.0.0 + trace: postponed_configurations::add: add {bac^ 1,1: libbar} to {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent bac/1.0.0 results in {bac^ box | libbar->{bac/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluated bac/1.0.0 + trace: collect_build: add bas/1.0.0 + trace: collect_build_prerequisites: reeval bas/1.0.0 + trace: postponed_configurations::add: add {bas^ 1,1: libbar} to {bac^ box | libbar->{bac/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent bas/1.0.0 results in {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluated bas/1.0.0 + trace: collect_build: add foo/1.0.0 + trace: collect_build_prerequisites: reeval foo/1.0.0 + trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {bac^ bas^ box foo^ | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}} + trace: collect_build_prerequisites: re-evaluated foo/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {bac^ bas^ box foo^ | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}} + %.* + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbar/1.0.0 + trace: collect_build_prerequisites: skip configured libfoo/1.0.0 + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bac/1.0.0 + trace: collect_build_prerequisites: resume bac/1.0.0 + trace: collect_build: add libbaz/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent bac/1.0.0 + trace: postponed_configurations::add: create {bac | libbaz->{bac/2,1}} + trace: collect_build_prerequisites: postpone bac/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bas/1.0.0 + trace: collect_build_prerequisites: resume bas/1.0.0 + trace: collect_build: add bus/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency bus/1.0.0 of dependent bas/1.0.0 + trace: postponed_configurations::add: create {bas | bus->{bas/2,1}} + trace: collect_build_prerequisites: postpone bas/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent box/1.0.0 + trace: collect_build_prerequisites: resume box/1.0.0 + trace: collect_build_prerequisites: end box/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent foo/1.0.0 + trace: collect_build_prerequisites: resume foo/1.0.0 + trace: collect_build_prerequisites: end foo/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate end {bac^ bas^ box foo^ | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}}! + trace: collect_build_postponed (2): begin {bac | libbaz->{bac/2,1}} + trace: collect_build_prerequisites: pre-reeval bus/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bus/1.0.0: 1,1 + trace: collect_build_postponed (2): skip being built existing dependent bac of dependency libbaz + trace: collect_build_postponed (2): skip existing dependent bus of dependency libbaz since dependent already in cluster {bas | bus->{bas/2,1}} (as a dependency) + trace: collect_build_postponed (2): cfg-negotiate begin {bac | libbaz->{bac/2,1}} + %.* + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbaz/1.0.0 + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent bac/1.0.0 + trace: collect_build_prerequisites: resume bac/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent bac/1.0.0 + trace: postponed_configurations::add: add {bac 3,1: libfoo} to {bac^ bas^ box foo^ | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bac/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libfoo/1.0.0 of dependent bac/1.0.0 is already (being) recursively collected, skipping + trace: collect_build_prerequisites: end bac/1.0.0 + trace: collect_build_postponed (2): cfg-negotiate end {bac | libbaz->{bac/2,1}}! + trace: collect_build_postponed (3): begin {bas | bus->{bas/2,1}} + trace: collect_build_postponed (3): skip being built existing dependent bas of dependency bus + trace: collect_build_postponed (3): cfg-negotiate begin {bas | bus->{bas/2,1}} + %.* + trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin bus/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent bus/1.0.0 + trace: postponed_configurations::add: add {bus 1,1: libbaz} to {bac | libbaz->{bac/2,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bus/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libbaz/1.0.0 of dependent bus/1.0.0 is already (being) recursively collected, skipping + trace: collect_build_prerequisites: cannot cfg-postpone dependency foo/1.0.0 of dependent bus/1.0.0 (collected prematurely), throwing postpone_dependency + trace: pkg_build: collection failed due to prematurely collected dependency (foo), retry from scratch + trace: pkg_build: refine package collection/plan execution from scratch + trace: collect_build: add box/1.0.0 + trace: collect_build_prerequisites: begin box/1.0.0 + trace: collect_build_prerequisites: alt-postpone dependent box/1.0.0 since max index is reached: 0 + info: dependency alternative: {libbar libfoo} + { + require + { + config.libbar.extras = true + config.libfoo.extras = true + } + } + trace: collect_build_prerequisites: postpone box/1.0.0 + trace: collect_build_postponed (0): begin + trace: collect_build_postponed (0): index 1 collect alt-postponed box/1.0.0 + trace: collect_build_prerequisites: resume box/1.0.0 + trace: collect_build: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0 + trace: collect_build: add libfoo/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0 + trace: postponed_configurations::add: create {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: postpone box/1.0.0 + trace: collect_build_postponed (1): begin {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: pre-reeval bac/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bac/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval bas/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bas/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval foo/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated foo/1.0.0: 1,1 + trace: collect_build_prerequisites: pre-reeval bac/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bac/1.0.0: 1,1 + trace: collect_build_postponed (1): skip dep-postponed existing dependent foo of dependency libfoo + trace: collect_build_postponed (1): re-evaluate existing dependents for {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build: add bac/1.0.0 + trace: collect_build_prerequisites: reeval bac/1.0.0 + trace: postponed_configurations::add: add {bac^ 1,1: libbar} to {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent bac/1.0.0 results in {bac^ box | libbar->{bac/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluated bac/1.0.0 + trace: collect_build: add bas/1.0.0 + trace: collect_build_prerequisites: reeval bas/1.0.0 + trace: postponed_configurations::add: add {bas^ 1,1: libbar} to {bac^ box | libbar->{bac/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent bas/1.0.0 results in {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_prerequisites: re-evaluated bas/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}} + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbar/1.0.0 + trace: collect_build_prerequisites: skip configured libfoo/1.0.0 + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bac/1.0.0 + trace: collect_build_prerequisites: resume bac/1.0.0 + trace: collect_build: add libbaz/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent bac/1.0.0 + trace: postponed_configurations::add: create {bac | libbaz->{bac/2,1}} + trace: collect_build_prerequisites: postpone bac/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bas/1.0.0 + trace: collect_build_prerequisites: resume bas/1.0.0 + trace: collect_build: add bus/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency bus/1.0.0 of dependent bas/1.0.0 + trace: postponed_configurations::add: create {bas | bus->{bas/2,1}} + trace: collect_build_prerequisites: postpone bas/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent box/1.0.0 + trace: collect_build_prerequisites: resume box/1.0.0 + trace: collect_build_prerequisites: end box/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate end {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}}! + trace: collect_build_postponed (2): begin {bac | libbaz->{bac/2,1}} + trace: collect_build_prerequisites: pre-reeval bus/1.0.0 + trace: collect_build_prerequisites: pre-reevaluated bus/1.0.0: 1,1 + trace: collect_build_postponed (2): skip being built existing dependent bac of dependency libbaz + trace: collect_build_postponed (2): skip existing dependent bus of dependency libbaz since dependent already in cluster {bas | bus->{bas/2,1}} (as a dependency) + trace: collect_build_postponed (2): cfg-negotiate begin {bac | libbaz->{bac/2,1}} + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbaz/1.0.0 + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (2): select cfg-negotiated dependency alternative for dependent bac/1.0.0 + trace: collect_build_prerequisites: resume bac/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent bac/1.0.0 + trace: postponed_configurations::add: add {bac 3,1: libfoo} to {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{box/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bac/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libfoo/1.0.0 of dependent bac/1.0.0 is already (being) recursively collected, skipping + trace: collect_build_prerequisites: end bac/1.0.0 + trace: collect_build_postponed (2): cfg-negotiate end {bac | libbaz->{bac/2,1}}! + trace: collect_build_postponed (3): begin {bas | bus->{bas/2,1}} + trace: collect_build_postponed (3): skip being built existing dependent bas of dependency bus + trace: collect_build_postponed (3): cfg-negotiate begin {bas | bus->{bas/2,1}} + trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin bus/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbaz/1.0.0 of dependent bus/1.0.0 + trace: postponed_configurations::add: add {bus 1,1: libbaz} to {bac | libbaz->{bac/2,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bus/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libbaz/1.0.0 of dependent bus/1.0.0 is already (being) recursively collected, skipping + trace: collect_build: add foo/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency foo/1.0.0 of dependent bus/1.0.0 + trace: postponed_configurations::add: create {bus | foo->{bus/2,1}} + trace: collect_build_prerequisites: postpone bus/1.0.0 + trace: collect_build_postponed (3): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (3): select cfg-negotiated dependency alternative for dependent bas/1.0.0 + trace: collect_build_prerequisites: resume bas/1.0.0 + trace: collect_build_prerequisites: end bas/1.0.0 + trace: collect_build_postponed (3): cfg-negotiate end {bas | bus->{bas/2,1}}! + trace: collect_build_postponed (4): begin {bus | foo->{bus/2,1}} + trace: collect_build_postponed (4): skip being built existing dependent bus of dependency foo + trace: collect_build_postponed (4): cfg-negotiate begin {bus | foo->{bus/2,1}} + %.* + trace: collect_build_postponed (4): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin foo/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0 + trace: postponed_configurations::add: add {foo 1,1: libfoo} to {bac^ bas^ box | libbar->{bac/1,1 bas/1,1 box/1,1} libfoo->{bac/3,1 box/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent foo/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libfoo/1.0.0 of dependent foo/1.0.0 is already (being) recursively collected, skipping + trace: collect_build_prerequisites: end foo/1.0.0 + trace: collect_build_postponed (4): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (4): select cfg-negotiated dependency alternative for dependent bus/1.0.0 + trace: collect_build_prerequisites: resume bus/1.0.0 + trace: collect_build_prerequisites: end bus/1.0.0 + trace: collect_build_postponed (4): cfg-negotiate end {bus | foo->{bus/2,1}}! + trace: collect_build_postponed (4): end {bus | foo->{bus/2,1}} + trace: collect_build_postponed (3): end {bas | bus->{bas/2,1}} + trace: collect_build_postponed (2): end {bac | libbaz->{bac/2,1}} + trace: collect_build_postponed (1): end {box | libbar->{box/1,1} libfoo->{box/1,1}} + trace: collect_build_postponed (0): end + trace: execute_plan: simulate: yes + %.* + build plan: + new box/1.0.0 + trace: execute_plan: simulate: no + %.* + EOE + + $pkg_drop bac bas box + } + : replace-configured-dependency : { @@ -14840,35 +15114,7 @@ test.arguments += --sys-no-query trace: collect_build_prerequisites: pre-reevaluated tex/1.0.0: 1,1 trace: collect_build_prerequisites: pre-reeval tiz/1.0.0 trace: collect_build_prerequisites: pre-reevaluated tiz/1.0.0: 1,1 - trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} - trace: collect_build_prerequisites: reeval tex/1.0.0 - trace: collect_build: pick libbar/1.0.0 over libbar/0.1.0 - trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {tex^ | libbar->{tex/1,1}} - trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {tex^ | libbar->{tex/1,1}} - trace: collect_build_prerequisites: re-evaluated tex/1.0.0 - trace: collect_build_prerequisites: reeval tiz/1.0.0 - trace: collect_build_prerequisites: cannot re-evaluate existing dependent tiz/1.0.0 due to dependency tex/1.0.0 (collected prematurely), throwing postpone_dependency - trace: pkg_build: collection failed due to prematurely collected dependency (tex), retry from scratch - trace: pkg_build: refine package collection/plan execution from scratch - trace: collect_build: add libbar/1.0.0 - trace: collect_build: add tiz/1.0.0 - trace: collect_build_prerequisites: pre-reeval tex/1.0.0 - trace: collect_build_prerequisites: pre-reevaluated tex/1.0.0: 1,1 - trace: collect_build_prerequisites: pre-reeval tiz/1.0.0 - trace: collect_build_prerequisites: pre-reevaluated tiz/1.0.0: 1,1 - trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of existing dependent tex/1.0.0 due to dependency libbar/1.0.0 - trace: collect_build: add tex/1.0.0 - trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} - trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of existing dependent tiz/1.0.0 due to dependency libbar/1.0.0 - trace: postponed_configurations::add: create {tiz^ | tex->{tiz/1,1}} - trace: collect_build_prerequisites: skip configured tiz/1.0.0 - trace: collect_build_postponed (0): begin - trace: collect_build_postponed (1): begin {tex^ | libbar->{tex/1,1}} - trace: collect_build_prerequisites: pre-reeval tex/1.0.0 - trace: collect_build_prerequisites: pre-reevaluated tex/1.0.0: 1,1 - trace: collect_build_prerequisites: pre-reeval tiz/1.0.0 - trace: collect_build_prerequisites: pre-reevaluated tiz/1.0.0: 1,1 - trace: collect_build_postponed (1): skip dep-postponed existing dependent tex of dependency libbar + trace: collect_build_postponed (1): skip existing dependent tex of dependency libbar since dependent already in cluster {tiz^ | tex->{tiz/1,1}} (as a dependency) trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} trace: collect_build_prerequisites: reeval tiz/1.0.0 trace: postponed_configurations::add: add {tiz^ 1,1: tex} to {tiz^ | tex->{tiz/1,1}} @@ -14897,7 +15143,7 @@ test.arguments += --sys-no-query trace: collect_build_prerequisites: pre-reevaluated tex/1.0.0: 1,1 trace: collect_build_prerequisites: pre-reeval tiz/1.0.0 trace: collect_build_prerequisites: pre-reevaluated tiz/1.0.0: 1,1 - trace: collect_build_postponed (1): skip dep-postponed existing dependent tex of dependency libbar + trace: collect_build_postponed (1): skip existing dependent tex of dependency libbar since dependent already in cluster {tiz^ | tex->{tiz/1,1}} (as a dependency) trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} trace: collect_build_prerequisites: reeval tiz/1.0.0 trace: postponed_configurations::add: add {tiz^ 1,1: tex} to {tiz^ | tex->{tiz/1,1}} |