axbuild 0.4.19

An OS build lib toolkit used by arceos
Documentation
mod manifest;
mod refs;
mod selection;

#[cfg(test)]
mod tests;

pub(crate) use refs::changed_paths_since;
pub(crate) use selection::{IncrementalPackageSelection, top_level_affected_workspace_packages};

pub(crate) fn select_incremental_packages(
    workspace_root: &std::path::Path,
    metadata: &cargo_metadata::Metadata,
    workspace_packages: &[cargo_metadata::Package],
    since: &str,
) -> anyhow::Result<IncrementalPackageSelection> {
    match refs::changed_paths_since_with_base(workspace_root, since) {
        Ok((paths, diff_base)) => {
            let root_manifest_change = if paths
                .iter()
                .any(|path| path == std::path::Path::new(manifest::ROOT_MANIFEST))
            {
                Some(manifest::root_manifest_change_since(
                    workspace_root,
                    &diff_base,
                )?)
            } else {
                None
            };

            selection::select_incremental_packages_for_paths_with_root_manifest_change(
                workspace_root,
                metadata,
                workspace_packages,
                paths,
                root_manifest_change,
            )
        }
        Err(err) => Ok(IncrementalPackageSelection::Full {
            reason: format!("failed to diff against `{since}`: {err:#}"),
        }),
    }
}