diff options
author | 2010-11-21 17:58:03 +0000 | |
---|---|---|
committer | 2010-11-21 17:58:03 +0000 | |
commit | 0d407815c20ed74cd3d5cb3b663d6c0ab007fc86 (patch) | |
tree | a8240f020ae6ae92b3dc2c2438fa942d9ad76cbb | |
parent | bf94cd0ca65dad47406ddf66dd55c49fdccb0672 (diff) | |
download | paludis-0d407815c20ed74cd3d5cb3b663d6c0ab007fc86.tar.gz paludis-0d407815c20ed74cd3d5cb3b663d6c0ab007fc86.tar.xz |
Can't continue-on-failure over binary creation
Fixes: ticket:1042
-rw-r--r-- | paludis/resolver/nag.cc | 3 | ||||
-rw-r--r-- | paludis/resolver/nag.hh | 2 | ||||
-rw-r--r-- | paludis/resolver/orderer.cc | 17 |
3 files changed, 22 insertions, 0 deletions
diff --git a/paludis/resolver/nag.cc b/paludis/resolver/nag.cc index a76d42e4d..22db1105f 100644 --- a/paludis/resolver/nag.cc +++ b/paludis/resolver/nag.cc @@ -469,6 +469,7 @@ NAG::deserialise(Deserialisation & d) NAGEdgeProperties & NAGEdgeProperties::operator|= (const NAGEdgeProperties & other) { + always() |= other.always(); build() |= other.build(); build_all_met() &= other.build_all_met(); run() |= other.run(); @@ -480,6 +481,7 @@ void NAGEdgeProperties::serialise(Serialiser & s) const { s.object("NAGEdgeProperties") + .member(SerialiserFlags<>(), "always", always()) .member(SerialiserFlags<>(), "build", build()) .member(SerialiserFlags<>(), "build_all_met", build_all_met()) .member(SerialiserFlags<>(), "run", run()) @@ -493,6 +495,7 @@ NAGEdgeProperties::deserialise(Deserialisation & d) Deserialisator v(d, "NAGEdgeProperties"); return make_named_values<NAGEdgeProperties>( + n::always() = v.member<bool>("always"), n::build() = v.member<bool>("build"), n::build_all_met() = v.member<bool>("build_all_met"), n::run() = v.member<bool>("run"), diff --git a/paludis/resolver/nag.hh b/paludis/resolver/nag.hh index 13f29f12f..cc882bca4 100644 --- a/paludis/resolver/nag.hh +++ b/paludis/resolver/nag.hh @@ -34,6 +34,7 @@ namespace paludis { namespace n { + typedef Name<struct always_name> always; typedef Name<struct build_name> build; typedef Name<struct build_all_met_name> build_all_met; typedef Name<struct resolvent_name> resolvent; @@ -57,6 +58,7 @@ namespace paludis struct NAGEdgeProperties { + NamedValue<n::always, bool> always; NamedValue<n::build, bool> build; NamedValue<n::build_all_met, bool> build_all_met; NamedValue<n::run, bool> run; diff --git a/paludis/resolver/orderer.cc b/paludis/resolver/orderer.cc index ce753449e..f47514985 100644 --- a/paludis/resolver/orderer.cc +++ b/paludis/resolver/orderer.cc @@ -177,6 +177,7 @@ namespace resolved->nag()->add_edge(done_index, fetched_index, make_named_values<NAGEdgeProperties>( + n::always() = false, n::build() = true, n::build_all_met() = false, n::run() = false, @@ -291,6 +292,7 @@ namespace { nag->add_edge(from, to, make_named_values<NAGEdgeProperties>( + n::always() = false, n::build() = classifier.includes_buildish, n::build_all_met() = r.already_met() || ! classifier.includes_buildish, n::run() = classifier.includes_non_post_runish, @@ -301,6 +303,7 @@ namespace { nag->add_edge(to, from, make_named_values<NAGEdgeProperties>( + n::always() = false, n::build() = false, n::build_all_met() = true, n::run() = false, @@ -360,6 +363,7 @@ namespace nag->add_edge(from, to, make_named_values<NAGEdgeProperties>( + n::always() = false, n::build() = false, n::build_all_met() = true, n::run() = false, @@ -389,6 +393,7 @@ namespace nag->add_edge(from, to, make_named_values<NAGEdgeProperties>( + n::always() = false, n::build() = false, n::build_all_met() = true, n::run() = false, @@ -576,6 +581,7 @@ Orderer::_add_binary_cleverness(const std::shared_ptr<const Resolution> & resolu _imp->resolved->nag()->add_edge(from, to, make_named_values<NAGEdgeProperties>( + n::always() = true, n::build() = true, n::build_all_met() = false, n::run() = false, @@ -651,6 +657,7 @@ Orderer::_order_sub_ssccs( if (sub_scc->nodes()->end() != sub_scc->nodes()->find(e->first)) if ((! e->second.build_all_met()) || (! e->second.run_all_met())) scc_nag_without_met_deps.add_edge(*r, e->first, make_named_values<NAGEdgeProperties>( + n::always() = e->second.always(), n::build() = e->second.build() && ! e->second.build_all_met(), n::build_all_met() = e->second.build_all_met(), n::run() = e->second.run() && ! e->second.run_all_met(), @@ -718,6 +725,16 @@ namespace n::required_if() = basic_required_ifs + jri_require_for_satisfied )); } + + if (e->second.always()) + { + ChangeOrRemoveJobNumbers::const_iterator n(change_or_remove_job_numbers.find(e->first)); + if (n != change_or_remove_job_numbers.end()) + requirements->push_back(make_named_values<JobRequirement>( + n::job_number() = n->second, + n::required_if() = basic_required_ifs + jri_require_always + )); + } } if ((! is_uninstall) && recursed.insert(index).second) |