From e826ff4361bced296a8d7af57228755d22a31f15 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Sat, 26 Aug 2023 14:21:54 +0300 Subject: Fix configuration negotiation for cases when existing dependent collection is postponed --- bpkg/pkg-build-collect.cxx | 51 +++++- bpkg/pkg-build.cxx | 62 ++++--- tests/pkg-build.testscript | 404 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 488 insertions(+), 29 deletions(-) diff --git a/bpkg/pkg-build-collect.cxx b/bpkg/pkg-build-collect.cxx index de944a4..30a9e90 100644 --- a/bpkg/pkg-build-collect.cxx +++ b/bpkg/pkg-build-collect.cxx @@ -4736,8 +4736,8 @@ namespace bpkg assert (!pcfg->negotiated); // Re-evaluate existing dependents for dependencies in this - // configuration cluster. Omit dependents which are already being built - // or dropped. + // configuration cluster. Omit dependents which are already being built, + // dropped, or postponed. // // Note that the existing dependent can be re-evaluated to an earlier // position than the position of the dependency which has introduced @@ -4754,6 +4754,15 @@ namespace bpkg // collected in the same way and at the same time as the new dependents // of the clusters they belong to. // + // Note that some of the postponed existing dependents may already be in + // the cluster. Thus, collect the postponed existing dependents to omit + // them from the configuration negotiation and from the subsequent + // recursive collection. Note that we will up-negotiate the + // configuration these dependents apply to their dependencies after + // these dependents will be collected via their own dependents with the + // configuration clauses. + // + set postponed_existing_dependents; { // Map existing dependents to the dependencies they apply a // configuration to. Also, collect the information which is required @@ -4825,6 +4834,7 @@ namespace bpkg // pi->second.wout_config = true; + postponed_existing_dependents.insert (pk); continue; } @@ -4978,6 +4988,16 @@ namespace bpkg i (b), e (pcfg->dependents.end ()); i != e; ) { + if (postponed_existing_dependents.find (i->first) != + postponed_existing_dependents.end ()) + { + l5 ([&]{trace << "skip dep-postponed existing dependent " + << i->first;}); + + ++i; + continue; + } + // Resolve package skeletons for the dependent and its dependencies. // // For the dependent, the skeleton should be already there (since we @@ -5119,7 +5139,20 @@ namespace bpkg // if (!b->recursive_collection) { - assert (b->skeleton); // Should have been init'ed above. + // Note that due to the existing dependents postponement some of the + // dependencies may have no dependent configuration applied to them + // at this time. In this case such dependencies may have no skeleton + // yet and thus we initialize it. Note that we will still apply the + // empty configuration to such dependencies and collect them + // recursively, since the negotiation machinery relies on the fact + // that the dependencies of a negotiated cluster are (being) + // recursively collected. When the time comes and such a dependency + // is collected via its (currently postponed) existing dependent, + // then its configuration will be up-negotiated (likely involving + // throwing the retry_configuration exception). + // + if (!b->skeleton) + b->init_skeleton (o /* options */); package_skeleton& ps (*b->skeleton); @@ -5202,6 +5235,13 @@ namespace bpkg for (const auto& p: dependents) { + if (postponed_existing_dependents.find (p) != + postponed_existing_dependents.end ()) + { + l5 ([&]{trace << "skip dep-postponed existing dependent " << p;}); + continue; + } + // Select the dependency alternative for which configuration has been // negotiated and collect this dependent starting from the next // depends value. @@ -5955,9 +5995,8 @@ namespace bpkg } // While the assumption is that we shouldn't leave any non-negotiated - // clusters, we can potentially miss some corner cases in the above "skip - // configuration" logic. Let's thus trace the non-negotiated clusters - // before the assertion. + // clusters, let's verify that for good measure. Let's thus trace the + // non-negotiated clusters before the assertion. // #ifndef NDEBUG for (const postponed_configuration& cfg: postponed_cfgs) diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx index 79f89bb..02ced21 100644 --- a/bpkg/pkg-build.cxx +++ b/bpkg/pkg-build.cxx @@ -4350,11 +4350,6 @@ namespace bpkg } else { - // Wouldn't be here otherwise. - // - assert (postponed_deps.find (package_key {ddb, d.name}) == - postponed_deps.end ()); - shared_ptr sp ( ddb.find (d.name)); @@ -4366,7 +4361,7 @@ namespace bpkg // Marking upgraded dependencies as "required by command line" // may seem redundant as they should already be pre-entered as // such (see above). But remember dependencies upgraded with - // -i|-r? Note that the required_by data member should never be + // -i|-r? Note that the required_by data member should never be // empty, as it is used in prompts/diagnostics. // build_package p { @@ -4396,25 +4391,46 @@ namespace bpkg ? build_package::build_replace : uint16_t (0))}; - build_package_refs dep_chain; + package_key pk {ddb, d.name}; - // Note: recursive. + // Similar to the user-selected packages, collect non- + // recursively the dependencies for which recursive collection + // is postponed (see above for details). // - pkgs.collect_build (o, - move (p), - replaced_vers, - postponed_cfgs, - &dep_chain, - true /* initial_collection */, - find_prereq_database, - add_priv_cfg, - &rpt_depts, - &postponed_repo, - &postponed_alts, - &postponed_recs, - &postponed_edeps, - &postponed_deps, - &unacceptable_alts); + auto i (postponed_deps.find (pk)); + if (i == postponed_deps.end ()) + { + build_package_refs dep_chain; + + // Note: recursive. + // + pkgs.collect_build (o, + move (p), + replaced_vers, + postponed_cfgs, + &dep_chain, + true /* initial_collection */, + find_prereq_database, + add_priv_cfg, + &rpt_depts, + &postponed_repo, + &postponed_alts, + &postponed_recs, + &postponed_edeps, + &postponed_deps, + &unacceptable_alts); + } + else + { + i->second.wout_config = true; + + l5 ([&]{trace << "dep-postpone user-specified dependency " + << pk;}); + + // Note: not recursive. + // + pkgs.collect_build (o, move (p), replaced_vers, postponed_cfgs); + } } } diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript index 214a50e..9e2b53e 100644 --- a/tests/pkg-build.testscript +++ b/tests/pkg-build.testscript @@ -13034,6 +13034,410 @@ test.arguments += --sys-no-query } } + : skip-existing-dependent + : + { + $clone_cfg; + + # Dependencies: + # + # tix: depends: libbar(c) + # depends: tex(c) + # + # tex: depends: libbar(c) + # depends: libfoo(c) + # + $* tix ?libfoo/0.1.0 2>!; + + $pkg_status -r >>EOO; + !tix configured 1.0.0 + libbar configured 1.0.0 + tex configured 1.0.0 + libbar configured 1.0.0 + libfoo configured !0.1.0 available 1.0.0 + EOO + + $* --upgrade --recursive 2>>~%EOE%; + %.* + trace: pkg_build: refine package collection/plan execution from scratch + %.* + trace: collect_build: add tix/1.0.0 + trace: collect_build_prerequisites: skip configured tix/1.0.0 + trace: execute_plan: simulate: yes + %.* + trace: evaluate_dependency: libfoo/0.1.0: update to libfoo/1.0.0 + %.* + trace: pkg_build: refine package collection/plan execution + %.* + trace: collect_build: add libfoo/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: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of existing dependent tex/1.0.0 due to dependency libfoo/1.0.0 + trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} + 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 tix/1.0.0 + %.* + trace: collect_build_prerequisites: pre-reevaluated tix/1.0.0: 1,1 + trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} + trace: collect_build: add tex/1.0.0 + trace: collect_build_prerequisites: reeval tex/1.0.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 tix/1.0.0 + %.* + trace: postponed_configurations::add: add {tix^ 1,1: libbar} to {tex^ | libbar->{tex/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent tix/1.0.0 results in {tex^ tix^ | libbar->{tex/1,1 tix/1,1}} + trace: collect_build_prerequisites: re-evaluated tix/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {tex^ tix^ | libbar->{tex/1,1 tix/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_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tex/1.0.0 + trace: collect_build_prerequisites: resume tex/1.0.0 + %.* + trace: collect_build: pick libfoo/1.0.0 over libfoo/0.1.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: create {tex | libfoo->{tex/2,1}} + trace: collect_build_prerequisites: postpone tex/1.0.0 + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 + trace: collect_build_prerequisites: resume tix/1.0.0 + %.* + trace: collect_build_prerequisites: cannot cfg-postpone dependency tex/1.0.0 of dependent tix/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 tix/1.0.0 + trace: collect_build_prerequisites: skip configured tix/1.0.0 + trace: pkg_build: dep-postpone user-specified dependency libfoo + trace: collect_build: add libfoo/1.0.0 + trace: collect_build_postponed (0): begin + trace: collect_build_postponed (0): erase bogus postponement libfoo + trace: collect_build_postponed (0): bogus postponements erased, throwing + trace: pkg_build: collection failed due to bogus dependency collection postponement cancellation, retry from scratch + %.* + trace: pkg_build: refine package collection/plan execution from scratch + %.* + trace: collect_build: add tix/1.0.0 + trace: collect_build_prerequisites: skip configured tix/1.0.0 + trace: collect_build: add libfoo/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: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of existing dependent tex/1.0.0 due to dependency libfoo/1.0.0 + trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} + 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 tix/1.0.0 + %.* + trace: collect_build_prerequisites: pre-reevaluated tix/1.0.0: 1,1 + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex of dependency libbar + trace: collect_build_postponed (1): re-evaluate existing dependents for {tex^ | libbar->{tex/1,1}} + trace: collect_build_prerequisites: reeval tix/1.0.0 + %.* + trace: postponed_configurations::add: add {tix^ 1,1: libbar} to {tex^ | libbar->{tex/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent tix/1.0.0 results in {tex^ tix^ | libbar->{tex/1,1 tix/1,1}} + trace: collect_build_prerequisites: re-evaluated tix/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {tex^ tix^ | libbar->{tex/1,1 tix/1,1}} + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbar/1.0.0 + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent tix/1.0.0 + trace: collect_build_prerequisites: resume tix/1.0.0 + %.* + trace: collect_build: add tex/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency tex/1.0.0 of dependent tix/1.0.0 + trace: postponed_configurations::add: create {tix | tex->{tix/2,1}} + trace: collect_build_prerequisites: postpone tix/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate end {tex^ tix^ | libbar->{tex/1,1 tix/1,1}}! + trace: collect_build_postponed (2): begin {tix | tex->{tix/2,1}} + %.* + trace: collect_build_postponed (2): skip being built existing dependent tix of dependency tex + trace: collect_build_postponed (2): cfg-negotiate begin {tix | tex->{tix/2,1}} + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin tex/1.0.0 + %.* + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: add {tex 1,1: libbar} to {tex^ tix^ | libbar->{tex/1,1 tix/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping + %.* + trace: collect_build: pick libfoo/1.0.0 over libfoo/0.1.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: create {tex | libfoo->{tex/2,1}} + trace: collect_build_prerequisites: postpone tex/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 tix/1.0.0 + trace: collect_build_prerequisites: resume tix/1.0.0 + trace: collect_build_prerequisites: end tix/1.0.0 + trace: collect_build_postponed (2): cfg-negotiate end {tix | tex->{tix/2,1}}! + trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} + %.* + trace: collect_build_postponed (3): skip being built existing dependent tex of dependency libfoo + trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} + %.* + trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin libfoo/1.0.0 + trace: collect_build_prerequisites: end libfoo/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 tex/1.0.0 + trace: collect_build_prerequisites: resume tex/1.0.0 + trace: collect_build_prerequisites: end tex/1.0.0 + trace: collect_build_postponed (3): cfg-negotiate end {tex | libfoo->{tex/2,1}}! + trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} + trace: collect_build_postponed (2): end {tix | tex->{tix/2,1}} + trace: collect_build_postponed (1): end {tex^ | libbar->{tex/1,1}} + trace: collect_build_postponed (0): end + %.* + trace: execute_plan: simulate: yes + %.* + build plan: + upgrade libfoo/1.0.0 + config.libfoo.extras=true (set by tex) + reconfigure/update tex/1.0.0 (required by tix) + config.tex.extras=true (set by tix) + reconfigure/update tix/1.0.0 + trace: execute_plan: simulate: no + %.* + EOE + + $pkg_status -r >>EOO; + !tix configured 1.0.0 + libbar configured 1.0.0 + tex configured 1.0.0 + libbar configured 1.0.0 + libfoo configured !1.0.0 + EOO + + $pkg_drop tix + } + + : skip-existing-dependent-last + : + : Similar to the above but the skipped existing dependent is the last/only + : dependent in the cluster. + : + { + $clone_cfg; + + # Dependencies: + # + # tiz: depends: tex(c) + # depends: libbar(c) + # + # tex: depends: libbar(c) + # depends: libfoo(c) + # + $* tiz ?libfoo/0.1.0 2>!; + + $pkg_status -r >>EOO; + !tiz configured 1.0.0 + libbar configured 1.0.0 + tex configured 1.0.0 + libbar configured 1.0.0 + libfoo configured !0.1.0 available 1.0.0 + EOO + + $* --upgrade --recursive 2>>~%EOE%; + %.* + trace: pkg_build: refine package collection/plan execution from scratch + %.* + trace: collect_build: add tiz/1.0.0 + trace: collect_build_prerequisites: skip configured tiz/1.0.0 + trace: execute_plan: simulate: yes + %.* + trace: evaluate_dependency: libfoo/0.1.0: update to libfoo/1.0.0 + %.* + trace: pkg_build: refine package collection/plan execution + %.* + trace: collect_build: add libfoo/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: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of existing dependent tex/1.0.0 due to dependency libfoo/1.0.0 + trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} + 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: add tex/1.0.0 + 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: 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 tiz/1.0.0 + trace: collect_build_prerequisites: skip configured tiz/1.0.0 + trace: collect_build: add libfoo/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: add libbar/1.0.0 + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of existing dependent tex/1.0.0 due to dependency libfoo/1.0.0 + trace: postponed_configurations::add: create {tex^ | libbar->{tex/1,1}} + 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: add tex/1.0.0 + 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: create {tiz^ | tex->{tiz/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent tiz/1.0.0 results in {tiz^ | tex->{tiz/1,1}} + trace: collect_build_prerequisites: re-evaluated tiz/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {tex^ | libbar->{tex/1,1}} + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies + %.* + trace: collect_build_prerequisites: skip configured libbar/1.0.0 + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): cfg-negotiate end {tex^ | libbar->{tex/1,1}}! + trace: collect_build_postponed (2): begin {tiz^ | tex->{tiz/1,1}} + %.* + trace: collect_build_postponed (2): skip being built existing dependent tiz of dependency tex + trace: collect_build_postponed (2): cfg-negotiate begin {tiz^ | tex->{tiz/1,1}} + %.* + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin tex/1.0.0 + %.* + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: add {tex 1,1: libbar} to {tex^ | libbar->{tex/1,1}}! + trace: collect_build_prerequisites: cfg-postponing dependent tex/1.0.0 involves (being) negotiated configurations and results in {tex^ | libbar->{tex/1,1}}!, throwing retry_configuration + trace: collect_build_postponed (0): cfg-negotiation of {tex^ | libbar->{tex/1,1}} failed due to dependent tex, refining configuration + 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: add tex/1.0.0 + 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: create {tiz^ | tex->{tiz/1,1}} + trace: collect_build_prerequisites: re-evaluating dependent tiz/1.0.0 results in {tiz^ | tex->{tiz/1,1}} + trace: collect_build_prerequisites: re-evaluated tiz/1.0.0 + trace: collect_build_postponed (1): cfg-negotiate begin {tex^ | libbar->{tex/1,1}} + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: skip configured libbar/1.0.0 + trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents + trace: collect_build_postponed (1): skip dep-postponed existing dependent tex + trace: collect_build_postponed (1): cfg-negotiate end {tex^ | libbar->{tex/1,1}}! + trace: collect_build_postponed (2): begin {tiz^ | tex->{tiz/1,1}} + %.* + trace: collect_build_postponed (2): skip being built existing dependent tiz of dependency tex + trace: collect_build_postponed (2): cfg-negotiate begin {tiz^ | tex->{tiz/1,1}} + trace: collect_build_postponed (2): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin tex/1.0.0 + %.* + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: add {tex 1,1: libbar} to {tex^ | libbar->{tex/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tex/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tex/1.0.0 is already (being) recursively collected, skipping + %.* + trace: collect_build: pick libfoo/1.0.0 over libfoo/0.1.0 + trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent tex/1.0.0 + trace: postponed_configurations::add: create {tex | libfoo->{tex/2,1}} + trace: collect_build_prerequisites: postpone tex/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 tiz/1.0.0 + trace: collect_build_prerequisites: resume tiz/1.0.0 + %.* + trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent tiz/1.0.0 + trace: postponed_configurations::add: add {tiz 2,1: libbar} to {tex^ | libbar->{tex/1,1}}! + trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent tiz/1.0.0 is negotiated + trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent tiz/1.0.0 is already (being) recursively collected, skipping + trace: collect_build_prerequisites: end tiz/1.0.0 + trace: collect_build_postponed (2): cfg-negotiate end {tiz^ | tex->{tiz/1,1}}! + trace: collect_build_postponed (3): begin {tex | libfoo->{tex/2,1}} + %.* + trace: collect_build_postponed (3): skip being built existing dependent tex of dependency libfoo + trace: collect_build_postponed (3): cfg-negotiate begin {tex | libfoo->{tex/2,1}} + %.* + trace: collect_build_postponed (3): recursively collect cfg-negotiated dependencies + trace: collect_build_prerequisites: begin libfoo/1.0.0 + trace: collect_build_prerequisites: end libfoo/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 tex/1.0.0 + trace: collect_build_prerequisites: resume tex/1.0.0 + trace: collect_build_prerequisites: end tex/1.0.0 + trace: collect_build_postponed (3): cfg-negotiate end {tex | libfoo->{tex/2,1}}! + trace: collect_build_postponed (3): end {tex | libfoo->{tex/2,1}} + trace: collect_build_postponed (2): end {tiz^ | tex->{tiz/1,1}} + trace: collect_build_postponed (1): end {tex^ | libbar->{tex/1,1}} + trace: collect_build_postponed (0): end + %.* + trace: execute_plan: simulate: yes + %.* + build plan: + upgrade libfoo/1.0.0 + config.libfoo.extras=true (set by tex) + reconfigure/update tex/1.0.0 (required by tiz) + config.tex.extras=true (set by tiz) + reconfigure/update tiz/1.0.0 + trace: execute_plan: simulate: no + %.* + EOE + + $pkg_status -r >>EOO; + !tiz configured 1.0.0 + libbar configured 1.0.0 + tex configured 1.0.0 + libbar configured 1.0.0 + libfoo configured !1.0.0 + EOO + + $pkg_drop tiz + } + : all-repo-packages : : Don't match the tracing but just make sure that pkg-build doesn't crash -- cgit v1.1