in src/main.rs [556:669]
fn cmd_inspect(
out: &Arc<dyn Out>,
cfg: &Config,
sub_args: &InspectArgs,
) -> Result<(), miette::Report> {
let version = &sub_args.version;
let package = &*sub_args.package;
let fetched = {
let network = Network::acquire(cfg);
let store = Store::acquire(cfg, network.as_ref(), false)?;
let cache = Cache::acquire(cfg)?;
// Record this command for magic in `vet certify`
cache.set_last_fetch(FetchCommand::Inspect {
package: package.to_owned(),
version: version.clone(),
});
// Determine the fetch mode to use. We'll need to do a local diff if the
// selected version has a git revision.
let mode = cache.select_fetch_mode(sub_args.mode, version.git_rev.is_some());
if mode != FetchMode::Local {
let url = match mode {
FetchMode::Sourcegraph => {
format!("https://sourcegraph.com/crates/{package}@v{version}")
}
FetchMode::DiffRs => {
format!("https://diff.rs/browse/{package}/{version}/")
}
FetchMode::Local => unreachable!(),
};
tokio::runtime::Handle::current()
.block_on(prompt_criteria_eulas(
out,
cfg,
network.as_ref(),
&store,
package,
None,
version,
Some(&url),
))
.into_diagnostic()?;
open::that(&url).into_diagnostic().wrap_err_with(|| {
format!("Couldn't open {url} in your browser, try --mode=local?")
})?;
writeln!(out, "\nUse |cargo vet certify| to record your audit.");
return Ok(());
}
tokio::runtime::Handle::current().block_on(async {
let (pkg, eulas) = tokio::join!(
async {
// If we're fetching a git revision for inspection, don't
// use fetch_package, as we want to point the user at the
// actual cargo checkout, rather than our repack, which may
// be incomplete, and will be clobbered by GC.
if let Some(git_rev) = &version.git_rev {
storage::locate_local_checkout(&cfg.metadata, package, version).ok_or_else(
|| FetchError::UnknownGitRevision {
package: package.to_owned(),
git_rev: git_rev.to_owned(),
},
)
} else {
cache
.fetch_package(&cfg.metadata, network.as_ref(), package, version)
.await
}
},
prompt_criteria_eulas(
out,
cfg,
network.as_ref(),
&store,
package,
None,
version,
None,
),
);
eulas.into_diagnostic()?;
pkg.into_diagnostic()
})?
};
#[cfg(target_family = "unix")]
if let Some(shell) = std::env::var_os("SHELL") {
// Loosely borrowed from cargo crev.
writeln!(out, "Opening nested shell in: {fetched:#?}");
writeln!(out, "Use `exit` or Ctrl-D to finish.",);
let status = std::process::Command::new(shell)
.current_dir(fetched.clone())
.env("PWD", fetched)
.status()
.map_err(CommandError::CommandFailed)
.into_diagnostic()?;
writeln!(out, "\nUse |cargo vet certify| to record your audit.");
if let Some(code) = status.code() {
panic_any(ExitPanic(code));
}
return Ok(());
}
writeln!(out, " fetched to {fetched:#?}");
writeln!(out, "\nUse |cargo vet certify| to record your audit.");
Ok(())
}