summaryrefslogtreecommitdiffstats
path: root/crates/runner/src/task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/runner/src/task.rs')
-rw-r--r--crates/runner/src/task.rs22
1 files changed, 15 insertions, 7 deletions
diff --git a/crates/runner/src/task.rs b/crates/runner/src/task.rs
index 174768c..c43fc2f 100644
--- a/crates/runner/src/task.rs
+++ b/crates/runner/src/task.rs
@@ -252,9 +252,19 @@ fn cleanup_task(input_hash: &InputHash) -> Result<()> {
Ok(())
}
-fn unpack_dependency<P: AsRef<Path>>(filename: P, hash: &ArchiveHash) -> Result<()> {
+fn get_archive_filename(task: &Task, hash: &ArchiveHash) -> String {
+ if let Some(pinned_name) = task.pins.get(hash) {
+ paths::pinned_archive_filename(pinned_name)
+ } else {
+ paths::archive_filename(hash)
+ }
+}
+
+fn unpack_dependency(task: &Task, hash: &ArchiveHash) -> Result<()> {
let _lock = unix::lock(paths::depend_lock_filename(hash), true, true);
+ let filename = get_archive_filename(task, hash);
+
let dest = paths::depend_dir(hash);
if Path::new(&dest).is_dir() {
return Ok(());
@@ -264,7 +274,7 @@ fn unpack_dependency<P: AsRef<Path>>(filename: P, hash: &ArchiveHash) -> Result<
let tmp_dest = paths::depend_tmp_dir(hash);
fs::ensure_removed(&tmp_dest)?;
- let file = fs::open(filename.as_ref())?;
+ let file = fs::open(&filename)?;
let hasher = ArchiveHasher::new();
let buffered_hasher = BufWriter::with_capacity(16 * 1024 * 1024, hasher);
let mut reader = TeeReader::new(file, buffered_hasher, false);
@@ -282,9 +292,7 @@ fn unpack_dependency<P: AsRef<Path>>(filename: P, hash: &ArchiveHash) -> Result<
if &actual_hash != hash {
return Err(Error::new(format!(
"Incorrect file hash for {:?} (expected: {}, actual: {})",
- filename.as_ref(),
- hash,
- actual_hash
+ filename, hash, actual_hash,
)));
}
@@ -292,7 +300,7 @@ fn unpack_dependency<P: AsRef<Path>>(filename: P, hash: &ArchiveHash) -> Result<
Ok(())
})()
- .with_context(|| format!("Failed to unpack {:?}", filename.as_ref(),))
+ .with_context(|| format!("Failed to unpack {:?}", filename))
}
fn unpack_dependencies(input_hash: &InputHash, task: &Task) -> Result<DependMap> {
@@ -313,7 +321,7 @@ fn unpack_dependencies(input_hash: &InputHash, task: &Task) -> Result<DependMap>
)?;
}
Dependency::Task { output, path } => {
- unpack_dependency(paths::archive_filename(output), output)?;
+ unpack_dependency(task, output)?;
ret.entry(path.clone()).or_default().push(*output);
}
}