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

This commit is contained in:
Wildan M 2026-05-08 08:53:07 +07:00
parent dff2cb45e0
commit 2dd34be76f
No known key found for this signature in database
GPG Key ID: 01AC53185C679C79
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();
special_rules.insert(recipe_name.clone(), rule.to_string());
if rule == "source" || rule == "local" {
source_names.push(recipe_name);
} else if rule == "binary" {
binary_names.push(recipe_name);
}
// lock rules does not recurse as it's done already in the file
}
for (recipe_name_str, recipe_config) in conf.packages.iter() {
let Ok(recipe_name) = PackageName::new(recipe_name_str) else {
continue;
};
if special_rules.contains_key(&recipe_name) {
continue;
}
let rule = if let PackageConfig::Build(rule) = recipe_config {
let rule = if let Some(rule) = special_rules.get(&recipe_name) {
rule.as_str()
} else if let PackageConfig::Build(rule) = recipe_config {
special_rules.insert(recipe_name.clone(), rule.to_string());
rule
} else {

View File

@ -39,27 +39,38 @@ fn init_binary_repo() -> (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<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) {
BINARY_REPO.with(|cell| {
let mut opt = cell.borrow_mut();