diff --git a/src/bin/cargo/commands/install.rs b/src/bin/cargo/commands/install.rs index ffe09b66f70..b806fc2cabe 100644 --- a/src/bin/cargo/commands/install.rs +++ b/src/bin/cargo/commands/install.rs @@ -68,15 +68,16 @@ pub fn cli() -> App { ) .after_help( "\ -This command manages Cargo's local set of installed binary crates. Only packages -which have [[bin]] targets can be installed, and all binaries are installed into -the installation root's `bin` folder. The installation root is determined, in -order of precedence, by `--root`, `$CARGO_INSTALL_ROOT`, the `install.root` -configuration key, and finally the home directory (which is either -`$CARGO_HOME` if set or `$HOME/.cargo` by default). +This command manages Cargo's local set of installed binary crates. Only +packages which have executable [[bin]] or [[example]] targets can be +installed, and all executables are installed into the installation root's +`bin` folder. The installation root is determined, in order of precedence, by +`--root`, `$CARGO_INSTALL_ROOT`, the `install.root` configuration key, and +finally the home directory (which is either `$CARGO_HOME` if set or +`$HOME/.cargo` by default). There are multiple sources from which a crate can be installed. The default -location is crates.io but the `--git`, `--path`, and `registry` flags can +location is crates.io but the `--git`, `--path`, and `--registry` flags can change this source. If the source contains more than one package (such as crates.io or a git repository with multiple crates) the `` argument is required to indicate which crate should be installed. diff --git a/src/cargo/core/features.rs b/src/cargo/core/features.rs index ccb4808ee2e..1670e05aef8 100644 --- a/src/cargo/core/features.rs +++ b/src/cargo/core/features.rs @@ -186,6 +186,7 @@ features! { [stable] rename_dependency: bool, // Whether a lock file is published with this crate + // This is deprecated, and will likely be removed in a future version. [unstable] publish_lockfile: bool, // Overriding profiles for dependencies. diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index 37a78c82828..44fae99ec8c 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -478,9 +478,6 @@ impl Manifest { pub fn publish(&self) -> &Option> { &self.publish } - pub fn publish_lockfile(&self) -> bool { - self.publish_lockfile - } pub fn replace(&self) -> &[(PackageIdSpec, Dependency)] { &self.replace } diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index eb61aa14e14..b63a6d23380 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -240,8 +240,7 @@ impl Package { /// Returns if package should include `Cargo.lock`. pub fn include_lockfile(&self) -> bool { - self.manifest().publish_lockfile() - && self.targets().iter().any(|t| t.is_example() || t.is_bin()) + self.targets().iter().any(|t| t.is_example() || t.is_bin()) } } diff --git a/src/cargo/ops/cargo_package.rs b/src/cargo/ops/cargo_package.rs index cb60567b324..afb00edd63f 100644 --- a/src/cargo/ops/cargo_package.rs +++ b/src/cargo/ops/cargo_package.rs @@ -42,8 +42,12 @@ pub struct PackageOpts<'cfg> { static VCS_INFO_FILE: &'static str = ".cargo_vcs_info.json"; pub fn package(ws: &Workspace<'_>, opts: &PackageOpts<'_>) -> CargoResult> { - // Make sure the Cargo.lock is up-to-date and valid. - ops::resolve_ws(ws)?; + if ws.root().join("Cargo.lock").exists() { + // Make sure the Cargo.lock is up-to-date and valid. + ops::resolve_ws(ws)?; + // If Cargo.lock does not exist, it will be generated by `build_lock` + // below, and will be validated during the verification step. + } let pkg = ws.current()?; let config = ws.config(); @@ -615,7 +619,7 @@ fn run_verify(ws: &Workspace<'_>, tar: &FileLock, opts: &PackageOpts<'_>) -> Car }; let exec: Arc = Arc::new(DefaultExecutor); - ops::compile_ws( + ops::compile_with_exec( &ws, &ops::CompileOptions { config, diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 13ed058ace6..bc72f785a88 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -1034,6 +1034,11 @@ impl TomlManifest { let publish_lockfile = match project.publish_lockfile { Some(b) => { features.require(Feature::publish_lockfile())?; + warnings.push( + "The `publish-lockfile` feature is deprecated and currently \ + has no effect. It may be removed in a future version." + .to_string(), + ); b } None => features.is_enabled(Feature::publish_lockfile()), diff --git a/src/doc/man/cargo-install.adoc b/src/doc/man/cargo-install.adoc index 88facd28465..fef7b250d18 100644 --- a/src/doc/man/cargo-install.adoc +++ b/src/doc/man/cargo-install.adoc @@ -17,14 +17,15 @@ cargo-install - Build and install a Rust binary == DESCRIPTION -This command manages Cargo's local set of installed binary crates. Only packages -which have `\[[bin]]` targets can be installed, and all binaries are installed into -the installation root's `bin` folder. +This command manages Cargo's local set of installed binary crates. Only +packages which have executable `\[[bin]]` or `\[[example]]` targets can be +installed, and all executables are installed into the installation root's +`bin` folder. include::description-install-root.adoc[] There are multiple sources from which a crate can be installed. The default -location is crates.io but the `--git`, `--path`, and `registry` flags can +location is crates.io but the `--git`, `--path`, and `--registry` flags can change this source. If the source contains more than one package (such as crates.io or a git repository with multiple crates) the _CRATE_ argument is required to indicate which crate should be installed. @@ -42,6 +43,20 @@ specified by setting the `CARGO_TARGET_DIR` environment variable to a relative path. In particular, this can be useful for caching build artifacts on continuous integration systems. +By default, the `Cargo.lock` file that is included with the package will be +ignored. This means that Cargo will recompute which versions of dependencies +to use, possibly using newer versions that have been released since the +package was published. The `--locked` flag can be used to force Cargo to use +the packaged `Cargo.lock` file if it is available. This may be useful for +ensuring reproducible builds, to use the exact same set of dependencies that +were available when the package was published. It may also be useful if a +newer version of a dependency is published that no longer builds on your +system, or has other problems. The downside to using `--locked` is that you +will not receive any fixes or updates to any dependency. Note that Cargo did +not start publishing `Cargo.lock` files until version 1.37, which means +packages published with prior versions will not have a `Cargo.lock` file +available. + == OPTIONS === Install Options diff --git a/src/doc/man/cargo-package.adoc b/src/doc/man/cargo-package.adoc index 26eed2b1324..0c1b5ac97c6 100644 --- a/src/doc/man/cargo-package.adoc +++ b/src/doc/man/cargo-package.adoc @@ -25,6 +25,9 @@ steps: - The original `Cargo.toml` file is rewritten and normalized. - `[patch]`, `[replace]`, and `[workspace]` sections are removed from the manifest. + - `Cargo.lock` is automatically included if the package contains an + executable binary or example target. man:cargo-install[1] will use the + packaged lock file if the `--locked` flag is used. - A `.cargo_vcs_info.json` file is included that contains information about the current VCS checkout hash if available (not included with `--allow-dirty`). diff --git a/src/doc/man/generated/cargo-install.html b/src/doc/man/generated/cargo-install.html index a9dcc48d6ae..922eedab8df 100644 --- a/src/doc/man/generated/cargo-install.html +++ b/src/doc/man/generated/cargo-install.html @@ -17,9 +17,10 @@

SYNOPSIS

DESCRIPTION

-

This command manages Cargo’s local set of installed binary crates. Only packages -which have [[bin]] targets can be installed, and all binaries are installed into -the installation root’s bin folder.

+

This command manages Cargo’s local set of installed binary crates. Only +packages which have executable [[bin]] or [[example]] targets can be +installed, and all executables are installed into the installation root’s +bin folder.

The installation root is determined, in order of precedence:

@@ -45,7 +46,7 @@

DESCRIPTION

There are multiple sources from which a crate can be installed. The default -location is crates.io but the --git, --path, and registry flags can +location is crates.io but the --git, --path, and --registry flags can change this source. If the source contains more than one package (such as crates.io or a git repository with multiple crates) the CRATE argument is required to indicate which crate should be installed.

@@ -65,6 +66,21 @@

DESCRIPTION

path. In particular, this can be useful for caching build artifacts on continuous integration systems.

+
+

By default, the Cargo.lock file that is included with the package will be +ignored. This means that Cargo will recompute which versions of dependencies +to use, possibly using newer versions that have been released since the +package was published. The --locked flag can be used to force Cargo to use +the packaged Cargo.lock file if it is available. This may be useful for +ensuring reproducible builds, to use the exact same set of dependencies that +were available when the package was published. It may also be useful if a +newer version of a dependency is published that no longer builds on your +system, or has other problems. The downside to using --locked is that you +will not receive any fixes or updates to any dependency. Note that Cargo did +not start publishing Cargo.lock files until version 1.37, which means +packages published with prior versions will not have a Cargo.lock file +available.

+
diff --git a/src/doc/man/generated/cargo-package.html b/src/doc/man/generated/cargo-package.html index 8567c35b825..d6ed1cc7070 100644 --- a/src/doc/man/generated/cargo-package.html +++ b/src/doc/man/generated/cargo-package.html @@ -44,6 +44,11 @@

DESCRIPTION

manifest.

  • +

    Cargo.lock is automatically included if the package contains an +executable binary or example target. cargo-install(1) will use the +packaged lock file if the --locked flag is used.

    +
  • +
  • A .cargo_vcs_info.json file is included that contains information about the current VCS checkout hash if available (not included with --allow-dirty).

    diff --git a/src/doc/src/reference/publishing.md b/src/doc/src/reference/publishing.md index ac1a03a1aa7..8a63786313a 100644 --- a/src/doc/src/reference/publishing.md +++ b/src/doc/src/reference/publishing.md @@ -13,7 +13,7 @@ limit to the number of versions which can be published, however. First thing’s first, you’ll need an account on [crates.io] to acquire an API token. To do so, [visit the home page][crates.io] and log in via a GitHub account (required for now). After this, visit your [Account -Settings](https://crates.io/me) page and run the `cargo login` command +Settings](https://crates.io/me) page and run the [`cargo login`] command specified. ```console @@ -21,42 +21,71 @@ $ cargo login abcdefghijklmnopqrstuvwxyz012345 ``` This command will inform Cargo of your API token and store it locally in your -`~/.cargo/credentials` (previously it was `~/.cargo/config`). Note that this -token is a **secret** and should not be shared with anyone else. If it leaks for -any reason, you should regenerate it immediately. +`~/.cargo/credentials`. Note that this token is a **secret** and should not be +shared with anyone else. If it leaks for any reason, you should regenerate it +immediately. ### Before publishing a new crate Keep in mind that crate names on [crates.io] are allocated on a first-come-first- serve basis. Once a crate name is taken, it cannot be used for another crate. +Check out the [metadata you can +specify](reference/manifest.html#package-metadata) in `Cargo.toml` to ensure +your crate can be discovered more easily! Before publishing, make sure you have +filled out the following fields: + +- `authors` +- `license` or `license-file` +- `description` +- `homepage` +- `documentation` +- `repository` + +It would also be a good idea to include some `keywords` and `categories`, +though they are not required. + +If you are publishing a library, you may also want to consult the [Rust API +Guidelines]. + #### Packaging a crate -The next step is to package up your crate into a format that can be uploaded to -[crates.io]. For this we’ll use the `cargo package` subcommand. This will take -our entire crate and package it all up into a `*.crate` file in the -`target/package` directory. +The next step is to package up your crate and upload it to [crates.io]. For +this we’ll use the [`cargo publish`] subcommand. This command performs the following +steps: + +1. Perform some verification checks on your package. +2. Compress your source code into a `.crate` file. +3. Extract the `.crate` file into a temporary directory and verify that it + compiles. +4. Upload the `.crate` file to [crates.io]. +5. The registry will perform some additional checks on the uploaded package + before adding it. + +It is recommended that you first run `cargo publish --dry-run` (or [`cargo +package`] which is equivalent) to ensure there aren't any warnings or errors +before publishing. This will perform the first three steps listed above. ```console -$ cargo package +$ cargo publish --dry-run ``` -As an added bonus, the `*.crate` will be verified independently of the current -source tree. After the `*.crate` is created, it’s unpacked into -`target/package` and then built from scratch to ensure that all necessary files -are there for the build to succeed. This behavior can be disabled with the -`--no-verify` flag. +You can inspect the generated `.crate` file in the `target/package` directory. +[crates.io] currently has a 10MB size limit on the `.crate` file. You may want +to check the size of the `.crate` file to ensure you didn't accidentally +package up large assets that are not required to build your package, such as +test data, website documentation, or code generation. You can check which +files are included with the following command: -Now’s a good time to take a look at the `*.crate` file to make sure you didn’t -accidentally package up that 2GB video asset, or large data files used for code -generation, integration tests, or benchmarking. There is currently a 10MB -upload size limit on `*.crate` files. So, if the size of `tests` and `benches` -directories and their dependencies are up to a couple of MBs, you can keep them -in your package; otherwise, better to exclude them. +```console +$ cargo package --list +``` Cargo will automatically ignore files ignored by your version control system when packaging, but if you want to specify an extra set of files to ignore you -can use the `exclude` key in the manifest: +can use the [`exclude` +key](reference/manifest.html#the-exclude-and-include-fields-optional) in the +manifest: ```toml [package] @@ -67,10 +96,8 @@ exclude = [ ] ``` -The syntax of each element in this array is what -[rust-lang/glob](https://github.com/rust-lang/glob) accepts. If you’d rather -roll with a whitelist instead of a blacklist, Cargo also supports an `include` -key, which if set, overrides the `exclude` key: +If you’d rather explicitly list the files to include, Cargo also supports an +`include` key, which if set, overrides the `exclude` key: ```toml [package] @@ -83,28 +110,22 @@ include = [ ### Uploading the crate -Now that we’ve got a `*.crate` file ready to go, it can be uploaded to -[crates.io] with the `cargo publish` command. And that’s it, you’ve now published -your first crate! +When you are ready to publish, use the [`cargo publish`] command +to upload to [crates.io]: ```console $ cargo publish ``` -If you’d like to skip the `cargo package` step, the `cargo publish` subcommand -will automatically package up the local crate if a copy isn’t found already. - -Be sure to check out the [metadata you can -specify](reference/manifest.html#package-metadata) to ensure your crate can be -discovered more easily! +And that’s it, you’ve now published your first crate! ### Publishing a new version of an existing crate -In order to release a new version, change the `version` value specified in your -`Cargo.toml` manifest. Keep in mind [the semver -rules](reference/manifest.html#the-version-field). Then optionally run `cargo package` if -you want to inspect the `*.crate` file for the new version before publishing, -and run `cargo publish` to upload the new version. +In order to release a new version, change the `version` value specified in +your `Cargo.toml` manifest. Keep in mind [the semver +rules](reference/manifest.html#the-version-field), and consult [RFC 1105] for +what constitutes a semver-breaking change. Then run [`cargo publish`] as +described above to upload the new version. ### Managing a crates.io-based crate @@ -176,7 +197,7 @@ is likely for you to encounter the following message when working with them: > It looks like you don’t have permission to query a necessary property from GitHub to complete this request. You may need to re-authenticate on [crates.io] to grant permission to read GitHub org memberships. Just go to -https://crates.io/login +. This is basically a catch-all for “you tried to query a team, and one of the five levels of membership access control denied this”. That is not an @@ -195,7 +216,7 @@ you will get the error above. You may also see this error if you ever try to publish a crate that you don’t own at all, but otherwise happens to have a team. If you ever change your mind, or just aren’t sure if [crates.io] has sufficient -permission, you can always go to https://crates.io/login, which will prompt you +permission, you can always go to , which will prompt you for permission if [crates.io] doesn’t have all the scopes it would like to. An additional barrier to querying GitHub is that the organization may be @@ -218,5 +239,11 @@ the “Grant Access” button next to its name: ![Authentication Access Control](images/auth-level-acl.png) +[RFC 1105]: https://github.com/rust-lang/rfcs/blob/master/text/1105-api-evolution.md +[Rust API Guidelines]: https://rust-lang-nursery.github.io/api-guidelines/ +[`cargo login`]: commands/cargo-login.html +[`cargo package`]: commands/cargo-package.html +[`cargo publish`]: commands/cargo-publish.html [crates.io]: https://crates.io/ [oauth-scopes]: https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/ + diff --git a/src/doc/src/reference/unstable.md b/src/doc/src/reference/unstable.md index 6a5e1d0aed7..8f8d38b7ac9 100644 --- a/src/doc/src/reference/unstable.md +++ b/src/doc/src/reference/unstable.md @@ -10,26 +10,6 @@ command-line flags. Options requiring this will be called out below. Some unstable features will require you to specify the `cargo-features` key in `Cargo.toml`. -### publish-lockfile -* Original Issue: [#2263](https://github.com/rust-lang/cargo/issues/2263) -* PR: [#5093](https://github.com/rust-lang/cargo/pull/5093) -* Tracking Issue: [#5654](https://github.com/rust-lang/cargo/issues/5654) - -When creating a `.crate` file for distribution, Cargo has historically -not included the `Cargo.lock` file. This can cause problems with -using `cargo install` with a binary. You can specify that your package -should include the `Cargo.lock` file when using `cargo package` or `cargo publish` -by specifying the `publish-lockfile` key in `Cargo.toml`. This also requires the -appropriate `cargo-features`: - -```toml -cargo-features = ["publish-lockfile"] - -[package] -... -publish-lockfile = true -``` - ### no-index-update * Original Issue: [#3479](https://github.com/rust-lang/cargo/issues/3479) diff --git a/src/etc/man/cargo-install.1 b/src/etc/man/cargo-install.1 index 0419a5a7a28..73998642f55 100644 --- a/src/etc/man/cargo-install.1 +++ b/src/etc/man/cargo-install.1 @@ -2,12 +2,12 @@ .\" Title: cargo-install .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 1.5.8 -.\" Date: 2019-05-12 +.\" Date: 2019-06-10 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "CARGO\-INSTALL" "1" "2019-05-12" "\ \&" "\ \&" +.TH "CARGO\-INSTALL" "1" "2019-06-10" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 @@ -40,9 +40,10 @@ cargo\-install \- Build and install a Rust binary \fBcargo install [\fIOPTIONS\fP] \-\-list\fP .SH "DESCRIPTION" .sp -This command manages Cargo\(cqs local set of installed binary crates. Only packages -which have \fB[[bin]]\fP targets can be installed, and all binaries are installed into -the installation root\(cqs \fBbin\fP folder. +This command manages Cargo\(cqs local set of installed binary crates. Only +packages which have executable \fB[[bin]]\fP or \fB[[example]]\fP targets can be +installed, and all executables are installed into the installation root\(cqs +\fBbin\fP folder. .sp The installation root is determined, in order of precedence: .sp @@ -103,7 +104,7 @@ The installation root is determined, in order of precedence: .RE .sp There are multiple sources from which a crate can be installed. The default -location is crates.io but the \fB\-\-git\fP, \fB\-\-path\fP, and \fBregistry\fP flags can +location is crates.io but the \fB\-\-git\fP, \fB\-\-path\fP, and \fB\-\-registry\fP flags can change this source. If the source contains more than one package (such as crates.io or a git repository with multiple crates) the \fICRATE\fP argument is required to indicate which crate should be installed. @@ -120,6 +121,20 @@ in a temporary target directory. To avoid this, the target directory can be specified by setting the \fBCARGO_TARGET_DIR\fP environment variable to a relative path. In particular, this can be useful for caching build artifacts on continuous integration systems. +.sp +By default, the \fBCargo.lock\fP file that is included with the package will be +ignored. This means that Cargo will recompute which versions of dependencies +to use, possibly using newer versions that have been released since the +package was published. The \fB\-\-locked\fP flag can be used to force Cargo to use +the packaged \fBCargo.lock\fP file if it is available. This may be useful for +ensuring reproducible builds, to use the exact same set of dependencies that +were available when the package was published. It may also be useful if a +newer version of a dependency is published that no longer builds on your +system, or has other problems. The downside to using \fB\-\-locked\fP is that you +will not receive any fixes or updates to any dependency. Note that Cargo did +not start publishing \fBCargo.lock\fP files until version 1.37, which means +packages published with prior versions will not have a \fBCargo.lock\fP file +available. .SH "OPTIONS" .SS "Install Options" .sp diff --git a/src/etc/man/cargo-package.1 b/src/etc/man/cargo-package.1 index 0b39be61070..dfd592e24e5 100644 --- a/src/etc/man/cargo-package.1 +++ b/src/etc/man/cargo-package.1 @@ -2,12 +2,12 @@ .\" Title: cargo-package .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 1.5.8 -.\" Date: 2019-05-20 +.\" Date: 2019-06-10 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "CARGO\-PACKAGE" "1" "2019-05-20" "\ \&" "\ \&" +.TH "CARGO\-PACKAGE" "1" "2019-06-10" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 @@ -103,6 +103,19 @@ manifest. . sp -1 . IP \(bu 2.3 .\} +\fBCargo.lock\fP is automatically included if the package contains an +executable binary or example target. \fBcargo\-install\fP(1) will use the +packaged lock file if the \fB\-\-locked\fP flag is used. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +. sp -1 +. IP \(bu 2.3 +.\} A \fB.cargo_vcs_info.json\fP file is included that contains information about the current VCS checkout hash if available (not included with \fB\-\-allow\-dirty\fP). diff --git a/tests/testsuite/alt_registry.rs b/tests/testsuite/alt_registry.rs index 9ab47359c53..fe079ee382e 100644 --- a/tests/testsuite/alt_registry.rs +++ b/tests/testsuite/alt_registry.rs @@ -361,7 +361,7 @@ fn publish_with_registry_dependency() { "vers": "0.0.1" }"#, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], ); } @@ -460,7 +460,7 @@ fn publish_to_alt_registry() { "vers": "0.0.1" }"#, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], ); } @@ -523,7 +523,7 @@ fn publish_with_crates_io_dep() { "vers": "0.0.1" }"#, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], ); } diff --git a/tests/testsuite/cross_publish.rs b/tests/testsuite/cross_publish.rs index b9f722a1314..076a90361b4 100644 --- a/tests/testsuite/cross_publish.rs +++ b/tests/testsuite/cross_publish.rs @@ -53,7 +53,7 @@ fn simple_cross_package() { publish::validate_crate_contents( f, "foo-0.0.0.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], &[], ); } diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index f098f6b48eb..ff92ddb44bf 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -46,6 +46,7 @@ See [..] p.cargo("package -l") .with_stdout( "\ +Cargo.lock Cargo.toml src/main.rs ", @@ -57,7 +58,7 @@ src/main.rs validate_crate_contents( f, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], &[], ); } @@ -151,9 +152,10 @@ fn package_verbose() { [WARNING] manifest has no description[..] See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info. [PACKAGING] foo v0.0.1 ([..]) -[ARCHIVING] [..] -[ARCHIVING] [..] +[ARCHIVING] Cargo.toml +[ARCHIVING] src/main.rs [ARCHIVING] .cargo_vcs_info.json +[ARCHIVING] Cargo.lock ", ) .run(); @@ -172,6 +174,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for f, "foo-0.0.1.crate", &[ + "Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs", @@ -377,19 +380,20 @@ See [..] [WARNING] [..] file `some_dir/file_deep_1` is now excluded. See [..] [PACKAGING] foo v0.0.1 ([..]) -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] +[ARCHIVING] Cargo.toml +[ARCHIVING] file_root_3 +[ARCHIVING] file_root_4 +[ARCHIVING] file_root_5 +[ARCHIVING] some_dir/dir_deep_2/some_dir/file +[ARCHIVING] some_dir/dir_deep_4/some_dir/file +[ARCHIVING] some_dir/dir_deep_5/some_dir/file +[ARCHIVING] some_dir/file_deep_2 +[ARCHIVING] some_dir/file_deep_3 +[ARCHIVING] some_dir/file_deep_4 +[ARCHIVING] some_dir/file_deep_5 +[ARCHIVING] src/main.rs [ARCHIVING] .cargo_vcs_info.json +[ARCHIVING] Cargo.lock ", ) .run(); @@ -401,6 +405,7 @@ See [..] .with_stdout( "\ .cargo_vcs_info.json +Cargo.lock Cargo.toml file_root_3 file_root_4 @@ -447,10 +452,11 @@ fn include() { See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info. [WARNING] both package.include and package.exclude are specified; the exclude list will be ignored [PACKAGING] foo v0.0.1 ([..]) -[ARCHIVING] [..] -[ARCHIVING] [..] -[ARCHIVING] [..] +[ARCHIVING] Cargo.toml +[ARCHIVING] foo.txt +[ARCHIVING] src/main.rs [ARCHIVING] .cargo_vcs_info.json +[ARCHIVING] Cargo.lock ", ) .run(); @@ -526,6 +532,7 @@ fn no_duplicates_from_modified_tracked_files() { .cwd(p.root()) .with_stdout( "\ +Cargo.lock Cargo.toml src/main.rs ", @@ -571,6 +578,7 @@ See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for p.cargo("package -l") .with_stdout( "\ +Cargo.lock Cargo.toml src[..]main.rs ", @@ -582,7 +590,7 @@ src[..]main.rs validate_crate_contents( f, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], &[], ); } @@ -652,7 +660,13 @@ See [..] validate_crate_contents( f, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs", "src/foo.rs"], + &[ + "Cargo.lock", + "Cargo.toml", + "Cargo.toml.orig", + "src/main.rs", + "src/foo.rs", + ], &[], ); } @@ -755,6 +769,7 @@ fn generated_manifest() { Package::new("abc", "1.0.0").publish(); Package::new("def", "1.0.0").alternative(true).publish(); Package::new("ghi", "1.0.0").publish(); + Package::new("bar", "0.1.0").publish(); let p = project() .file( @@ -830,7 +845,7 @@ version = "1.0" validate_crate_contents( f, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], &[("Cargo.toml", &rewritten_toml)], ); } diff --git a/tests/testsuite/publish.rs b/tests/testsuite/publish.rs index fcf9c2a3ea2..35d6baf7c6a 100644 --- a/tests/testsuite/publish.rs +++ b/tests/testsuite/publish.rs @@ -52,7 +52,7 @@ fn validate_upload_foo() { } "#, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], ); } @@ -61,6 +61,7 @@ fn validate_upload_foo_clean() { CLEAN_FOO_JSON, "foo-0.0.1.crate", &[ + "Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs", @@ -498,6 +499,7 @@ fn publish_when_ignored() { CLEAN_FOO_JSON, "foo-0.0.1.crate", &[ + "Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs", @@ -539,7 +541,13 @@ fn ignore_when_crate_ignored() { publish::validate_upload( CLEAN_FOO_JSON, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs", "baz"], + &[ + "Cargo.lock", + "Cargo.toml", + "Cargo.toml.orig", + "src/main.rs", + "baz", + ], ); } @@ -713,6 +721,7 @@ fn publish_allowed_registry() { CLEAN_FOO_JSON, "foo-0.0.1.crate", &[ + "Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs", @@ -974,7 +983,7 @@ fn publish_with_patch() { } "#, "foo-0.0.1.crate", - &["Cargo.toml", "Cargo.toml.orig", "src/main.rs"], + &["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"], ); } diff --git a/tests/testsuite/publish_lockfile.rs b/tests/testsuite/publish_lockfile.rs index 5409c12975f..201e7959cb8 100644 --- a/tests/testsuite/publish_lockfile.rs +++ b/tests/testsuite/publish_lockfile.rs @@ -9,9 +9,7 @@ use crate::support::{ fn pl_manifest(name: &str, version: &str, extra: &str) -> String { format!( r#" - cargo-features = ["publish-lockfile"] - - [project] + [package] name = "{}" version = "{}" authors = [] @@ -20,7 +18,6 @@ fn pl_manifest(name: &str, version: &str, extra: &str) -> String { documentation = "foo" homepage = "foo" repository = "foo" - publish-lockfile = true {} "#, @@ -28,6 +25,41 @@ fn pl_manifest(name: &str, version: &str, extra: &str) -> String { ) } +#[cargo_test] +fn deprecated() { + let p = project() + .file( + "Cargo.toml", + r#" + cargo-features = ["publish-lockfile"] + [package] + name = "foo" + version = "0.1.0" + publish-lockfile = true + license = "MIT" + description = "foo" + documentation = "foo" + homepage = "foo" + repository = "foo" + "#, + ) + .file("src/lib.rs", "") + .build(); + p.cargo("package") + .masquerade_as_nightly_cargo() + .with_stderr( + "\ +[PACKAGING] foo v0.1.0 ([..]) +[VERIFYING] foo v0.1.0 ([..]) +[WARNING] The `publish-lockfile` feature is deprecated and currently has no effect. \ + It may be removed in a future version. +[COMPILING] foo v0.1.0 ([..]) +[FINISHED] dev [..] +", + ) + .run(); +} + #[cargo_test] fn package_lockfile() { let p = project() @@ -36,7 +68,6 @@ fn package_lockfile() { .build(); p.cargo("package") - .masquerade_as_nightly_cargo() .with_stderr( "\ [PACKAGING] foo v0.0.1 ([CWD]) @@ -48,7 +79,6 @@ fn package_lockfile() { .run(); assert!(p.root().join("target/package/foo-0.0.1.crate").is_file()); p.cargo("package -l") - .masquerade_as_nightly_cargo() .with_stdout( "\ Cargo.lock @@ -57,10 +87,7 @@ src/main.rs ", ) .run(); - p.cargo("package") - .masquerade_as_nightly_cargo() - .with_stdout("") - .run(); + p.cargo("package").with_stdout("").run(); let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap(); validate_crate_contents( @@ -80,7 +107,6 @@ fn package_lockfile_git_repo() { .build(); cargo_process("package -l") .cwd(g.root()) - .masquerade_as_nightly_cargo() .with_stdout( "\ .cargo_vcs_info.json @@ -92,7 +118,6 @@ src/main.rs .run(); cargo_process("package -v") .cwd(g.root()) - .masquerade_as_nightly_cargo() .with_stderr( "\ [PACKAGING] foo v0.0.1 ([..]) @@ -116,7 +141,7 @@ fn no_lock_file_with_library() { .file("src/lib.rs", "") .build(); - p.cargo("package").masquerade_as_nightly_cargo().run(); + p.cargo("package").run(); let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap(); validate_crate_contents( @@ -141,10 +166,7 @@ fn lock_file_and_workspace() { .file("foo/src/main.rs", "fn main() {}") .build(); - p.cargo("package") - .cwd("foo") - .masquerade_as_nightly_cargo() - .run(); + p.cargo("package").cwd("foo").run(); let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap(); validate_crate_contents( @@ -188,15 +210,12 @@ fn note_resolve_changes() { .file("patched/src/lib.rs", "") .build(); - p.cargo("generate-lockfile") - .masquerade_as_nightly_cargo() - .run(); + p.cargo("generate-lockfile").run(); // Make sure this does not change or warn. Package::new("updated", "1.0.1").publish(); p.cargo("package --no-verify -v --allow-dirty") - .masquerade_as_nightly_cargo() .with_stderr_unordered( "\ [PACKAGING] foo v0.0.1 ([..]) @@ -220,14 +239,11 @@ fn outdated_lock_version_change_does_not_warn() { .file("src/main.rs", "fn main() {}") .build(); - p.cargo("generate-lockfile") - .masquerade_as_nightly_cargo() - .run(); + p.cargo("generate-lockfile").run(); p.change_file("Cargo.toml", &pl_manifest("foo", "0.2.0", "")); p.cargo("package --no-verify") - .masquerade_as_nightly_cargo() .with_stderr("[PACKAGING] foo v0.2.0 ([..])") .run(); } @@ -271,12 +287,9 @@ fn no_warn_workspace_extras() { ) .file("b/src/main.rs", "fn main() {}") .build(); - p.cargo("generate-lockfile") - .masquerade_as_nightly_cargo() - .run(); + p.cargo("generate-lockfile").run(); p.cargo("package --no-verify") .cwd("a") - .masquerade_as_nightly_cargo() .with_stderr( "\ [PACKAGING] a v0.1.0 ([..]) @@ -303,14 +316,11 @@ fn warn_package_with_yanked() { ) .file("src/main.rs", "fn main() {}") .build(); - p.cargo("generate-lockfile") - .masquerade_as_nightly_cargo() - .run(); + p.cargo("generate-lockfile").run(); Package::new("bar", "0.1.0").yanked(true).publish(); // Make sure it sticks with the locked (yanked) version. Package::new("bar", "0.1.1").publish(); p.cargo("package --no-verify") - .masquerade_as_nightly_cargo() .with_stderr( "\ [PACKAGING] foo v0.0.1 ([..]) @@ -386,66 +396,3 @@ dependencies = [ ) .run(); } - -#[cargo_test] -fn publish_lockfile_default() { - let p = project() - .file( - "Cargo.toml", - r#" - cargo-features = ["publish-lockfile"] - [package] - name = "foo" - version = "1.0.0" - authors = [] - license = "MIT" - description = "foo" - documentation = "foo" - homepage = "foo" - repository = "foo" - "#, - ) - .file("src/main.rs", "fn main() {}") - .build(); - - p.cargo("package -l") - .masquerade_as_nightly_cargo() - .with_stdout( - "\ -Cargo.lock -Cargo.toml -src/main.rs -", - ) - .run(); - - let p = project() - .file( - "Cargo.toml", - r#" - cargo-features = ["publish-lockfile"] - [package] - name = "foo" - version = "1.0.0" - authors = [] - license = "MIT" - description = "foo" - documentation = "foo" - homepage = "foo" - repository = "foo" - publish-lockfile = false - "#, - ) - .file("src/main.rs", "fn main() {}") - .build(); - - p.cargo("package -l") - .masquerade_as_nightly_cargo() - .with_stdout( - "\ -Cargo.toml -src/main.rs -", - ) - .run(); -} diff --git a/tests/testsuite/registry.rs b/tests/testsuite/registry.rs index c8d95751b75..9fb92d80f65 100644 --- a/tests/testsuite/registry.rs +++ b/tests/testsuite/registry.rs @@ -363,7 +363,7 @@ fn package_with_path_deps() { .with_status(101) .with_stderr_contains( "\ -[ERROR] failed to verify package tarball +[ERROR] failed to prepare local package for uploading Caused by: no matching package named `notyet` found @@ -379,8 +379,8 @@ required by package `foo v0.0.1 ([..])` .with_stderr( "\ [PACKAGING] foo v0.0.1 ([CWD]) -[VERIFYING] foo v0.0.1 ([CWD]) [UPDATING] `[..]` index +[VERIFYING] foo v0.0.1 ([CWD]) [DOWNLOADING] crates ... [DOWNLOADED] notyet v0.0.1 (registry `[ROOT][..]`) [COMPILING] notyet v0.0.1