From 3ae5da8d1352cea5c27e87fccacfc7b87c92589e Mon Sep 17 00:00:00 2001 From: Wildan M Date: Sat, 6 Dec 2025 21:58:28 +0700 Subject: [PATCH] Code simplification --- Cargo.lock | 6 +++--- src/bin/repo_builder.rs | 15 ++++++--------- src/cook/cook_build.rs | 6 +----- src/cook/package.rs | 7 +------ src/cook/tree.rs | 9 +++------ src/recipe.rs | 19 ++++++++++++++++--- 6 files changed, 30 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f734d25b..b95ef921 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -912,7 +912,7 @@ dependencies = [ [[package]] name = "redox-pkg" version = "0.2.8" -source = "git+https://gitlab.redox-os.org/redox-os/pkgutils.git#b89f08df540b597949207147e0645aed24eb2a80" +source = "git+https://gitlab.redox-os.org/redox-os/pkgutils.git#6ed6a265cbe9abaf9d747e700f72cad9cea5a5d0" dependencies = [ "anyhow", "ignore", @@ -986,7 +986,7 @@ dependencies = [ [[package]] name = "redoxer" version = "0.2.61" -source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#ccf8df39804a3b405c239a7b2bdddceb77612911" +source = "git+https://gitlab.redox-os.org/redox-os/redoxer.git#a4c4dac4550bc234aa04e30efd4058daf8377678" dependencies = [ "anyhow", "dirs", @@ -1321,7 +1321,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.4", + "cfg-if 0.1.10", "static_assertions", ] diff --git a/src/bin/repo_builder.rs b/src/bin/repo_builder.rs index ad990261..51736771 100644 --- a/src/bin/repo_builder.rs +++ b/src/bin/repo_builder.rs @@ -1,7 +1,7 @@ use anyhow::anyhow; use cookbook::WALK_DEPTH; use cookbook::config::{get_config, init_config}; -use cookbook::cook::package::{get_package_name, package_stage_paths, package_target}; +use cookbook::cook::package as cook_package; use cookbook::recipe::CookRecipe; use pkg::{Package, PackageName, recipes}; use std::collections::{BTreeMap, HashMap}; @@ -94,14 +94,11 @@ fn publish_packages(config: &CliConfig) -> anyhow::Result<()> { continue; }; - let target = package_target(recipe); - let target_dir = cookbook_recipe.dir.join("target").join(&target); - - let packages = cookbook_recipe.recipe.get_packages_list(); - - for package in packages { - let (stage_dir, pkgar_src, toml_src) = package_stage_paths(package, &target_dir); - let recipe_name = get_package_name(recipe.name(), package); + let target_dir = cookbook_recipe.target_dir(); + for package in cookbook_recipe.recipe.get_packages_list() { + let (stage_dir, pkgar_src, toml_src) = + cook_package::package_stage_paths(package, &target_dir); + let recipe_name = recipe.without_host(); let pkgar_dst = repo_path.join(format!("{}.pkgar", recipe_name)); let toml_dst = repo_path.join(format!("{}.toml", recipe_name)); diff --git a/src/cook/cook_build.rs b/src/cook/cook_build.rs index 7651befe..6aa0e088 100644 --- a/src/cook/cook_build.rs +++ b/src/cook/cook_build.rs @@ -195,11 +195,7 @@ pub fn build( build_deps.push(CookRecipe::from_name(dep.clone()).map_err(|e| format!("{:?}", e))?); } for dependency in build_deps.iter() { - let pkgar = dependency - .dir - .join("target") - .join(dependency.target) - .join("stage.pkgar"); + let (_, pkgar, _) = dependency.stage_paths(); if dependency.name.is_host() { dep_host_pkgars.insert((dependency.name.clone(), pkgar)); } else { diff --git a/src/cook/package.rs b/src/cook/package.rs index 9998d2f5..70d90818 100644 --- a/src/cook/package.rs +++ b/src/cook/package.rs @@ -150,12 +150,7 @@ pub fn package_toml( }; let package = Package { - name: PackageName::new(if name.is_host() { - &name.as_str()["host:".len()..] - } else { - name.as_str() - }) - .unwrap(), + name: name.without_host(), version: package_version(recipe), target: package_target(name).to_string(), blake3: hash, diff --git a/src/cook/tree.rs b/src/cook/tree.rs index ec4feb1a..70bacb1d 100644 --- a/src/cook/tree.rs +++ b/src/cook/tree.rs @@ -4,10 +4,10 @@ use std::{ path::PathBuf, }; -use anyhow::{Context, anyhow}; +use anyhow::Context; use pkg::{Package, PackageName}; -use crate::{cook::fs::create_target_dir, recipe::CookRecipe}; +use crate::recipe::CookRecipe; pub enum WalkTreeEntry<'a> { Built(&'a PathBuf, u64), @@ -53,10 +53,7 @@ pub fn walk_tree_entry( } }; - let package_dir = &cook_recipe.dir; - let target_dir = create_target_dir(package_dir, redoxer::target()).map_err(|e| anyhow!(e))?; - let pkg_path = target_dir.join("stage.pkgar"); - let pkg_toml = target_dir.join("stage.toml"); + let (_, pkg_path, pkg_toml) = cook_recipe.stage_paths(); let deduped = visited.contains(package_name); let entry = match (std::fs::metadata(&pkg_path), deduped) { diff --git a/src/recipe.rs b/src/recipe.rs index 415fb312..463ff322 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -12,7 +12,7 @@ use serde::{ de::{Error as DeErrorT, value::Error as DeError}, }; -use crate::{WALK_DEPTH, cook::package::package_target}; +use crate::{WALK_DEPTH, cook::package as cook_package}; /// Specifies how to download the source for a recipe #[derive(Debug, Clone, Deserialize, PartialEq, Serialize)] @@ -225,14 +225,14 @@ impl Recipe { impl CookRecipe { pub fn new(name: PackageName, dir: PathBuf, mut recipe: Recipe) -> Result { - let target = package_target(&name); + let target = cook_package::package_target(&name); if name.is_host() { let thisname = name.name(); let fn_map = |p: PackageName| { if p.is_host() { if p.name() == thisname { None } else { Some(p) } } else { - Some(PackageName::new(format!("host:{}", p.as_str())).unwrap()) + Some(p.with_host()) } }; recipe.build.dependencies = recipe @@ -415,6 +415,19 @@ impl CookRecipe { Ok(packages.into_iter().map(|p| p.name).collect()) } + + /// returns stage dir, pkgar file and toml file. + pub fn stage_paths(&self) -> (PathBuf, PathBuf, PathBuf) { + let r = self.name.suffix().map(|p| OptionalPackageRecipe { + name: p.to_string(), + ..Default::default() + }); + cook_package::package_stage_paths(r.as_ref(), &self.target_dir()) + } + + pub fn target_dir(&self) -> PathBuf { + self.dir.join("target").join(self.target) + } } #[derive(Serialize, Deserialize)]