Skip to content

Commit

Permalink
Use cargo-metadata by default (instead of cargo internals) (#134)
Browse files Browse the repository at this point in the history
* Use CargoSubcommandMetadataFetcher by default

* Parameterize CargoSubcommandMetadataFetcher on cargo bin

* Update cargo dependency (and add cargo_platform)

* Fix SourceId parsing (from cargo metadata exec)

* Support forcing cargo-internals mode, support specifying cargo bin path

* fix docopts and reenable format-version

* Fix docopts

* Remove debug stuff

* Minor fix to Options string
  • Loading branch information
acmcarther committed Feb 16, 2020
1 parent c8ba113 commit 816ea69
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 17 deletions.
31 changes: 22 additions & 9 deletions impl/src/bin/cargo-raze.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use docopt::Docopt;

use cargo_raze::{
bazel::BazelRenderer,
metadata::{CargoInternalsMetadataFetcher, CargoWorkspaceFiles},
metadata::{CargoInternalsMetadataFetcher, CargoSubcommandMetadataFetcher, CargoWorkspaceFiles, MetadataFetcher},
planning::{BuildPlanner, BuildPlannerImpl},
rendering::{BuildRenderer, FileOutputs, RenderDetails},
settings::{CargoToml, GenMode, RazeSettings},
Expand All @@ -42,20 +42,26 @@ struct Options {
flag_color: Option<String>,
flag_target: Option<String>,
flag_dryrun: Option<bool>,
flag_deprecated_use_cargo_internals: Option<bool>,
flag_cargo_bin_path: Option<String>,
}

const USAGE: &str = r#"
Generate BUILD files for your pre-vendored Cargo dependencies.
Usage:
cargo raze [--help --verbose --quiet --color WHEN --dryrun]
cargo raze (-h | --help)
cargo raze [--verbose] [--quiet] [--color=<WHEN>] [--dryrun] [--cargo-bin-path=<PATH>] [--deprecated-use-cargo-internals]
cargo raze <buildprefix> [--verbose] [--quiet] [--color=<WHEN>] [--dryrun] [--cargo-bin-path=<PATH>] [--deprecated-use-cargo-internals]
Options:
-h, --help Print this message
-v, --verbose Use verbose output
-q, --quiet No output printed to stdout
--color WHEN Coloring: auto, always, never
-d, --dryrun Do not emit any files
-h, --help Print this message
-v, --verbose Use verbose output
-q, --quiet No output printed to stdout
--color=<WHEN> Coloring: auto, always, never
-d, --dryrun Do not emit any files
--cargo-bin-path=<PATH> Path to the cargo binary to be used for loading workspace metadata
--deprecated-use-cargo-internals Force usage of cargo internals (instead of cargo-metadata)
"#;

fn main() {
Expand Down Expand Up @@ -89,8 +95,15 @@ fn real_main(options: &Options, cargo_config: &mut Config) -> CliResult {

validate_settings(&mut settings)?;

let mut metadata_fetcher = CargoInternalsMetadataFetcher::new(&cargo_config);
let mut planner = BuildPlannerImpl::new(&mut metadata_fetcher);
let mut metadata_fetcher: Box<dyn MetadataFetcher> = if options.flag_deprecated_use_cargo_internals.unwrap_or(false) {
Box::new(CargoInternalsMetadataFetcher::new(cargo_config))
} else {
match options.flag_cargo_bin_path {
Some(ref p) => Box::new(CargoSubcommandMetadataFetcher::new(p)),
None => Box::new(CargoSubcommandMetadataFetcher::default()),
}
};
let mut planner = BuildPlannerImpl::new(&mut* metadata_fetcher);

let toml_path = PathBuf::from("./Cargo.toml");
let lock_path_opt = fs::metadata("./Cargo.lock")
Expand Down
29 changes: 23 additions & 6 deletions impl/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ use tempdir::TempDir;

use serde_derive::{Deserialize, Serialize};

const SYSTEM_CARGO_BIN_PATH: &'static str = "cargo";

pub type PackageId = String;
pub type Kind = String;
pub type TargetSpec = String;
Expand Down Expand Up @@ -158,8 +160,9 @@ pub struct ResolveNode {
}

/** A workspace metadata fetcher that uses the Cargo Metadata subcommand. */
#[allow(dead_code)]
pub struct CargoSubcommandMetadataFetcher;
pub struct CargoSubcommandMetadataFetcher {
cargo_bin_path: PathBuf,
}

/**
* A workspace metadata fetcher that uses Cargo's internals.
Expand All @@ -173,6 +176,20 @@ pub struct CargoInternalsMetadataFetcher<'config> {
cargo_config: &'config Config,
}

impl CargoSubcommandMetadataFetcher {
pub fn new<P: Into<PathBuf>>(cargo_bin_path: P) -> CargoSubcommandMetadataFetcher {
CargoSubcommandMetadataFetcher {
cargo_bin_path: cargo_bin_path.into(),
}
}
}

impl Default for CargoSubcommandMetadataFetcher {
fn default() -> CargoSubcommandMetadataFetcher {
CargoSubcommandMetadataFetcher::new(SYSTEM_CARGO_BIN_PATH)
}
}

impl MetadataFetcher for CargoSubcommandMetadataFetcher {
fn fetch_metadata(&mut self, files: CargoWorkspaceFiles) -> CargoResult<Metadata> {
assert!(files.toml_path.is_file());
Expand All @@ -195,7 +212,7 @@ impl MetadataFetcher for CargoSubcommandMetadataFetcher {
};

// Shell out to cargo
let exec_output = Command::new("cargo")
let exec_output = Command::new(&self.cargo_bin_path)
.current_dir(cargo_tempdir.path())
.args(&["metadata", "--format-version", "1"])
.output()?;
Expand Down Expand Up @@ -488,7 +505,7 @@ dependencies = [
toml_path,
};

let mut fetcher = CargoSubcommandMetadataFetcher;
let mut fetcher = CargoSubcommandMetadataFetcher::default();

fetcher.fetch_metadata(files).unwrap();
}
Expand All @@ -513,7 +530,7 @@ dependencies = [
toml_path,
};

let mut fetcher = CargoSubcommandMetadataFetcher;
let mut fetcher = CargoSubcommandMetadataFetcher::default();

fetcher.fetch_metadata(files).unwrap();
}
Expand All @@ -532,7 +549,7 @@ dependencies = [
toml_path,
};

let mut fetcher = CargoSubcommandMetadataFetcher;
let mut fetcher = CargoSubcommandMetadataFetcher::default();
assert!(fetcher.fetch_metadata(files).is_err());
}
}
3 changes: 1 addition & 2 deletions impl/src/planning.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ use cargo::{
use cargo_platform::Platform;

use itertools::Itertools;
use serde_json;

use crate::{
context::{
Expand Down Expand Up @@ -420,7 +419,7 @@ impl<'planner> WorkspaceSubplanner<'planner> {
let own_source_id = own_package
.source
.as_ref()
.map(|s| serde_json::from_str::<SourceId>(&s).unwrap());
.map(|s| SourceId::from_url(&s).unwrap());

let crate_subplanner = CrateSubplanner {
crate_catalog: &self.crate_catalog,
Expand Down

0 comments on commit 816ea69

Please sign in to comment.