From eede787cbf594a6f1004fe38b1dd0a062180aaab Mon Sep 17 00:00:00 2001 From: Anhad Singh Date: Fri, 31 Jan 2025 18:39:52 +1100 Subject: [PATCH] fix(cook): copy source only if newer Fixes the bug where libgcc was unnecessarily building multiple times. Which in turn caused other packages to rebuild. Example: The source path is set to `prefix/${TARGET}/sysroot`. Currently the way `cook` handles `source.path` ends up messing the timestamp of `recipes/libs/libgcc/source` as it just performs `copy_dir_all(path, &source_dir)` without checking if the timestamp of the source path specified in the recipe was changed. This would consequently update the timestamp of the source and cause it to rebuild. Signed-off-by: Anhad Singh --- src/bin/cook.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/bin/cook.rs b/src/bin/cook.rs index ff9345ad..5d48a10b 100644 --- a/src/bin/cook.rs +++ b/src/bin/cook.rs @@ -228,14 +228,17 @@ fn fetch(recipe_dir: &Path, source: &Option) -> Result { - copy_dir_all(path, &source_dir).map_err(|e| { - format!( - "Couldn't copy source from {} to {}: {}", - path, - source_dir.display(), - e - ) - })?; + if modified_dir(Path::new(path))? > modified_dir(&source_dir)? { + eprintln!("[DEBUG]: {} is newer than {}", path, source_dir.display()); + copy_dir_all(path, &source_dir).map_err(|e| { + format!( + "Couldn't copy source from {} to {}: {}", + path, + source_dir.display(), + e + ) + })?; + } } Some(SourceRecipe::Git { git,