Merge branch 'repo-lock' into 'master'

Don't recurse lock rules, fix binary repo cross arch

See merge request redox-os/redox!2130
This commit is contained in:
Jeremy Soller 2026-05-07 20:14:20 -06:00
commit 4d30dceba0
2 changed files with 26 additions and 19 deletions

View File

@ -583,20 +583,16 @@ fn parse_args(args: Vec<String>) -> Result<(CliConfig, CliCommand, Vec<CookRecip
}; };
let rule = recipe_lock.fsrule.as_ref().unwrap(); let rule = recipe_lock.fsrule.as_ref().unwrap();
special_rules.insert(recipe_name.clone(), rule.to_string()); special_rules.insert(recipe_name.clone(), rule.to_string());
if rule == "source" || rule == "local" { // lock rules does not recurse as it's done already in the file
source_names.push(recipe_name);
} else if rule == "binary" {
binary_names.push(recipe_name);
}
} }
for (recipe_name_str, recipe_config) in conf.packages.iter() { for (recipe_name_str, recipe_config) in conf.packages.iter() {
let Ok(recipe_name) = PackageName::new(recipe_name_str) else { let Ok(recipe_name) = PackageName::new(recipe_name_str) else {
continue; continue;
}; };
if special_rules.contains_key(&recipe_name) {
continue; let rule = if let Some(rule) = special_rules.get(&recipe_name) {
} rule.as_str()
let rule = if let PackageConfig::Build(rule) = recipe_config { } else if let PackageConfig::Build(rule) = recipe_config {
special_rules.insert(recipe_name.clone(), rule.to_string()); special_rules.insert(recipe_name.clone(), rule.to_string());
rule rule
} else { } else {

View File

@ -39,27 +39,38 @@ fn init_binary_repo() -> (RepoManager, Repository) {
let callback = Rc::new(RefCell::new(SilentCallback::new())); let callback = Rc::new(RefCell::new(SilentCallback::new()));
let download_backend = CurlBackend::new().expect("Curl not found"); let download_backend = CurlBackend::new().expect("Curl not found");
let mut repo = RepoManager::new(callback, Box::new(download_backend)); let mut repo = RepoManager::new(callback, Box::new(download_backend));
let target = redoxer::target();
repo.add_remote(crate::REMOTE_PKG_SOURCE, redoxer::target()) repo.add_remote(crate::REMOTE_PKG_SOURCE, target)
.expect("Unable to add remote"); .expect("Unable to add remote");
let repo_path = PathBuf::from("build/remotes"); let repo_path = PathBuf::from("build/remotes");
repo.set_download_path(repo_path.clone()); repo.set_download_path(repo_path.clone());
repo.sync_keys().expect("Unable to sync keys"); repo.sync_keys().expect("Unable to sync keys");
let repo_toml = load_cached_repo(&repo_path.join("repo.toml")).unwrap_or_else(|| { let repo_toml = load_cached_repo(&repo_path.join(format!("{target}_repo.toml")))
let (toml_str, _) = repo .unwrap_or_else(|| {
.get_package_toml(&PackageName::new("repo").unwrap()) let repo = download_repo(&repo, repo_path)
.expect("Failed to fetch repo.toml"); .map_err(|e| {
let repo = Repository::from_toml(&toml_str).expect("Fetched repo.toml is invalid"); eprintln!(
fs::serialize_and_write(&repo_path.join("repo.toml"), &repo).expect("Unable to save repo"); "Unable to load server repo.toml, all recipes will build from source: {e}"
repo );
}); e
})
.unwrap_or_default();
repo
});
// reset here to not clobber pty // reset here to not clobber pty
repo.callback = Rc::new(RefCell::new(PlainCallback::new())); repo.callback = Rc::new(RefCell::new(PlainCallback::new()));
(repo, repo_toml) (repo, repo_toml)
} }
fn download_repo(repo: &RepoManager, repo_path: PathBuf) -> crate::Result<Repository> {
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) { pub fn get_binary_repo() -> (RepoManager, Repository) {
BINARY_REPO.with(|cell| { BINARY_REPO.with(|cell| {
let mut opt = cell.borrow_mut(); let mut opt = cell.borrow_mut();