From 2dd34be76f5681a411384f0fa1e810184d8d3b1f Mon Sep 17 00:00:00 2001 From: Wildan M Date: Fri, 8 May 2026 08:53:07 +0700 Subject: [PATCH] Don't recurse lock rules, fix binary repo cross arch --- src/bin/repo.rs | 14 +++++--------- src/cook/fetch_repo.rs | 31 +++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/bin/repo.rs b/src/bin/repo.rs index 8332e972..7983ef01 100644 --- a/src/bin/repo.rs +++ b/src/bin/repo.rs @@ -583,20 +583,16 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec (RepoManager, Repository) { let callback = Rc::new(RefCell::new(SilentCallback::new())); let download_backend = CurlBackend::new().expect("Curl not found"); let mut repo = RepoManager::new(callback, Box::new(download_backend)); - - repo.add_remote(crate::REMOTE_PKG_SOURCE, redoxer::target()) + let target = redoxer::target(); + repo.add_remote(crate::REMOTE_PKG_SOURCE, target) .expect("Unable to add remote"); let repo_path = PathBuf::from("build/remotes"); repo.set_download_path(repo_path.clone()); repo.sync_keys().expect("Unable to sync keys"); - let repo_toml = load_cached_repo(&repo_path.join("repo.toml")).unwrap_or_else(|| { - let (toml_str, _) = repo - .get_package_toml(&PackageName::new("repo").unwrap()) - .expect("Failed to fetch repo.toml"); - let repo = Repository::from_toml(&toml_str).expect("Fetched repo.toml is invalid"); - fs::serialize_and_write(&repo_path.join("repo.toml"), &repo).expect("Unable to save repo"); - repo - }); + let repo_toml = load_cached_repo(&repo_path.join(format!("{target}_repo.toml"))) + .unwrap_or_else(|| { + let repo = download_repo(&repo, repo_path) + .map_err(|e| { + eprintln!( + "Unable to load server repo.toml, all recipes will build from source: {e}" + ); + e + }) + .unwrap_or_default(); + repo + }); // reset here to not clobber pty repo.callback = Rc::new(RefCell::new(PlainCallback::new())); (repo, repo_toml) } +fn download_repo(repo: &RepoManager, repo_path: PathBuf) -> crate::Result { + let (toml_str, _) = repo.get_package_toml(&PackageName::new("repo").unwrap())?; + let repo = Repository::from_toml(&toml_str)?; + fs::serialize_and_write(&repo_path.join("repo.toml"), &repo)?; + Ok(repo) +} + pub fn get_binary_repo() -> (RepoManager, Repository) { BINARY_REPO.with(|cell| { let mut opt = cell.borrow_mut();