From 96d2d5dfe75435bee51d8b48ceb7698b72f537ef Mon Sep 17 00:00:00 2001 From: Wildan M Date: Sat, 6 Dec 2025 22:00:25 +0700 Subject: [PATCH] Reread recipe TOML on TUI retry --- src/bin/repo.rs | 6 ++++-- src/recipe.rs | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bin/repo.rs b/src/bin/repo.rs index 19e1e372..378ff9ee 100644 --- a/src/bin/repo.rs +++ b/src/bin/repo.rs @@ -1008,7 +1008,7 @@ fn run_tui_cook( let cooker_status_tx = status_tx.clone(); let cooker_prompting = prompting.clone(); let cooker_handle = thread::spawn(move || { - 'done: for (recipe, source_dir) in work_rx { + 'done: for (mut recipe, source_dir) in work_rx { let name = recipe.name.clone(); let is_deps = recipe.is_deps; let (mut stdout_writer, mut stderr_writer) = setup_logger(&cooker_status_tx, &name); @@ -1017,6 +1017,7 @@ fn run_tui_cook( cooker_status_tx .send(StatusUpdate::StartCook(name.clone())) .unwrap(); + let _ = recipe.reload_recipe(); // reread recipe.toml in case we're retrying let handler = handle_cook( &recipe, &cooker_config, @@ -1113,7 +1114,7 @@ fn run_tui_cook( let fetcher_config = config.clone(); let fetcher_prompting = prompting.clone(); let fetcher_handle = thread::spawn(move || { - 'done: for recipe in fetcher_recipes { + 'done: for mut recipe in fetcher_recipes { let name = recipe.name.clone(); let (mut stdout_writer, mut stderr_writer) = setup_logger(&fetcher_status_tx, &name); let mut logger = Some((&mut stdout_writer, &mut stderr_writer)); @@ -1121,6 +1122,7 @@ fn run_tui_cook( fetcher_status_tx .send(StatusUpdate::StartFetch(name.clone())) .unwrap(); + let _ = recipe.reload_recipe(); // reread recipe.toml in case we're retrying let handler = handle_fetch(&recipe, &fetcher_config, true, &logger); if let Some(log_path) = fetcher_config.logs_dir.as_ref() // successful fetch log usually not that helpful diff --git a/src/recipe.rs b/src/recipe.rs index 463ff322..67947a33 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -416,6 +416,12 @@ impl CookRecipe { Ok(packages.into_iter().map(|p| p.name).collect()) } + pub fn reload_recipe(&mut self) -> Result<(), PackageError> { + let r = Self::from_path(&self.dir, true)?; + self.recipe = r.recipe; + Ok(()) + } + /// returns stage dir, pkgar file and toml file. pub fn stage_paths(&self) -> (PathBuf, PathBuf, PathBuf) { let r = self.name.suffix().map(|p| OptionalPackageRecipe {