aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2010-11-21 17:58:03 +0000
committerAvatar Ciaran McCreesh <ciaran.mccreesh@googlemail.com> 2010-11-21 17:58:03 +0000
commit0d407815c20ed74cd3d5cb3b663d6c0ab007fc86 (patch)
treea8240f020ae6ae92b3dc2c2438fa942d9ad76cbb
parentbf94cd0ca65dad47406ddf66dd55c49fdccb0672 (diff)
downloadpaludis-0d407815c20ed74cd3d5cb3b663d6c0ab007fc86.tar.gz
paludis-0d407815c20ed74cd3d5cb3b663d6c0ab007fc86.tar.xz
Can't continue-on-failure over binary creation
Fixes: ticket:1042
-rw-r--r--paludis/resolver/nag.cc3
-rw-r--r--paludis/resolver/nag.hh2
-rw-r--r--paludis/resolver/orderer.cc17
3 files changed, 22 insertions, 0 deletions
diff --git a/paludis/resolver/nag.cc b/paludis/resolver/nag.cc
index a76d42e..22db110 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 13f29f1..cc882bc 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 ce75344..f475149 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)