aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2022-05-20 17:52:31 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2022-05-23 13:31:01 +0300
commit0ee3b3da45524b6e2282fc611999a5fa482493b2 (patch)
tree902079d04920e153faf8cc95ff2c0976a449b86a
parent4abeb232b79f43d5eefc6aeb6b6340b35c2217bc (diff)
Review-inspired changes
-rw-r--r--bpkg/pkg-build.cxx391
-rw-r--r--tests/pkg-build.testscript539
2 files changed, 560 insertions, 370 deletions
diff --git a/bpkg/pkg-build.cxx b/bpkg/pkg-build.cxx
index 0196dcc..91f32c3 100644
--- a/bpkg/pkg-build.cxx
+++ b/bpkg/pkg-build.cxx
@@ -1284,11 +1284,10 @@ namespace bpkg
}
};
- using dependents_map = map<config_package, dependent_info>;
- using dependencies_set = set<config_package>;
+ using dependents_map = map<config_package, dependent_info>;
- dependents_map dependents;
- dependencies_set dependencies;
+ dependents_map dependents;
+ packages dependencies;
using positions = small_vector<pair<size_t, size_t>, 1>;
using shadow_dependents_map = map<config_package, positions>;
@@ -1334,6 +1333,9 @@ namespace bpkg
packages ({move (dep)}));
}
+ // Note: adds the specified dependencies to the end of the configuration
+ // dependencies list suppressing duplicates.
+ //
void
add (config_package&& dependent,
bool existing,
@@ -1342,7 +1344,7 @@ namespace bpkg
{
assert (position.first != 0 && position.second != 0);
- dependencies.insert (deps.begin (), deps.end ());
+ add_dependencies (deps); // Don't move from since will be used later.
auto i (dependents.find (dependent));
@@ -1373,7 +1375,8 @@ namespace bpkg
bool
contains_dependency (const config_package& d) const
{
- return dependencies.find (d) != dependencies.end ();
+ return find (dependencies.begin (), dependencies.end (), d) !=
+ dependencies.end ();
}
// Return true if this configuration contains any of the specified
@@ -1406,7 +1409,13 @@ namespace bpkg
return false;
}
- // Note: doesn't change the negotiate member of this configuration.
+ // Notes:
+ //
+ // - Adds dependencies of the being merged from configuration to the end
+ // of the current configuration dependencies list suppressing
+ // duplicates.
+ //
+ // - Doesn't change the negotiate member of this configuration.
//
void
merge (postponed_configuration&& c)
@@ -1439,16 +1448,7 @@ namespace bpkg
// Merge dependencies.
//
- // Looks like C++17 set::merge() is what we need. Note, however, that
- // some older standard libraries (for example libc++ 7.0.0) don't
- // support this function. Thus, let's enable its use based on the
- // feature test invented by C++20.
- //
-#ifdef __cpp_lib_node_extract
- dependencies.merge (move (c.dependencies));
-#else
- dependencies.insert (c.dependencies.begin (), c.dependencies.end ());
-#endif
+ add_dependencies (move (c.dependencies));
// Pick the depth of the outermost negotiated configuration (minimum
// non-zero depth) between the two.
@@ -1629,6 +1629,32 @@ namespace bpkg
return r;
}
+
+ private:
+ // Add the specified packages to the end of the dependencies list
+ // suppressing duplicates.
+ //
+ void
+ add_dependencies (packages&& deps)
+ {
+ for (auto& d: deps)
+ {
+ if (find (dependencies.begin (), dependencies.end (), d) ==
+ dependencies.end ())
+ dependencies.push_back (move (d));
+ }
+ }
+
+ void
+ add_dependencies (const packages& deps)
+ {
+ for (const auto& d: deps)
+ {
+ if (find (dependencies.begin (), dependencies.end (), d) ==
+ dependencies.end ())
+ dependencies.push_back (d);
+ }
+ }
};
// @@ TODO: describe.
@@ -4012,8 +4038,11 @@ namespace bpkg
// Note: the dependent may already exist in the cluster with a
// subset of dependencies.
//
- pair<postponed_configuration&, optional<bool>> r (
- postponed_cfgs.add (cp, true /* existing */, dp, cfg_deps));
+ postponed_configuration& cfg (
+ postponed_cfgs.add (cp,
+ true /* existing */,
+ dp,
+ cfg_deps).first);
// Can we merge clusters as a result? Seems so.
//
@@ -4027,24 +4056,34 @@ namespace bpkg
//
// Note: this is a special case of the below more general logic.
//
-#if 0
- postponed_configuration& cfg (r.first);
+ // Also note that we can distinguish the simple case by the fact
+ // that the resulting cluster is not negotiated. Note however,
+ // that in this case it is guaranteed that all the involved
+ // clusters will be merged into the cluster which the being
+ // re-evaluated dependent belongs to since this cluster (while
+ // not being negotiated) already has non-zero depth (see
+ // collect_build_postponed() for details).
+ //
+ assert (cfg.depth != 0);
- if (!simple) // @@ TODO
+ if (cfg.negotiated)
{
+ l5 ([&]{trace << "re-evaluating dependent "
+ << pkg.available_name_version_db ()
+ << " involves non-negotiated configurations "
+ << "and results in " << cfg << ", throwing "
+ << "merge_configuration";});
+
// Don't print the "while satisfying..." chain.
//
dep_chain.clear ();
throw merge_configuration {cfg.depth};
}
-#endif
l5 ([&]{trace << "re-evaluating dependent "
<< pkg.available_name_version_db ()
- << " results in " << r.first;});
-
- assert (r.second && !*r.second);
+ << " results in " << cfg;});
return false;
}
@@ -5037,165 +5076,192 @@ namespace bpkg
struct existing_dependent_ex: existing_dependent
{
packages dependencies;
+ bool reevaluated = false;
existing_dependent_ex (existing_dependent&& ed)
: existing_dependent (move (ed)) {}
};
map<config_package, existing_dependent_ex> dependents;
- // @@ TODO: looks like we may end up adding additional
- // dependencies to pcfg->dependencies which in turn may
- // have additional existing dependents which we need to
- // process? Feels like doing this iteratively is the
- // best option?
+ // Looks like we may end up adding additional dependencies to
+ // pcfg->dependencies which in turn may have additional existing
+ // dependents which we need to process. Feels like doing this
+ // iteratively is the best option.
//
- // Need to make sure we don't re-process the same existing
- // dependents (maybe keep a "global" dependents set outside
- // the loop that gets merged into from inner loop). Or, better,
- // just a flag in existing_dependent_ex!
+ // Note that we need to make sure we don't re-process the same
+ // existing dependents.
//
- for (const config_package& p: pcfg->dependencies)
+ const packages& deps (pcfg->dependencies);
+
+ // Note that the below collect_build_prerequisites() call can add
+ // new dependencies to the end of the cluster's dependencies list.
+ // Thus on each iteration we will only add existing dependents of
+ // unprocessed/new dependencies. We will also skip the already
+ // re-evaluated existing dependents.
+ //
+ for (size_t i (0); i != deps.size (); )
{
- for (existing_dependent& ed:
- query_existing_dependents (trace,
- p.db,
- p.name,
- replaced_vers,
- rpt_depts))
- {
- config_package cp (ed.db, ed.selected->name);
+ size_t n (dependents.size ());
- // 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.
- //
- auto pi (postponed_deps.find (cp));
- if (pi != postponed_deps.end ())
+ for (; i != deps.size (); ++i)
+ {
+ const config_package& p (deps[i]);
+
+ for (existing_dependent& ed:
+ query_existing_dependents (trace,
+ p.db,
+ p.name,
+ replaced_vers,
+ rpt_depts))
{
- l5 ([&]{trace << "skip dep-postponed existing dependent " << cp
- << " of dependency " << p;});
+ config_package cp (ed.db, ed.selected->name);
- // Note that here we would re-evaluate the existing dependent
- // without specifying any configuration for it.
+ auto di (dependents.find (cp));
+
+ // Skip re-evaluated.
//
- pi->second.wout_config = true;
+ if (di != dependents.end () && di->second.reevaluated)
+ continue;
- continue;
- }
+ // 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.
+ //
+ auto pi (postponed_deps.find (cp));
+ if (pi != postponed_deps.end ())
+ {
+ l5 ([&]{trace << "skip dep-postponed existing dependent "
+ << cp << " of dependency " << p;});
- // If the existing dependent is not in the map yet, then add it.
- // Otherwise, if the dependency position is greater than that
- // one in the existing map entry then skip it (this position
- // will be up-negotiated, if it's still present). Otherwise, if
- // the position is less then overwrite the existing entry.
- // Otherwise (the position is equal), just add the dependency to
- // the existing entry.
- //
- // Note that we want to re-evaluate the dependent up to the
- // earliest dependency position and continue with the regular
- // prerequisites collection (as we do for new dependents)
- // afterwards.
- //
- auto i (dependents.find (cp));
- if (i == dependents.end ())
- {
- i = dependents.emplace (
- move (cp), existing_dependent_ex (move (ed))).first;
- }
- else
- {
- size_t di1 (i->second.dependency_position.first);
- size_t di2 (ed.dependency_position.first);
+ // Note that here we would re-evaluate the existing dependent
+ // without specifying any configuration for it.
+ //
+ pi->second.wout_config = true;
- if (di1 < di2)
continue;
- else if (di1 > di2)
- i->second = existing_dependent_ex (move (ed));
- //else if (di1 == di2)
- // ;
- }
-
- i->second.dependencies.push_back (p);
- }
- }
-
- // Re-evaluate existing dependents.
- //
- if (!dependents.empty ())
- {
- l5 ([&]{trace << "re-evaluate existing dependents for " << *pcfg;});
+ }
- for (auto& d: dependents)
- {
- config_package cp (d.first);
- existing_dependent_ex& ed (d.second);
- packages& ds (ed.dependencies);
+ // If the existing dependent is not in the map yet, then add
+ // it. Otherwise, if the dependency position is greater than
+ // that one in the existing map entry then skip it (this
+ // position will be up-negotiated, if it's still present).
+ // Otherwise, if the position is less then overwrite the
+ // existing entry. Otherwise (the position is equal), just
+ // add the dependency to the existing entry.
+ //
+ // Note that we want to re-evaluate the dependent up to the
+ // earliest dependency position and continue with the regular
+ // prerequisites collection (as we do for new dependents)
+ // afterwards.
+ //
+ if (di == dependents.end ())
+ {
+ di = dependents.emplace (
+ move (cp), existing_dependent_ex (move (ed))).first;
+ }
+ else
+ {
+ size_t di1 (di->second.dependency_position.first);
+ size_t di2 (ed.dependency_position.first);
- pair<shared_ptr<available_package>,
- lazy_shared_ptr<repository_fragment>> rp (
- find_available_fragment (o, cp.db, ed.selected));
+ if (di1 < di2)
+ continue;
+ else if (di1 > di2)
+ di->second = existing_dependent_ex (move (ed));
+ //else if (di1 == di2)
+ // ;
+ }
- build_package p {
- build_package::build,
- cp.db,
- move (ed.selected),
- 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.
- false, // System.
- false, // Keep output directory.
- false, // Disfigure (from-scratch reconf).
- false, // Configure-only.
- nullopt, // Checkout root.
- false, // Checkout purge.
- strings (), // Configuration variables.
- set<config_package> (
- ds.begin (), ds.end ()), // Required by (dependency).
- false, // Required by dependents.
- build_package::adjust_reconfigure};
+ di->second.dependencies.push_back (p);
+ }
+ }
- // Note: not recursive.
- //
- collect_build (o,
- move (p),
- fdb,
- rpt_depts,
- apc,
- true /* initial_collection */,
- replaced_vers);
+ // Re-evaluate the newly added existing dependents, if any.
+ //
+ if (dependents.size () != n)
+ {
+ l5 ([&]{trace << "re-evaluate existing dependents for " << *pcfg;});
- build_package* b (entered_build (cp));
- assert (b != nullptr);
+ for (auto& d: dependents)
+ {
+ existing_dependent_ex& ed (d.second);
- // Re-evaluate up to the earliest position.
- //
- assert (ed.dependency_position.first != 0);
+ // Skip re-evaluated.
+ //
+ if (ed.reevaluated)
+ continue;
- build_package_refs dep_chain;
- collect_build_prerequisites (o,
- *b,
- fdb,
- rpt_depts,
- apc,
- false /* initial_collection */,
- replaced_vers,
- dep_chain,
- &postponed_repo,
- &postponed_alts,
- numeric_limits<size_t>::max (),
- postponed_deps,
- postponed_cfgs,
- false /* force_configured */,
- ed.dependency_position);
+ config_package cp (d.first);
+ packages& ds (ed.dependencies);
+
+ pair<shared_ptr<available_package>,
+ lazy_shared_ptr<repository_fragment>> rp (
+ find_available_fragment (o, cp.db, ed.selected));
+
+ build_package p {
+ build_package::build,
+ cp.db,
+ move (ed.selected),
+ 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.
+ false, // System.
+ false, // Keep output directory.
+ false, // Disfigure (from-scratch reconf).
+ false, // Configure-only.
+ nullopt, // Checkout root.
+ false, // Checkout purge.
+ strings (), // Configuration variables.
+ set<config_package> ( // Required by (dependency).
+ ds.begin (), ds.end ()),
+ false, // Required by dependents.
+ build_package::adjust_reconfigure};
+
+ // Note: not recursive.
+ //
+ collect_build (o,
+ move (p),
+ fdb,
+ rpt_depts,
+ apc,
+ true /* initial_collection */,
+ replaced_vers);
+
+ build_package* b (entered_build (cp));
+ assert (b != nullptr);
+
+ // Re-evaluate up to the earliest position.
+ //
+ assert (ed.dependency_position.first != 0);
+
+ build_package_refs dep_chain;
+ collect_build_prerequisites (o,
+ *b,
+ fdb,
+ rpt_depts,
+ apc,
+ false /* initial_collection */,
+ replaced_vers,
+ dep_chain,
+ &postponed_repo,
+ &postponed_alts,
+ numeric_limits<size_t>::max (),
+ postponed_deps,
+ postponed_cfgs,
+ false /* force_configured */,
+ ed.dependency_position);
+
+ ed.reevaluated = true;
+ }
}
}
}
@@ -5224,8 +5290,7 @@ namespace bpkg
// them (they may also process existing packages, which we are
// prepared to ignore).
//
- packages dependencies (pcfg->dependencies.begin (),
- pcfg->dependencies.end ());
+ packages dependencies (pcfg->dependencies);
packages dependents;
dependents.reserve (pcfg->dependents.size ());
diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript
index 1977d56..2458937 100644
--- a/tests/pkg-build.testscript
+++ b/tests/pkg-build.testscript
@@ -5290,174 +5290,242 @@ test.options += --no-progress
: dependent-single-position
:
{
- $clone_cfg;
+ +$clone_cfg
- $* foo 2>>~%EOE%;
- %.*
- trace: pkg_build: refine package collection/plan execution from scratch
- %.*
- trace: collect_build: add foo/1.0.0
- trace: collect_build_prerequisites: begin foo/1.0.0
- %.*
- trace: collect_build: add libfoo/1.0.0
- trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0
- trace: postponed_configurations::add: create {foo | libfoo->{foo/1,1}}
- trace: collect_build_prerequisites: postpone foo/1.0.0
- trace: collect_build_postponed (0): begin
- trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}}
- %.*
- trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): 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 (1): recursively collect cfg-negotiated dependents
- 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 {foo | libfoo->{foo/1,1}}!
- trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): end
- trace: execute_plan: simulate: yes
- %.*
- EOE
+ : basic
+ :
+ {
+ $clone_cfg;
- # Downgrade the dependency.
- #
- $* ?libfoo/0.1.0 2>>~%EOE%;
- %.*
- trace: pkg_build: refine package collection/plan execution from scratch
- %.*
- trace: execute_plan: simulate: yes
- %.*
- trace: evaluate_dependency: libfoo/1.0.0: update to libfoo/0.1.0
- %.*
- trace: pkg_build: refine package collection/plan execution
- %.*
- trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0
- trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): begin
- trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
- %.*
- trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
- trace: collect_build: add foo/1.0.0
- %.*
- trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
- trace: collect_build_prerequisites: begin libfoo/0.1.0
- trace: collect_build_prerequisites: end libfoo/0.1.0
- trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
- 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 {foo^ | libfoo->{foo/1,1}}!
- trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): end
- %.*
- trace: execute_plan: simulate: yes
- %.*
- EOE
+ $* foo 2>>~%EOE%;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add foo/1.0.0
+ trace: collect_build_prerequisites: begin foo/1.0.0
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent foo/1.0.0
+ trace: postponed_configurations::add: create {foo | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: postpone foo/1.0.0
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}}
+ %.*
+ trace: collect_build_postponed (1): cfg-negotiate begin {foo | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (1): 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 (1): recursively collect cfg-negotiated dependents
+ 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 {foo | libfoo->{foo/1,1}}!
+ trace: collect_build_postponed (1): end {foo | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): end
+ trace: execute_plan: simulate: yes
+ %.*
+ EOE
- # Reconfigure the dependency and hold.
- #
- $* libfoo/0.1.0 +{ config.libfoo.extras=true } 2>>~%EOE%;
- %.*
- trace: pkg_build: refine package collection/plan execution from scratch
- %.*
- trace: collect_build: add libfoo/0.1.0
- %.*
- trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0
- trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): begin
- trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
- %.*
- trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
- %.*
- trace: collect_build: add foo/1.0.0
- %.*
- trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
- trace: collect_build_prerequisites: begin libfoo/0.1.0
- trace: collect_build_prerequisites: end libfoo/0.1.0
- trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
- 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 {foo^ | libfoo->{foo/1,1}}!
- trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): end
- %.*
- trace: execute_plan: simulate: yes
- %.*
- EOE
+ # Downgrade the dependency.
+ #
+ $* ?libfoo/0.1.0 2>>~%EOE%;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: execute_plan: simulate: yes
+ %.*
+ trace: evaluate_dependency: libfoo/1.0.0: update to libfoo/0.1.0
+ %.*
+ trace: pkg_build: refine package collection/plan execution
+ %.*
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0
+ trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
+ %.*
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build: add foo/1.0.0
+ trace: collect_build_prerequisites: reeval foo/1.0.0
+ %.*
+ trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0
+ trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluated foo/1.0.0
+ trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libfoo/0.1.0
+ trace: collect_build_prerequisites: end libfoo/0.1.0
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ 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 {foo^ | libfoo->{foo/1,1}}!
+ trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): end
+ %.*
+ trace: execute_plan: simulate: yes
+ %.*
+ EOE
- $pkg_status -r >>EOO;
- !libfoo configured !0.1.0 available 1.0.0
- !foo configured 1.0.0
+ # Reconfigure the dependency and hold.
+ #
+ $* libfoo/0.1.0 +{ config.libfoo.extras=true } 2>>~%EOE%;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add libfoo/0.1.0
+ %.*
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0
+ trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
+ %.*
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
+ %.*
+ 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 {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluated foo/1.0.0
+ trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libfoo/0.1.0
+ trace: collect_build_prerequisites: end libfoo/0.1.0
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ 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 {foo^ | libfoo->{foo/1,1}}!
+ trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): end
+ %.*
+ trace: execute_plan: simulate: yes
+ %.*
+ EOE
+
+ $pkg_status -r >>EOO;
!libfoo configured !0.1.0 available 1.0.0
- EOO
+ !foo configured 1.0.0
+ !libfoo configured !0.1.0 available 1.0.0
+ EOO
- # Upgrade the dependency and unhold existing dependent.
- #
- $* libfoo ?foo 2>>~%EOE%;
- %.*
- trace: pkg_build: refine package collection/plan execution from scratch
- %.*
- trace: collect_build: add libfoo/1.0.0
- %.*
- trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of existing dependent foo/1.0.0
- trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): begin
- trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
- %.*
- trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
- %.*
- trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (1): 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 (1): recursively collect cfg-negotiated dependents
- 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 {foo^ | libfoo->{foo/1,1}}!
- trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
- trace: collect_build_postponed (0): end
- %.*
- trace: execute_plan: simulate: yes
- %.*
- trace: evaluate_dependency: foo/1.0.0: unused
- %.*
- trace: pkg_build: refine package collection/plan execution
- %.*
- trace: collect_drop: foo/1.0.0 package version needs to be replaced with drop
- trace: pkg_build: collection failed due to package version replacement, retry from scratch
- %.*
- trace: pkg_build: refine package collection/plan execution from scratch
- %.*
- trace: collect_build: add libfoo/1.0.0
- %.*
- trace: collect_build_prerequisites: skip expected to be dropped existing dependent foo of dependency libfoo
- trace: collect_build_prerequisites: begin libfoo/1.0.0
- trace: collect_build_prerequisites: end libfoo/1.0.0
- trace: collect_drop: overwrite foo
- %.*
- trace: execute_plan: simulate: yes
- %.*
- EOE
+ # Upgrade the dependency and unhold existing dependent.
+ #
+ $* libfoo ?foo 2>>~%EOE%;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ %.*
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of existing dependent foo/1.0.0
+ trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin {foo^ | libfoo->{foo/1,1}}
+ %.*
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: reeval foo/1.0.0
+ %.*
+ trace: collect_build: pick libfoo/1.0.0 over libfoo/0.1.0
+ trace: postponed_configurations::add: add {foo^ 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluating dependent foo/1.0.0 results in {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_prerequisites: re-evaluated foo/1.0.0
+ trace: collect_build_postponed (1): cfg-negotiate begin {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (1): 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 (1): recursively collect cfg-negotiated dependents
+ 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 {foo^ | libfoo->{foo/1,1}}!
+ trace: collect_build_postponed (1): end {foo^ | libfoo->{foo/1,1}}
+ trace: collect_build_postponed (0): end
+ %.*
+ trace: execute_plan: simulate: yes
+ %.*
+ trace: evaluate_dependency: foo/1.0.0: unused
+ %.*
+ trace: pkg_build: refine package collection/plan execution
+ %.*
+ trace: collect_drop: foo/1.0.0 package version needs to be replaced with drop
+ trace: pkg_build: collection failed due to package version replacement, retry from scratch
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add libfoo/1.0.0
+ %.*
+ trace: collect_build_prerequisites: skip expected to be dropped existing dependent foo of dependency libfoo
+ trace: collect_build_prerequisites: begin libfoo/1.0.0
+ trace: collect_build_prerequisites: end libfoo/1.0.0
+ trace: collect_drop: overwrite foo
+ %.*
+ trace: execute_plan: simulate: yes
+ %.*
+ EOE
- $pkg_status -r >>EOO;
- !libfoo configured 1.0.0
- EOO
+ $pkg_status -r >>EOO;
+ !libfoo configured 1.0.0
+ EOO
+
+ $pkg_drop libfoo
+ }
+
+ : postpone-existing
+ :
+ if false
+ {
+ $clone_cfg;
- $pkg_drop libfoo
+ # Dependencies:
+ #
+ # fix/1.0.0: depends: foo(c)
+ # foo/1.0.0: depends: libfoo(c)
+ #
+ # fix/0.1.0: depends: foo == 0.1.0
+ # foo/0.1.0: depends: libfoo(c)
+ #
+ $* fix 2>!;
+
+ # @@ So here we should have been in a situation that after libfoo is
+ # postponed with {foo^ | libfoo->{foo/1,1}} creation and we got
+ # to negotiating it, by that time foo has stopped to be an
+ # "existing" dependent since it was downgraded via fix/0.1.0. The
+ # natural fix would be adding a record somewhere and start from
+ # scratch (maybe add into postponed_poss with position {0,0}). We
+ # however crash on assertion failure earlier (see below). Sounds
+ # like we need to scratch earlier or maybe get rid of assertion
+ # and deal with the existing flag there.
+ #
+ $* libfoo/0.1.0 fix/0.1.0 2>>~%EOE%
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add libfoo/0.1.0
+ trace: collect_build: add fix/0.1.0
+ %.*
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of existing dependent foo/1.0.0
+ trace: postponed_configurations::add: create {foo^ | libfoo->{foo/1,1}}
+ %.*
+ trace: collect_build_prerequisites: begin fix/0.1.0
+ %.*
+ trace: collect_build: add foo/0.1.0
+ info: package fix dependency on (foo == 0.1.0) is forcing downgrade of foo/1.0.0 to 0.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency foo/0.1.0 of dependent fix/0.1.0
+ %.*
+ trace: collect_build_prerequisites: skip being built existing dependent fix of dependency foo
+ trace: collect_build_prerequisites: begin foo/0.1.0
+ %.*
+ trace: collect_build: pick libfoo/0.1.0 over libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent foo/0.1.0
+ trace: postponed_configurations::add: add {foo 1,1: libfoo} to {foo^ | libfoo->{foo/1,1}}
+ bpkg: /home/karen/work/build2/bpkg/bpkg/pkg-build.cxx:1361: void bpkg::postponed_configuration::add(bpkg::config_package&&, bool, std::pair<long unsigned int, long unsigned int>, bpkg::postponed_configuration::packages&&): Assertion 'ddi.existing == existing' failed.
+ EOE
+ }
}
: dependent-multiple-positions
:
- if false
{
+$clone_cfg
@@ -5472,6 +5540,7 @@ test.options += --no-progress
: non-negotiated
:
+ if false
{
$clone_cfg;
@@ -5483,6 +5552,7 @@ test.options += --no-progress
: negotiated
:
+ if false
{
$clone_cfg;
@@ -5494,12 +5564,63 @@ test.options += --no-progress
: re-evaluating-dependent
:
+ if false
{
$clone_cfg;
$* tex 2>!;
+ # @@ Seems we should get rid of this assertion (as suggested above)
+ # since the situation is pretty valid here: we just should
+ # up-negotiate 'tex: depends: libfoo(c)' after existing dependent
+ # tex was re-evaluated and become a regular dependent in a sence
+ # (we still need to keep the existing flag for it; see
+ # collect_build_prerequisites()).
+ #
$* baz/0.1.0 2>>~%EOE%
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ %.*
+ trace: collect_build: add baz/0.1.0
+ trace: collect_build_prerequisites: begin baz/0.1.0
+ %.*
+ trace: collect_build: add libbar/0.1.0
+ info: package baz dependency on (libbar == 0.1.0) is forcing downgrade of libbar/1.0.0 to 0.1.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libbar/0.1.0 of dependent baz/0.1.0
+ trace: collect_build: add libfoo/0.1.0
+ info: package baz dependency on (libfoo == 0.1.0) is forcing downgrade of libfoo/1.0.0 to 0.1.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent baz/0.1.0
+ trace: postponed_configurations::add: create {baz | libbar->{baz/1,1} libfoo->{baz/1,1}}
+ trace: collect_build_prerequisites: postpone baz/0.1.0
+ trace: collect_build_postponed (0): begin
+ trace: collect_build_postponed (1): begin {baz | libbar->{baz/1,1} libfoo->{baz/1,1}}
+ %.*
+ trace: collect_build_postponed (1): re-evaluate existing dependents for {baz | libbar->{baz/1,1} libfoo->{baz/1,1}}
+ %.*
+ trace: collect_build: add tex/1.0.0
+ trace: collect_build_prerequisites: reeval tex/1.0.0
+ %.*
+ trace: collect_build: pick libbar/0.1.0 over libbar/1.0.0
+ trace: postponed_configurations::add: add {tex^ 1,1: libbar} to {baz | libbar->{baz/1,1} libfoo->{baz/1,1}}
+ trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}
+ trace: collect_build_prerequisites: re-evaluated tex/1.0.0
+ trace: collect_build_postponed (1): cfg-negotiate begin {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/0.1.0
+ trace: collect_build_prerequisites: end libbar/0.1.0
+ trace: collect_build_prerequisites: begin libfoo/0.1.0
+ trace: collect_build_prerequisites: end libfoo/0.1.0
+ trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
+ trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent baz/0.1.0
+ trace: collect_build_prerequisites: resume baz/0.1.0
+ trace: collect_build_prerequisites: end baz/0.1.0
+ 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/0.1.0 over libfoo/1.0.0
+ trace: collect_build_prerequisites: cfg-postpone dependency libfoo/0.1.0 of dependent tex/1.0.0
+ trace: postponed_configurations::add: add {tex 2,1: libfoo} to {baz tex^ | libbar->{baz/1,1 tex/1,1} libfoo->{baz/1,1}}?
+ bpkg: /home/karen/work/build2/bpkg/bpkg/pkg-build.cxx:1361: void bpkg::postponed_configuration::add(bpkg::config_package&&, bool, std::pair<long unsigned int, long unsigned int>, bpkg::postponed_configuration::packages&&): Assertion 'ddi.existing == existing' failed.
EOE
}
}
@@ -5575,8 +5696,8 @@ test.options += --no-progress
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0
trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0
trace: postponed_configurations::add: add {box 1,1: libbar libfoo} to {foo | libfoo->{foo/1,1}}!
- trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libbar->{box/1,1} libfoo->{box/1,1 foo/1,1}}!
- trace: collect_build_prerequisites: cfg-postponing dependent box/1.0.0 involves negotiated configurations and results in {bar box foo | libbar->{bar/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}}!, throwing retry_configuration
+ trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libfoo->{box/1,1 foo/1,1} libbar->{box/1,1}}!
+ trace: collect_build_prerequisites: cfg-postponing dependent box/1.0.0 involves negotiated configurations and results in {bar box foo | libfoo->{box/1,1 foo/1,1} libbar->{bar/1,1 box/1,1}}!, throwing retry_configuration
trace: collect_build_postponed (0): cfg-negotiation of {foo | libfoo->{foo/1,1}} failed due to dependent box, adding shadow dependent and re-negotiating
trace: collect_build_postponed (1): begin {foo | libfoo->{foo/1,1}}
%.*
@@ -5606,8 +5727,8 @@ test.options += --no-progress
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent box/1.0.0
trace: collect_build_prerequisites: cfg-postpone dependency libfoo/1.0.0 of dependent box/1.0.0
trace: postponed_configurations::add: add {box 1,1: libbar libfoo} to {foo | libfoo->{foo/1,1}}!
- trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libbar->{box/1,1} libfoo->{box/1,1 foo/1,1}}!
- trace: collect_build_prerequisites: dependent box/1.0.0 is a shadow dependent for {bar box foo | libbar->{bar/1,1 box/1,1} libfoo->{box/1,1 foo/1,1}}!
+ trace: postponed_configurations::add: merge {bar | libbar->{bar/1,1}}! into {box foo | libfoo->{box/1,1 foo/1,1} libbar->{box/1,1}}!
+ trace: collect_build_prerequisites: dependent box/1.0.0 is a shadow dependent for {bar box foo | libfoo->{box/1,1 foo/1,1} libbar->{bar/1,1 box/1,1}}!
trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent box/1.0.0 is negotiated
trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent box/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_prerequisites: dependency libfoo/1.0.0 of dependent box/1.0.0 is already (being) recursively collected, skipping
@@ -5951,45 +6072,48 @@ test.options += --no-progress
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bix/1.0.0
trace: collect_build: add bar/1.0.0
trace: collect_build_prerequisites: cfg-postpone dependency bar/1.0.0 of dependent bix/1.0.0
- trace: postponed_configurations::add: create {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: postponed_configurations::add: create {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_prerequisites: postpone bix/1.0.0
trace: collect_build_postponed (0): begin
- trace: collect_build_postponed (1): begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
%.*
- trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/1.0.0
+ trace: collect_build_prerequisites: end libbar/1.0.0
trace: collect_build_prerequisites: begin bar/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | bar->{bix/1,1} libbar->{bix/1,1}}?
- trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?, throwing retry_configuration
- trace: collect_build_postponed (0): cfg-negotiation of {bix | bar->{bix/1,1} libbar->{bix/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating
- trace: collect_build_postponed (1): begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves negotiated configurations and results in {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?, throwing retry_configuration
+ trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to dependent bar, adding shadow dependent and re-negotiating
+ trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
%.*
- trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/1.0.0
+ trace: collect_build_prerequisites: end libbar/1.0.0
trace: collect_build_prerequisites: begin bar/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | bar->{bix/1,1} libbar->{bix/1,1}}?
- trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
- trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves non-negotiated configurations and results in {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?, throwing merge_configuration
- trace: collect_build_postponed (0): cfg-negotiation of {bix | bar->{bix/1,1} libbar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
- trace: collect_build_postponed (1): begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: cfg-postponing dependent bar/1.0.0 involves non-negotiated configurations and results in {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?, throwing merge_configuration
+ trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
%.*
- trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/1.0.0
+ trace: collect_build_prerequisites: end libbar/1.0.0
trace: collect_build_prerequisites: begin bar/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | bar->{bix/1,1} libbar->{bix/1,1}}? (shadow cluster-based)
- trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
+ trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based)
+ trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated
- trace: collect_build_prerequisites: collecting cfg-postponed dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: collect_build_prerequisites: begin libbar/1.0.0
- trace: collect_build_prerequisites: end libbar/1.0.0
+ trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_prerequisites: end bar/1.0.0
- trace: collect_build_postponed (1): dependency libbar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0
trace: collect_build_prerequisites: resume bix/1.0.0
@@ -5999,24 +6123,23 @@ test.options += --no-progress
trace: collect_build_prerequisites: begin bux/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bux/1.0.0
- trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
- trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves negotiated configurations and results in {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}?, throwing retry_configuration
- trace: collect_build_postponed (0): cfg-negotiation of {bix | bar->{bix/1,1} libbar->{bix/1,1}} failed due to dependent bux, adding shadow dependent and re-negotiating
- trace: collect_build_postponed (1): begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves negotiated configurations and results in {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?, throwing retry_configuration
+ trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to dependent bux, adding shadow dependent and re-negotiating
+ trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
%.*
- trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/1.0.0
+ trace: collect_build_prerequisites: end libbar/1.0.0
trace: collect_build_prerequisites: begin bar/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | bar->{bix/1,1} libbar->{bix/1,1}}? (shadow cluster-based)
- trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
+ trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based)
+ trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated
- trace: collect_build_prerequisites: collecting cfg-postponed dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: collect_build_prerequisites: begin libbar/1.0.0
- trace: collect_build_prerequisites: end libbar/1.0.0
+ trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_prerequisites: end bar/1.0.0
- trace: collect_build_postponed (1): dependency libbar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0
trace: collect_build_prerequisites: resume bix/1.0.0
@@ -6026,25 +6149,24 @@ test.options += --no-progress
trace: collect_build_prerequisites: begin bux/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bux/1.0.0
- trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
- trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}?
- trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves non-negotiated configurations and results in {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}?, throwing merge_configuration
- trace: collect_build_postponed (0): cfg-negotiation of {bix | bar->{bix/1,1} libbar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}?
- trace: collect_build_postponed (1): begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?
+ trace: collect_build_prerequisites: cfg-postponing dependent bux/1.0.0 involves non-negotiated configurations and results in {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?, throwing merge_configuration
+ trace: collect_build_postponed (0): cfg-negotiation of {bix | libbar->{bix/1,1} bar->{bix/1,1}} failed due to non-negotiated clusters, force-merging based on shadow cluster {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?
+ trace: collect_build_postponed (1): begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
%.*
- trace: collect_build_postponed (1): cfg-negotiate begin {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate begin {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependencies
+ trace: collect_build_prerequisites: begin libbar/1.0.0
+ trace: collect_build_prerequisites: end libbar/1.0.0
trace: collect_build_prerequisites: begin bar/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | bar->{bix/1,1} libbar->{bix/1,1}}? (shadow cluster-based)
- trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}?
+ trace: postponed_configurations::add: add {bar 1,1: libbar} to {bix | libbar->{bix/1,1} bar->{bix/1,1}}? (shadow cluster-based)
+ trace: collect_build_prerequisites: dependent bar/1.0.0 is a shadow dependent for {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}?
trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bar/1.0.0 is negotiated
- trace: collect_build_prerequisites: collecting cfg-postponed dependency libbar/1.0.0 of dependent bar/1.0.0
- trace: collect_build_prerequisites: begin libbar/1.0.0
- trace: collect_build_prerequisites: end libbar/1.0.0
+ trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_prerequisites: end bar/1.0.0
- trace: collect_build_postponed (1): dependency libbar/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_postponed (1): recursively collect cfg-negotiated dependents
trace: collect_build_postponed (1): select cfg-negotiated dependency alternative for dependent bix/1.0.0
trace: collect_build_prerequisites: resume bix/1.0.0
@@ -6054,14 +6176,14 @@ test.options += --no-progress
trace: collect_build_prerequisites: begin bux/1.0.0
%.*
trace: collect_build_prerequisites: cfg-postpone dependency libbar/1.0.0 of dependent bux/1.0.0
- trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1}}? (shadow cluster-based)
- trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}?
+ trace: postponed_configurations::add: add {bux 1,1: libbar} to {bar bix | libbar->{bar/1,1 bix/1,1} bar->{bix/1,1}}? (shadow cluster-based)
+ trace: collect_build_prerequisites: dependent bux/1.0.0 is a shadow dependent for {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}?
trace: collect_build_prerequisites: configuration for cfg-postponed dependencies of dependent bux/1.0.0 is negotiated
trace: collect_build_prerequisites: dependency libbar/1.0.0 of dependent bux/1.0.0 is already (being) recursively collected, skipping
trace: collect_build_prerequisites: end bux/1.0.0
trace: collect_build_prerequisites: end bix/1.0.0
- trace: collect_build_postponed (1): cfg-negotiate end {bar bix bux | bar->{bix/1,1} libbar->{bar/1,1 bix/1,1 bux/1,1}}!
- trace: collect_build_postponed (1): end {bix | bar->{bix/1,1} libbar->{bix/1,1}}
+ trace: collect_build_postponed (1): cfg-negotiate end {bar bix bux | libbar->{bar/1,1 bix/1,1 bux/1,1} bar->{bix/1,1}}!
+ trace: collect_build_postponed (1): end {bix | libbar->{bix/1,1} bar->{bix/1,1}}
trace: collect_build_postponed (0): end
trace: execute_plan: simulate: yes
%.*
@@ -7825,8 +7947,11 @@ test.options += --no-progress
trace: collect_build_postponed (1): re-evaluate existing dependents for {tix | libbar->{tix/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 {tix | libbar->{tix/1,1}}
+ trace: collect_build_prerequisites: re-evaluating dependent tex/1.0.0 results in {tex^ tix | libbar->{tex/1,1 tix/1,1}}
+ trace: collect_build_prerequisites: re-evaluated tex/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: begin libbar/1.0.0