Skip to content

Commit

Permalink
Run cargo commands in current directory, rely on --manifest-path
Browse files Browse the repository at this point in the history
  • Loading branch information
cormacrelf committed Jan 10, 2025
1 parent d5bab47 commit ff54623
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 42 deletions.
23 changes: 10 additions & 13 deletions src/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,8 @@ pub fn cargo_get_lockfile_and_metadata(
lockfile = Some(Lockfile::load(paths)?);
};

let metadata: Metadata = run_cargo_json(
config,
cargo_home,
&paths.third_party_dir,
args,
&cargo_flags,
)
.context("parsing metadata")?;
let metadata: Metadata =
run_cargo_json(config, cargo_home, None, args, &cargo_flags).context("parsing metadata")?;

let lockfile = match lockfile {
Some(existing_lockfile) => existing_lockfile,
Expand All @@ -101,7 +95,7 @@ pub fn cargo_get_lockfile_and_metadata(
pub(crate) fn run_cargo(
config: &Config,
cargo_home: Option<&Path>,
current_dir: &Path,
current_dir: Option<&Path>,
args: &Args,
opts: &[&str],
) -> anyhow::Result<Vec<u8>> {
Expand All @@ -118,9 +112,9 @@ pub(crate) fn run_cargo(
}

log::debug!(
"Running Cargo command {:?} in {}",
"Running Cargo command {:?} in dir {:?}",
cmdline,
current_dir.display()
current_dir
);

let mut cargo_command = if let Some(cargo_path) = args.cargo_path.as_ref() {
Expand Down Expand Up @@ -156,8 +150,11 @@ pub(crate) fn run_cargo(
cargo_command.env("CARGO_HOME", cargo_home);
}

if let Some(current_dir) = current_dir {
cargo_command.current_dir(current_dir);
}

cargo_command
.current_dir(current_dir)
.args(&cmdline)
.envs(envs)
.stdout(Stdio::piped())
Expand Down Expand Up @@ -208,7 +205,7 @@ pub(crate) fn run_cargo(
pub(crate) fn run_cargo_json<T: DeserializeOwned>(
config: &Config,
cargo_home: Option<&Path>,
current_dir: &Path,
current_dir: Option<&Path>,
args: &Args,
opts: &[&str],
) -> anyhow::Result<T> {
Expand Down
26 changes: 13 additions & 13 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ pub struct Args {
third_party_dir: PathBuf,
#[command(subcommand)]
subcommand: SubCommand,
#[arg(long, default_value = None)]
manifest_path: Option<PathBuf>,
}

#[derive(Debug, Subcommand)]
Expand Down Expand Up @@ -110,9 +112,13 @@ fn try_main() -> anyhow::Result<()> {
let third_party_dir = dunce::canonicalize(&args.third_party_dir)?;
let mut config = config::read_config(&third_party_dir)?;

let manifest_path = args
.manifest_path
.clone()
.unwrap_or_else(|| third_party_dir.join("Cargo.toml"));
let paths = Paths {
manifest_path: third_party_dir.join("Cargo.toml"),
lockfile_path: third_party_dir.join("Cargo.lock"),
lockfile_path: manifest_path.with_file_name("Cargo.lock"),
manifest_path,
cargo_home: third_party_dir.join(".cargo"),
third_party_dir,
};
Expand All @@ -133,17 +139,11 @@ fn try_main() -> anyhow::Result<()> {
}

SubCommand::Update { .. } => {
let _ = cargo::run_cargo(
&config,
Some(&paths.cargo_home),
&paths.third_party_dir,
&args,
&[
"generate-lockfile",
"--manifest-path",
paths.manifest_path.to_str().unwrap(),
],
)?;
let _ = cargo::run_cargo(&config, Some(&paths.cargo_home), None, &args, &[
"generate-lockfile",
"--manifest-path",
paths.manifest_path.to_str().unwrap(),
])?;
}

SubCommand::Buckify { stdout } => {
Expand Down
21 changes: 5 additions & 16 deletions src/vendor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,26 +43,21 @@ pub(crate) fn cargo_vendor(
paths: &Paths,
) -> anyhow::Result<()> {
let vendordir = Path::new("vendor"); // relative to third_party_dir
let full_vendor_dir = paths.third_party_dir.join("vendor");

if let VendorConfig::LocalRegistry = config.vendor {
let mut cmdline = vec![
"local-registry",
"-s",
paths.lockfile_path.to_str().unwrap(),
vendordir.to_str().unwrap(),
full_vendor_dir.to_str().unwrap(),
"--git",
];
if no_delete {
cmdline.push("--no-delete");
}
log::info!("Running cargo {:?}", cmdline);
let _ = cargo::run_cargo(
config,
Some(&paths.cargo_home),
&paths.third_party_dir,
args,
&cmdline,
)?;
let _ = cargo::run_cargo(config, Some(&paths.cargo_home), None, args, &cmdline)?;
let mut remap = RemapConfig::default();
remap.sources.insert("crates-io".to_owned(), RemapSource {
registry: Some("sparse+https://index.crates.io/".to_owned()),
Expand All @@ -83,7 +78,7 @@ pub(crate) fn cargo_vendor(
"vendor",
"--manifest-path",
paths.manifest_path.to_str().unwrap(),
vendordir.to_str().unwrap(),
full_vendor_dir.to_str().unwrap(),
"--versioned-dirs",
];
if no_delete {
Expand All @@ -93,13 +88,7 @@ pub(crate) fn cargo_vendor(
fs::create_dir_all(&paths.cargo_home)?;

log::info!("Running cargo {:?}", cmdline);
let cargoconfig = cargo::run_cargo(
config,
Some(&paths.cargo_home),
&paths.third_party_dir,
args,
&cmdline,
)?;
let cargoconfig = cargo::run_cargo(config, Some(&paths.cargo_home), None, args, &cmdline)?;

fs::write(paths.cargo_home.join("config.toml"), &cargoconfig)?;
if !cargoconfig.is_empty() {
Expand Down

0 comments on commit ff54623

Please sign in to comment.