mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-12 14:56:48 +00:00
Don't inherit OSDK manifest values from workspace root
This commit is contained in:
parent
c2a8342752
commit
cad36ecdab
@ -15,10 +15,10 @@ one is of the workspace
|
|||||||
(in the same directory as the workspace's `Cargo.toml`)
|
(in the same directory as the workspace's `Cargo.toml`)
|
||||||
and one of the crate
|
and one of the crate
|
||||||
(in the same directory as the crate's `Cargo.toml`).
|
(in the same directory as the crate's `Cargo.toml`).
|
||||||
OSDK will first refer to the crate-level manifest, then
|
OSDK will firstly try to find the crate-level manifest.
|
||||||
query the workspace-level manifest for undefined fields.
|
If the crate-level manifest is found, OSDK uses it only.
|
||||||
In other words, missing fields of the crate manifest
|
If the manifest is not found, OSDK will look into the
|
||||||
will inherit values from the workspace manifest.
|
workspace-level manifest.
|
||||||
|
|
||||||
## Configurations
|
## Configurations
|
||||||
|
|
||||||
|
2
osdk/Cargo.lock
generated
2
osdk/Cargo.lock
generated
@ -146,7 +146,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cargo-osdk"
|
name = "cargo-osdk"
|
||||||
version = "0.6.2"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -50,60 +50,33 @@ impl TomlManifest {
|
|||||||
.unwrap(),
|
.unwrap(),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
// All the custom schemes should inherit settings from the default scheme, this is a helper.
|
|
||||||
fn finalize(current_manifest: Option<TomlManifest>) -> TomlManifest {
|
|
||||||
let Some(mut current_manifest) = current_manifest else {
|
|
||||||
error_msg!(
|
|
||||||
"Cannot find `OSDK.toml` in the current directory or the workspace root"
|
|
||||||
);
|
|
||||||
process::exit(Errno::GetMetadata as _);
|
|
||||||
};
|
|
||||||
for scheme in current_manifest.map.values_mut() {
|
|
||||||
scheme.inherit(¤t_manifest.default_scheme);
|
|
||||||
}
|
|
||||||
current_manifest
|
|
||||||
}
|
|
||||||
|
|
||||||
// Search for OSDK.toml in the current directory first.
|
// Search for OSDK.toml in the current directory first.
|
||||||
let current_manifest_path = PathBuf::from("OSDK.toml").canonicalize().ok();
|
let current_manifest_path = PathBuf::from("OSDK.toml").canonicalize();
|
||||||
let mut current_manifest = match ¤t_manifest_path {
|
let current_manifest = match ¤t_manifest_path {
|
||||||
Some(path) => deserialize_toml_manifest(path),
|
Ok(path) => deserialize_toml_manifest(path),
|
||||||
None => None,
|
Err(_) => {
|
||||||
};
|
// If not found, search in the workspace root.
|
||||||
// Then search in the workspace root.
|
if let Ok(workspace_manifest_path) = workspace_root.join("OSDK.toml").canonicalize()
|
||||||
let workspace_manifest_path = workspace_root.join("OSDK.toml").canonicalize().ok();
|
{
|
||||||
// The case that the current directory is also the workspace root.
|
deserialize_toml_manifest(workspace_manifest_path)
|
||||||
if let Some(current) = ¤t_manifest_path {
|
} else {
|
||||||
if let Some(workspace) = &workspace_manifest_path {
|
None
|
||||||
if current == workspace {
|
|
||||||
return finalize(current_manifest);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
let workspace_manifest = match workspace_manifest_path {
|
|
||||||
Some(path) => deserialize_toml_manifest(path),
|
|
||||||
None => None,
|
|
||||||
};
|
};
|
||||||
// The current manifest should inherit settings from the workspace manifest.
|
|
||||||
if let Some(workspace_manifest) = workspace_manifest {
|
let Some(mut current_manifest) = current_manifest else {
|
||||||
if current_manifest.is_none() {
|
error_msg!("Cannot find `OSDK.toml` in the current directory or the workspace root");
|
||||||
current_manifest = Some(workspace_manifest);
|
process::exit(Errno::GetMetadata as _);
|
||||||
} else {
|
};
|
||||||
// Inherit one scheme at a time.
|
|
||||||
let current_manifest = current_manifest.as_mut().unwrap();
|
// All the schemes should inherit from the default scheme.
|
||||||
current_manifest
|
for scheme in current_manifest.map.values_mut() {
|
||||||
.default_scheme
|
scheme.inherit(¤t_manifest.default_scheme);
|
||||||
.inherit(&workspace_manifest.default_scheme);
|
|
||||||
for (scheme_string, scheme) in workspace_manifest.map {
|
|
||||||
let current_scheme = current_manifest
|
|
||||||
.map
|
|
||||||
.entry(scheme_string)
|
|
||||||
.or_insert_with(Scheme::empty);
|
|
||||||
current_scheme.inherit(&scheme);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finalize(current_manifest)
|
|
||||||
|
current_manifest
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the scheme given the scheme from the command line arguments.
|
/// Get the scheme given the scheme from the command line arguments.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user