use std::path::Path;
use std::process::Command;
pub fn cargo_metadata_command(
workspace_root: &Path,
no_deps: bool,
format_version: u64,
) -> Command {
let mut cmd = Command::new("cargo");
cmd.arg("metadata")
.arg(format!("--format-version={format_version}"));
if no_deps {
cmd.arg("--no-deps");
}
cmd.current_dir(workspace_root);
cmd
}
#[cfg(test)]
mod tests {
use super::*;
use std::ffi::OsStr;
#[test]
fn cargo_metadata_command_argv_matches_tool_defaults() {
let root = Path::new("/tmp/workspace");
let cmd = cargo_metadata_command(root, true, 1);
assert_eq!(cmd.get_program(), OsStr::new("cargo"));
let args: Vec<_> = cmd.get_args().collect();
assert_eq!(
args,
vec![
OsStr::new("metadata"),
OsStr::new("--format-version=1"),
OsStr::new("--no-deps"),
]
);
assert_eq!(cmd.get_current_dir(), Some(root));
}
#[test]
fn cargo_metadata_command_without_no_deps() {
let root = Path::new("/ws");
let cmd = cargo_metadata_command(root, false, 1);
let args: Vec<_> = cmd.get_args().collect();
assert_eq!(
args,
vec![OsStr::new("metadata"), OsStr::new("--format-version=1"),]
);
}
}