summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-01-27 18:13:32 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-01-27 18:13:32 +0100
commit2de44d3fea66298e55ac98568e20b9baa2b601f3 (patch)
tree0a52d2f7c707b3de41ba53ba49930f58ba81610f /src
parent81fccdc0ec42a97f8c3e4fa905af7759742a73f9 (diff)
downloadrebel-2de44d3fea66298e55ac98568e20b9baa2b601f3.tar
rebel-2de44d3fea66298e55ac98568e20b9baa2b601f3.zip
resolve: debug_assert task state more frequently
Diffstat (limited to 'src')
-rw-r--r--src/resolve.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/resolve.rs b/src/resolve.rs
index d7ce52d..ec2ec1a 100644
--- a/src/resolve.rs
+++ b/src/resolve.rs
@@ -72,7 +72,16 @@ impl<'a> Resolver<'a> {
}
}
- pub fn add_goal(&mut self, task: &TaskRef) -> Result<()> {
+ fn tasks_resolved(&self) -> bool {
+ for (_, resolved) in &self.resolve_state {
+ if *resolved != ResolveState::Resolved {
+ return false;
+ }
+ }
+ true
+ }
+
+ pub fn add_task(&mut self, task: &TaskRef) -> Result<()> {
match self.resolve_state.get(task) {
Some(ResolveState::Resolving) => {
return Err(Error::DependencyCycle(vec![task.clone()]))
@@ -90,7 +99,7 @@ impl<'a> Resolver<'a> {
.insert(task.clone(), ResolveState::Resolving);
for dep in &task_def.depends {
- let res = self.add_goal(dep);
+ let res = self.add_task(dep);
if let Err(mut error) = res {
self.resolve_state.remove(task);
@@ -108,16 +117,14 @@ impl<'a> Resolver<'a> {
Ok(())
}
+ pub fn add_goal(&mut self, task: &TaskRef) -> Result<()> {
+ self.add_task(task)?;
+ debug_assert!(self.tasks_resolved());
+ Ok(())
+ }
+
pub fn to_taskset(self) -> HashSet<TaskRef> {
- fn tasks_resolved(this: &Resolver) -> bool {
- for (_, resolved) in &this.resolve_state {
- if *resolved != ResolveState::Resolved {
- return false;
- }
- }
- true
- }
- debug_assert!(tasks_resolved(&self));
+ debug_assert!(self.tasks_resolved());
self.resolve_state
.into_iter()