diff --git a/src/bin/cargo/commands/update.rs b/src/bin/cargo/commands/update.rs
index d72c19cd266..1749de763a7 100644
--- a/src/bin/cargo/commands/update.rs
+++ b/src/bin/cargo/commands/update.rs
@@ -24,9 +24,10 @@ pub fn cli() -> Command {
.arg_dry_run("Don't actually write the lockfile")
.arg(
flag(
- "aggressive",
+ "recursive",
"Force updating all dependencies of [SPEC]... as well",
)
+ .alias("aggressive")
.conflicts_with("precise"),
)
.arg(
@@ -68,7 +69,7 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult {
}
let update_opts = UpdateOptions {
- aggressive: args.flag("aggressive"),
+ recursive: args.flag("recursive"),
precise: args.get_one::("precise").map(String::as_str),
to_update,
dry_run: args.dry_run(),
diff --git a/src/cargo/ops/cargo_generate_lockfile.rs b/src/cargo/ops/cargo_generate_lockfile.rs
index 2bcdcbefd98..265d2a883d4 100644
--- a/src/cargo/ops/cargo_generate_lockfile.rs
+++ b/src/cargo/ops/cargo_generate_lockfile.rs
@@ -14,7 +14,7 @@ pub struct UpdateOptions<'a> {
pub config: &'a Config,
pub to_update: Vec,
pub precise: Option<&'a str>,
- pub aggressive: bool,
+ pub recursive: bool,
pub dry_run: bool,
pub workspace: bool,
}
@@ -38,8 +38,8 @@ pub fn generate_lockfile(ws: &Workspace<'_>) -> CargoResult<()> {
}
pub fn update_lockfile(ws: &Workspace<'_>, opts: &UpdateOptions<'_>) -> CargoResult<()> {
- if opts.aggressive && opts.precise.is_some() {
- anyhow::bail!("cannot specify both aggressive and precise simultaneously")
+ if opts.recursive && opts.precise.is_some() {
+ anyhow::bail!("cannot specify both recursive and precise simultaneously")
}
if ws.members().count() == 0 {
@@ -89,7 +89,7 @@ pub fn update_lockfile(ws: &Workspace<'_>, opts: &UpdateOptions<'_>) -> CargoRes
let mut sources = Vec::new();
for name in opts.to_update.iter() {
let dep = previous_resolve.query(name)?;
- if opts.aggressive {
+ if opts.recursive {
fill_with_deps(&previous_resolve, dep, &mut to_avoid, &mut HashSet::new());
} else {
to_avoid.insert(dep);
diff --git a/src/doc/man/cargo-update.md b/src/doc/man/cargo-update.md
index a24330fad4f..b392b83145f 100644
--- a/src/doc/man/cargo-update.md
+++ b/src/doc/man/cargo-update.md
@@ -33,7 +33,7 @@ will remain locked at their currently recorded versions.
If _spec_ is not specified, all dependencies are updated.
{{/option}}
-{{#option "`--aggressive`" }}
+{{#option "`--recursive`" }}
When used with _spec_, dependencies of _spec_ are forced to update as well.
Cannot be used with `--precise`.
{{/option}}
diff --git a/src/doc/man/generated_txt/cargo-update.txt b/src/doc/man/generated_txt/cargo-update.txt
index c7554c197f1..a96a34c962e 100644
--- a/src/doc/man/generated_txt/cargo-update.txt
+++ b/src/doc/man/generated_txt/cargo-update.txt
@@ -26,7 +26,7 @@ OPTIONS
If spec is not specified, all dependencies are updated.
- --aggressive
+ --recursive
When used with spec, dependencies of spec are forced to update as
well. Cannot be used with --precise.
diff --git a/src/doc/src/commands/cargo-update.md b/src/doc/src/commands/cargo-update.md
index e08f6f91fed..234998faa5e 100644
--- a/src/doc/src/commands/cargo-update.md
+++ b/src/doc/src/commands/cargo-update.md
@@ -31,7 +31,7 @@ will remain locked at their currently recorded versions.
If spec is not specified, all dependencies are updated.
-
--aggressive
+--recursive
When used with spec, dependencies of spec are forced to update as well.
Cannot be used with --precise
.
diff --git a/src/doc/src/reference/resolver.md b/src/doc/src/reference/resolver.md
index 49beb5d60af..7d01fb167ad 100644
--- a/src/doc/src/reference/resolver.md
+++ b/src/doc/src/reference/resolver.md
@@ -342,7 +342,7 @@ instead.
[`cargo update`] can be used to update the entries in `Cargo.lock` when new
versions are published. Without any options, it will attempt to update all
packages in the lock file. The `-p` flag can be used to target the update for
-a specific package, and other flags such as `--aggressive` or `--precise` can
+a specific package, and other flags such as `--recursive` or `--precise` can
be used to control how versions are selected.
[`cargo build`]: ../commands/cargo-build.md
diff --git a/src/etc/_cargo b/src/etc/_cargo
index a017b51c552..8df59b5f380 100644
--- a/src/etc/_cargo
+++ b/src/etc/_cargo
@@ -342,6 +342,7 @@ _cargo() {
update)
_arguments -s -S $common $manifest \
'--aggressive=[force dependency update]' \
+ '--recursive=[force dependency update]' \
"--dry-run[don't actually write the lockfile]" \
'(-p --package)'{-p+,--package=}'[specify package to update]:package:_cargo_package_names' \
'--precise=[update single dependency to precise release]:release' \
diff --git a/src/etc/cargo.bashcomp.sh b/src/etc/cargo.bashcomp.sh
index 33f225ebf39..23f22595b17 100644
--- a/src/etc/cargo.bashcomp.sh
+++ b/src/etc/cargo.bashcomp.sh
@@ -87,7 +87,7 @@ _cargo()
local opt__t="$opt__test"
local opt__tree="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock --target -i --invert --prefix --no-dedupe --duplicates -d --charset -f --format -e --edges"
local opt__uninstall="$opt_common $opt_lock $opt_pkg --bin --root"
- local opt__update="$opt_common $opt_mani $opt_lock $opt_pkg --aggressive --precise --dry-run"
+ local opt__update="$opt_common $opt_mani $opt_lock $opt_pkg --aggressive --recursive --precise --dry-run"
local opt__vendor="$opt_common $opt_mani $opt_lock $opt_sync --no-delete --respect-source-config --versioned-dirs"
local opt__verify_project="$opt_common $opt_mani $opt_lock"
local opt__version="$opt_common $opt_lock"
diff --git a/src/etc/man/cargo-update.1 b/src/etc/man/cargo-update.1
index 0ea8db3a881..c9fe881c8fc 100644
--- a/src/etc/man/cargo-update.1
+++ b/src/etc/man/cargo-update.1
@@ -28,7 +28,7 @@ will remain locked at their currently recorded versions.
If \fIspec\fR is not specified, all dependencies are updated.
.RE
.sp
-\fB\-\-aggressive\fR
+\fB\-\-recursive\fR
.RS 4
When used with \fIspec\fR, dependencies of \fIspec\fR are forced to update as well.
Cannot be used with \fB\-\-precise\fR\&.
diff --git a/tests/testsuite/cargo_update/help/stdout.log b/tests/testsuite/cargo_update/help/stdout.log
index dec044f4b7b..111ee72d4fc 100644
--- a/tests/testsuite/cargo_update/help/stdout.log
+++ b/tests/testsuite/cargo_update/help/stdout.log
@@ -4,7 +4,7 @@ Usage: cargo[EXE] update [OPTIONS] [SPEC]...
Options:
--dry-run Don't actually write the lockfile
- --aggressive Force updating all dependencies of [SPEC]... as well
+ --recursive Force updating all dependencies of [SPEC]... as well
--precise Update [SPEC] to exactly PRECISE
-q, --quiet Do not print cargo log messages
-v, --verbose... Use verbose output (-vv very verbose/build.rs output)
diff --git a/tests/testsuite/git.rs b/tests/testsuite/git.rs
index b47b3986722..7ed9b546cde 100644
--- a/tests/testsuite/git.rs
+++ b/tests/testsuite/git.rs
@@ -769,9 +769,9 @@ Caused by:
.with_stdout("")
.run();
- // Updating aggressively should, however, update the repo.
- println!("dep1 aggressive update");
- p.cargo("update dep1 --aggressive")
+ // Updating recursively should, however, update the repo.
+ println!("dep1 recursive update");
+ p.cargo("update dep1 --recursive")
.with_stderr(&format!(
"[UPDATING] git repository `{}`\n\
[UPDATING] bar v0.5.0 ([..]) -> #[..]\n\
diff --git a/tests/testsuite/update.rs b/tests/testsuite/update.rs
index d7d008b2393..807072eaf6d 100644
--- a/tests/testsuite/update.rs
+++ b/tests/testsuite/update.rs
@@ -428,7 +428,44 @@ fn update_precise_do_not_force_update_deps() {
}
#[cargo_test]
-fn update_aggressive() {
+fn update_recursive() {
+ Package::new("log", "0.1.0").publish();
+ Package::new("serde", "0.2.1").dep("log", "0.1").publish();
+
+ let p = project()
+ .file(
+ "Cargo.toml",
+ r#"
+ [package]
+ name = "bar"
+ version = "0.0.1"
+ authors = []
+
+ [dependencies]
+ serde = "0.2"
+ "#,
+ )
+ .file("src/lib.rs", "")
+ .build();
+
+ p.cargo("check").run();
+
+ Package::new("log", "0.1.1").publish();
+ Package::new("serde", "0.2.2").dep("log", "0.1").publish();
+
+ p.cargo("update serde:0.2.1 --recursive")
+ .with_stderr(
+ "\
+[UPDATING] `[..]` index
+[UPDATING] log v0.1.0 -> v0.1.1
+[UPDATING] serde v0.2.1 -> v0.2.2
+",
+ )
+ .run();
+}
+
+#[cargo_test]
+fn update_aggressive_alias_for_recursive() {
Package::new("log", "0.1.0").publish();
Package::new("serde", "0.2.1").dep("log", "0.1").publish();
@@ -465,7 +502,7 @@ fn update_aggressive() {
}
#[cargo_test]
-fn update_aggressive_conflicts_with_precise() {
+fn update_recursive_conflicts_with_precise() {
Package::new("log", "0.1.0").publish();
Package::new("serde", "0.2.1").dep("log", "0.1").publish();
@@ -490,11 +527,11 @@ fn update_aggressive_conflicts_with_precise() {
Package::new("log", "0.1.1").publish();
Package::new("serde", "0.2.2").dep("log", "0.1").publish();
- p.cargo("update serde:0.2.1 --precise 0.2.2 --aggressive")
+ p.cargo("update serde:0.2.1 --precise 0.2.2 --recursive")
.with_status(1)
.with_stderr(
"\
-error: the argument '--precise ' cannot be used with '--aggressive'
+error: the argument '--precise ' cannot be used with '--recursive'
Usage: cargo[EXE] update --precise ]>