mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
Auto merge of #9185 - horacimacias:master, r=ehuss
Do not exit prematurely if anything failed installing. https://github.com/rust-lang/cargo/issues/9180
This commit is contained in:
commit
37055199b2
@ -119,17 +119,15 @@ pub fn install(
|
||||
// able to run these commands.
|
||||
let dst = root.join("bin").into_path_unlocked();
|
||||
let path = env::var_os("PATH").unwrap_or_default();
|
||||
for path in env::split_paths(&path) {
|
||||
if path == dst {
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
let dst_in_path = env::split_paths(&path).any(|path| path == dst);
|
||||
|
||||
config.shell().warn(&format!(
|
||||
"be sure to add `{}` to your PATH to be \
|
||||
if !dst_in_path {
|
||||
config.shell().warn(&format!(
|
||||
"be sure to add `{}` to your PATH to be \
|
||||
able to run the installed binaries",
|
||||
dst.display()
|
||||
))?;
|
||||
dst.display()
|
||||
))?;
|
||||
}
|
||||
}
|
||||
|
||||
if scheduled_error {
|
||||
|
@ -14,6 +14,8 @@ use cargo_test_support::install::{
|
||||
assert_has_installed_exe, assert_has_not_installed_exe, cargo_home,
|
||||
};
|
||||
use cargo_test_support::paths;
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
|
||||
fn pkg(name: &str, vers: &str) {
|
||||
Package::new(name, vers)
|
||||
@ -129,6 +131,65 @@ fn multiple_pkgs() {
|
||||
assert_has_not_installed_exe(cargo_home(), "bar");
|
||||
}
|
||||
|
||||
fn path() -> Vec<PathBuf> {
|
||||
env::split_paths(&env::var_os("PATH").unwrap_or_default()).collect()
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn multiple_pkgs_path_set() {
|
||||
// confirm partial failure results in 101 status code and does not have the
|
||||
// '[WARNING] be sure to add `[..]` to your PATH to be able to run the installed binaries'
|
||||
// even if CARGO_HOME/bin is in the PATH
|
||||
pkg("foo", "0.0.1");
|
||||
pkg("bar", "0.0.2");
|
||||
|
||||
// add CARGO_HOME/bin to path
|
||||
let mut path = path();
|
||||
path.push(cargo_home().join("bin"));
|
||||
let new_path = env::join_paths(path).unwrap();
|
||||
cargo_process("install foo bar baz")
|
||||
.env("PATH", new_path)
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[UPDATING] `[..]` index
|
||||
[DOWNLOADING] crates ...
|
||||
[DOWNLOADED] foo v0.0.1 (registry `[CWD]/registry`)
|
||||
[INSTALLING] foo v0.0.1
|
||||
[COMPILING] foo v0.0.1
|
||||
[FINISHED] release [optimized] target(s) in [..]
|
||||
[INSTALLING] [CWD]/home/.cargo/bin/foo[EXE]
|
||||
[INSTALLED] package `foo v0.0.1` (executable `foo[EXE]`)
|
||||
[DOWNLOADING] crates ...
|
||||
[DOWNLOADED] bar v0.0.2 (registry `[CWD]/registry`)
|
||||
[INSTALLING] bar v0.0.2
|
||||
[COMPILING] bar v0.0.2
|
||||
[FINISHED] release [optimized] target(s) in [..]
|
||||
[INSTALLING] [CWD]/home/.cargo/bin/bar[EXE]
|
||||
[INSTALLED] package `bar v0.0.2` (executable `bar[EXE]`)
|
||||
[ERROR] could not find `baz` in registry `[..]` with version `*`
|
||||
[SUMMARY] Successfully installed foo, bar! Failed to install baz (see error(s) above).
|
||||
[ERROR] some crates failed to install
|
||||
",
|
||||
)
|
||||
.run();
|
||||
assert_has_installed_exe(cargo_home(), "foo");
|
||||
assert_has_installed_exe(cargo_home(), "bar");
|
||||
|
||||
cargo_process("uninstall foo bar")
|
||||
.with_stderr(
|
||||
"\
|
||||
[REMOVING] [CWD]/home/.cargo/bin/foo[EXE]
|
||||
[REMOVING] [CWD]/home/.cargo/bin/bar[EXE]
|
||||
[SUMMARY] Successfully uninstalled foo, bar!
|
||||
",
|
||||
)
|
||||
.run();
|
||||
|
||||
assert_has_not_installed_exe(cargo_home(), "foo");
|
||||
assert_has_not_installed_exe(cargo_home(), "bar");
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn pick_max_version() {
|
||||
pkg("foo", "0.1.0");
|
||||
|
Loading…
x
Reference in New Issue
Block a user