clean::cli(),
doc::cli(),
fetch::cli(),
- sync_lockfile::cli(),
fix::cli(),
generate_lockfile::cli(),
git_checkout::cli(),
"clean" => clean::exec,
"doc" => doc::exec,
"fetch" => fetch::exec,
- "sync-lockfile" => sync_lockfile::exec,
"fix" => fix::exec,
"generate-lockfile" => generate_lockfile::exec,
"git-checkout" => git_checkout::exec,
pub mod rustc;
pub mod rustdoc;
pub mod search;
-pub mod sync_lockfile;
pub mod test;
pub mod tree;
pub mod uninstall;
+++ /dev/null
-use crate::command_prelude::*;
-
-use cargo::ops;
-use cargo::ops::SyncLockfileOptions;
-
-pub fn cli() -> App {
- subcommand("sync-lockfile")
- .about("Synchronize the lockfile to the package")
- .arg(opt("quiet", "No output printed to stdout").short("q"))
- .arg_manifest_path()
- .arg_target_triple("Sync the lockfile for the target triple")
- .after_help("Run `cargo help sync-lockfile` for more detailed information.\n")
-}
-
-pub fn exec(config: &mut Config, args: &ArgMatches<'_>) -> CliResult {
- let ws = args.workspace(config)?;
-
- let opts = SyncLockfileOptions {
- config,
- targets: args.targets(),
- };
- let _ = ops::sync_lockfile(&ws, &opts)?;
- Ok(())
-}
subcommand("update")
.about("Update dependencies as recorded in the local lock file")
.arg(opt("quiet", "No output printed to stdout").short("q"))
+ .arg(opt("workspace", "Only update the workspace pakcages").short("w"))
.arg_package_spec_simple("Package to update")
.arg(opt(
"aggressive",
precise: args.value_of("precise"),
to_update: values(args, "package"),
dry_run: args.is_present("dry-run"),
+ workspace: args.is_present("workspace"),
config,
};
ops::update_lockfile(&ws, &update_opts)?;
pub precise: Option<&'a str>,
pub aggressive: bool,
pub dry_run: bool,
+ pub workspace: bool,
}
pub fn generate_lockfile(ws: &Workspace<'_>) -> CargoResult<()> {
}
pub fn update_lockfile(ws: &Workspace<'_>, opts: &UpdateOptions<'_>) -> CargoResult<()> {
+ if opts.workspace {
+ if opts.aggressive {
+ anyhow::bail!("cannot specify aggressive for workspace updates");
+ }
+ if opts.precise.is_some() {
+ anyhow::bail!("cannot specify precise for workspace updates");
+ }
+
+ ws.emit_warnings()?;
+ let (_packages, _resolve) = ops::resolve_ws(ws)?;
+ return Ok(())
+ }
+
if opts.aggressive && opts.precise.is_some() {
anyhow::bail!("cannot specify both aggressive and precise simultaneously")
}
pub use self::cargo_pkgid::pkgid;
pub use self::cargo_read_manifest::{read_package, read_packages};
pub use self::cargo_run::run;
-pub use self::cargo_sync_lockfile::{sync_lockfile, SyncLockfileOptions};
pub use self::cargo_test::{run_benches, run_tests, TestOptions};
pub use self::cargo_uninstall::uninstall;
pub use self::fix::{fix, fix_maybe_exec_rustc, FixOptions};
mod cargo_pkgid;
mod cargo_read_manifest;
mod cargo_run;
-mod cargo_sync_lockfile;
mod cargo_test;
mod cargo_uninstall;
mod common_for_install_and_uninstall;
revision (such as a SHA hash or tag).
{{/option}}
+{{#option "`-w`" "`--workspace`" }}
+Attempt to update only packages defined in the workspace. Other packages
+are updated only if they don't already exist in the lockfile. This
+option is useful for updating `Cargo.lock` after you've changed version
+numbers in `Cargo.toml`.
+Cannot be used with `--precise` or `--aggressive`.
+{{/option}}
+
{{#option "`--dry-run`" }}
Displays what would be updated, but doesn't actually write the lockfile.
{{/option}}
to set the package to. If the package comes from a git repository,
this can be a git revision (such as a SHA hash or tag).
+ -w, --workspace
+ Attempt to update only packages defined in the workspace. Other
+ packages are updated only if they don't already exist in the
+ lockfile. This option is useful for updating Cargo.lock after you've
+ changed version numbers in Cargo.toml. Cannot be used with --precise
+ or --aggressive.
+
--dry-run
Displays what would be updated, but doesn't actually write the
lockfile.
revision (such as a SHA hash or tag).</dd>
+<dt class="option-term" id="option-cargo-update--w"><a class="option-anchor" href="#option-cargo-update--w"></a><code>-w</code></dt>
+<dt class="option-term" id="option-cargo-update---workspace"><a class="option-anchor" href="#option-cargo-update---workspace"></a><code>--workspace</code></dt>
+<dd class="option-desc">Attempt to update only packages defined in the workspace. Other packages
+are updated only if they don't already exist in the lockfile. This
+option is useful for updating <code>Cargo.lock</code> after you've changed version
+numbers in <code>Cargo.toml</code>.
+Cannot be used with <code>--precise</code> or <code>--aggressive</code>.</dd>
+
+
<dt class="option-term" id="option-cargo-update---dry-run"><a class="option-anchor" href="#option-cargo-update---dry-run"></a><code>--dry-run</code></dt>
<dd class="option-desc">Displays what would be updated, but doesn't actually write the lockfile.</dd>
revision (such as a SHA hash or tag).
.RE
.sp
+\fB\-w\fR,
+\fB\-\-workspace\fR
+.RS 4
+Attempt to update only packages defined in the workspace. Other packages
+are updated only if they don't already exist in the lockfile. This
+option is useful for updating \fBCargo.lock\fR after you've changed version
+numbers in \fBCargo.toml\fR\&.
+Cannot be used with \fB\-\-precise\fR or \fB\-\-aggressive\fR\&.
+.RE
+.sp
\fB\-\-dry\-run\fR
.RS 4
Displays what would be updated, but doesn't actually write the lockfile.
mod search;
mod shell_quoting;
mod standard_lib;
-mod sync_lockfile;
mod test;
mod timings;
mod tool_paths;
+++ /dev/null
-//! Tests for the `cargo sync-lockfile` command.
-
-use cargo_test_support::project;
-
-#[cargo_test]
-fn sync_after_generate() {
- let p = project().file("src/main.rs", "fn main() {}").build();
- p.cargo("generate-lockfile").run();
- let lock1 = p.read_lockfile();
-
- // add a dep
- p.change_file(
- "Cargo.toml",
- r#"
- [package]
- name = "foo"
- authors = []
- version = "0.0.2"
- "#,
- );
- p.cargo("sync-lockfile").run();
- let lock2 = p.read_lockfile();
- assert_ne!(lock1, lock2);
- assert!(lock1.contains("0.0.1"));
- assert!(lock2.contains("0.0.2"));
- assert!(!lock1.contains("0.0.2"));
- assert!(!lock2.contains("0.0.1"));
-}
let new_lockfile = p.read_lockfile();
assert_eq!(old_lockfile, new_lockfile)
}
+
+#[cargo_test]
+fn workspace_only() {
+ let p = project().file("src/main.rs", "fn main() {}").build();
+ p.cargo("generate-lockfile").run();
+ let lock1 = p.read_lockfile();
+
+ p.change_file(
+ "Cargo.toml",
+ r#"
+ [package]
+ name = "foo"
+ authors = []
+ version = "0.0.2"
+ "#,
+ );
+ p.cargo("update --workspace").run();
+ let lock2 = p.read_lockfile();
+
+ assert_ne!(lock1, lock2);
+ assert!(lock1.contains("0.0.1"));
+ assert!(lock2.contains("0.0.2"));
+ assert!(!lock1.contains("0.0.2"));
+ assert!(!lock2.contains("0.0.1"));
+}