Merge branch 'flatten-recipe-names' into 'master'

Flat out package names when building

See merge request redox-os/redox!1793
This commit is contained in:
Jeremy Soller 2025-12-30 21:18:32 -07:00
commit 542989c469
3 changed files with 47 additions and 21 deletions

View File

@ -10,7 +10,7 @@ use cookbook::cook::pty::{PtyOut, UnixSlavePty, flush_pty, setup_pty};
use cookbook::cook::script::KILL_ALL_PID;
use cookbook::cook::tree::{WalkTreeEntry, display_tree_entry, format_size, walk_tree_entry};
use cookbook::log_to_pty;
use cookbook::recipe::CookRecipe;
use cookbook::recipe::{CookRecipe, recipes_flatten_package_names, recipes_mark_as_deps};
use pkg::PackageName;
use pkg::package::PackageError;
use ratatui::Terminal;
@ -492,12 +492,14 @@ fn parse_args(args: Vec<String>) -> anyhow::Result<(CliConfig, CliCommand, Vec<C
recipe_names = CookRecipe::get_package_deps_recursive(&recipe_names, true)
.context("failed get package deps")?;
}
CookRecipe::get_build_deps_recursive(
&recipe_names,
!command.is_pushing(),
let mut packages =
CookRecipe::get_build_deps_recursive(&recipe_names, !command.is_pushing())?;
if command.is_pushing() || !config.with_package_deps {
// In CliCommand::Cook, is_deps==true will make it skip checking source
command.is_pushing() || !config.with_package_deps,
)?
recipes_mark_as_deps(&recipe_names, &mut packages);
}
packages = recipes_flatten_package_names(packages);
packages
} else {
recipe_names
.iter()

View File

@ -194,8 +194,8 @@ pub fn build(
&recipe.build.dev_dependencies[..],
]
.concat();
let build_deps = CookRecipe::get_build_deps_recursive(&build_deps, false, false)
.map_err(|e| format!("{:?}", e))?;
let build_deps =
CookRecipe::get_build_deps_recursive(&build_deps, false).map_err(|e| format!("{:?}", e))?;
for dependency in build_deps.iter() {
let (_, pkgar, _) = dependency.stage_paths();
if dependency.name.is_host() {

View File

@ -282,7 +282,7 @@ impl CookRecipe {
Self::new(name, dir.to_path_buf(), recipe)
}
pub fn new_recursive(
fn new_recursive(
names: &[PackageName],
recurse_build_deps: bool,
recurse_dev_build_deps: bool,
@ -297,6 +297,7 @@ impl CookRecipe {
}
let mut recipes = Vec::new();
let mut recipes_set = BTreeSet::new();
for name in names {
let recipe = Self::from_name(name.clone())?;
@ -317,7 +318,8 @@ impl CookRecipe {
})?;
for dependency in dependencies {
if !recipes.contains(&dependency) {
if !recipes_set.contains(&dependency.name) {
recipes_set.insert(dependency.name.clone());
recipes.push(dependency);
}
}
@ -340,7 +342,8 @@ impl CookRecipe {
})?;
for dependency in dependencies {
if !recipes.contains(&dependency) {
if !recipes_set.contains(&dependency.name) {
recipes_set.insert(dependency.name.clone());
recipes.push(dependency);
}
}
@ -363,13 +366,15 @@ impl CookRecipe {
})?;
for dependency in dependencies {
if !recipes.contains(&dependency) {
if !recipes_set.contains(&dependency.name) {
recipes_set.insert(dependency.name.clone());
recipes.push(dependency);
}
}
}
if collect_self && !recipes.contains(&recipe) {
if collect_self && !recipes_set.contains(&recipe.name) {
recipes_set.insert(recipe.name.clone());
recipes.push(recipe);
}
}
@ -380,9 +385,8 @@ impl CookRecipe {
pub fn get_build_deps_recursive(
names: &[PackageName],
include_dev: bool,
mark_is_deps: bool,
) -> Result<Vec<Self>, PackageError> {
let mut packages = Self::new_recursive(
let packages = Self::new_recursive(
names,
true,
include_dev,
@ -393,12 +397,6 @@ impl CookRecipe {
WALK_DEPTH,
)?;
if mark_is_deps {
for package in packages.iter_mut() {
package.is_deps = !names.contains(&package.name);
}
}
Ok(packages)
}
@ -473,6 +471,32 @@ impl CookRecipe {
}
}
// TODO: Wrap these vectors in a struct
pub fn recipes_mark_as_deps(names: &[PackageName], packages: &mut Vec<CookRecipe>) {
for package in packages.iter_mut() {
package.is_deps = !names.contains(&package.name);
}
}
pub fn recipes_flatten_package_names(packages: Vec<CookRecipe>) -> Vec<CookRecipe> {
let mut new_packages = Vec::new();
let mut packages_set = BTreeSet::new();
for mut package in packages {
let is_host = package.name.is_host();
let mut name = package.name.with_suffix(None);
if is_host {
name = name.with_host();
}
if !packages_set.contains(name.as_str()) {
packages_set.insert(name.to_string());
package.name = name;
new_packages.push(package);
}
}
new_packages
}
#[derive(Serialize, Deserialize)]
pub struct AutoDeps {
pub packages: BTreeSet<PackageName>,