diff options
-rw-r--r-- | crates/runner/src/task.rs | 18 | ||||
-rw-r--r-- | crates/runner/src/util/cjson.rs | 6 |
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)?; |