summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crates/runner/src/task.rs18
-rw-r--r--crates/runner/src/util/cjson.rs6
2 files changed, 22 insertions, 2 deletions
diff --git a/crates/runner/src/task.rs b/crates/runner/src/task.rs
index 8981d13..19a7484 100644
--- a/crates/runner/src/task.rs
+++ b/crates/runner/src/task.rs
@@ -575,8 +575,11 @@ pub fn handle(task: Task, jobserver: &mut Jobserver) -> Result<TaskOutput> {
let _lock = unix::lock(paths::task_lock_filename(&input_hash), true, true)
.context("Failed to get task lock")?;
- if let Ok(task_output) = load_cached(&input_hash) {
- return Ok(task_output);
+ let cached_output = load_cached(&input_hash);
+ if !task.force_run {
+ if let Ok(task_output) = cached_output {
+ return Ok(task_output);
+ }
}
let token = jobserver.wait();
@@ -602,5 +605,16 @@ pub fn handle(task: Task, jobserver: &mut Jobserver) -> Result<TaskOutput> {
duration.as_secs_f32()
);
+ if let Ok(cached_output) = cached_output {
+ if cached_output.outputs != task_output.outputs {
+ println!(
+ "WARNING: Output hashes for task {} do not match cached result\n Cached output: {}\n New output: {}",
+ task.label,
+ cjson::to_string(&cached_output.outputs).unwrap(),
+ cjson::to_string(&task_output.outputs).unwrap(),
+ );
+ }
+ }
+
Ok(task_output)
}
diff --git a/crates/runner/src/util/cjson.rs b/crates/runner/src/util/cjson.rs
index 5990943..e3840ce 100644
--- a/crates/runner/src/util/cjson.rs
+++ b/crates/runner/src/util/cjson.rs
@@ -24,6 +24,12 @@ pub fn to_file<P: AsRef<Path>, T: ?Sized + Serialize>(path: P, value: &T) -> io:
file.sync_all()
}
+pub fn to_string<T: ?Sized + Serialize>(value: &T) -> Result<String> {
+ let mut ret = Vec::new();
+ to_writer(&mut ret, value)?;
+ Ok(String::from_utf8(ret).unwrap())
+}
+
pub fn digest<D: Digest + Write, T: ?Sized + Serialize>(value: &T) -> Result<digest::Output<D>> {
let mut digest = <D as Digest>::new();
to_writer(&mut digest, value)?;