Skip to content

Commit

Permalink
Fix use with Bazel
Browse files Browse the repository at this point in the history
When the application is built with Bazel as build system, environment
variables like CARGO_MANIFEST_DIR, etc. are set for compatibility, but
CARGO itself isn't, because Bazel is the tool of choice. Therefore any
attempt to invoke Cargo to locate the workspace manifest path fails.

As a fallback, a lack of the CARGO environment variable now just means
no workspace support.
  • Loading branch information
tronical committed Jan 5, 2025
1 parent a12fb32 commit db99213
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ use toml_edit::{DocumentMut, Item, Table, TomlError};
pub enum Error {
NotFound(PathBuf),
CargoManifestDirNotSet,
CargoEnvVariableNotSet,
FailedGettingWorkspaceManifestPath,
CouldNotRead { path: PathBuf, source: io::Error },
InvalidToml { source: TomlError },
Expand Down Expand Up @@ -138,7 +137,6 @@ impl fmt::Display for Error {
crate_name,
path.display(),
),
Error::CargoEnvVariableNotSet => f.write_str("`CARGO` env variable not set."),
Error::FailedGettingWorkspaceManifestPath =>
f.write_str("Failed to get the path of the workspace manifest path."),
}
Expand Down Expand Up @@ -241,7 +239,11 @@ pub fn crate_name(orig_name: &str) -> Result<FoundCrate, Error> {
}

fn workspace_manifest_path(cargo_toml_manifest: &Path) -> Result<Option<PathBuf>, Error> {
let stdout = Command::new(env::var("CARGO").map_err(|_| Error::CargoEnvVariableNotSet)?)
let Ok(cargo) = env::var("CARGO") else {
return Ok(None);
};

let stdout = Command::new(cargo)
.arg("locate-project")
.args(&["--workspace", "--message-format=plain"])
.arg(format!("--manifest-path={}", cargo_toml_manifest.display()))
Expand Down

0 comments on commit db99213

Please # to comment.