From 10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:41:41 +0200 Subject: Merging upstream version 1.70.0+dfsg2. Signed-off-by: Daniel Baumann --- src/tools/cargo/CHANGELOG.md | 3424 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3424 insertions(+) create mode 100644 src/tools/cargo/CHANGELOG.md (limited to 'src/tools/cargo/CHANGELOG.md') diff --git a/src/tools/cargo/CHANGELOG.md b/src/tools/cargo/CHANGELOG.md new file mode 100644 index 000000000..a3d488d92 --- /dev/null +++ b/src/tools/cargo/CHANGELOG.md @@ -0,0 +1,3424 @@ +# Changelog + +## Cargo 1.70 (2023-06-01) +[9880b408...HEAD](https://github.com/rust-lang/cargo/compare/9880b408...HEAD) + +### Added + +- The `CARGO_PKG_README` environment variable is now set to the path to the + README file when compiling a crate. + [#11645](https://github.com/rust-lang/cargo/pull/11645) +- Cargo now displays richer information of Cargo target failed to compile. + [#11636](https://github.com/rust-lang/cargo/pull/11636) + +### Changed + +- 🎉 The `sparse` protocol is now the default protocol for crates.io! + ([RFC 2789](https://github.com/rust-lang/rfcs/blob/master/text/2789-sparse-index.md)) + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/registries.html#registry-protocols)) + [#11791](https://github.com/rust-lang/cargo/pull/11791) + [#11783](https://github.com/rust-lang/cargo/pull/11783) + +### Fixed + +- Removed duplicates of possible values in `--charset` option of `cargo tree`. + [#11785](https://github.com/rust-lang/cargo/pull/11785) +- Fixed `CARGO_CFG_` vars for configs defined both with and without value. + [#11790](https://github.com/rust-lang/cargo/pull/11790) +- Broke endless loop on cyclic features in added dependency in `cargo add`. + [#11805](https://github.com/rust-lang/cargo/pull/11805) +- Don't panic when [`patch`] involved in dependency resolution results in a conflict. + [#11770](https://github.com/rust-lang/cargo/pull/11770) + +### Nightly only + +- Added `-Zdirect-minimal-versions`. This behaves like `-Zminimal-versions` but + only for direct dependencies. + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#direct-minimal-versions)) + [#11688](https://github.com/rust-lang/cargo/pull/11688) +- Added `-Zgitoxide` which switches all `git fetch` operation in Cargo to + use `gitoxide` crate. This is still an MVP but could improve the performance + up to 2 times. + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html##gitoxide)) + [#11448](https://github.com/rust-lang/cargo/pull/11448) + [#11800](https://github.com/rust-lang/cargo/pull/11800) +- Removed `-Zjobserver-per-rustc`. Its rustc counterpart never got landed. + [#11764](https://github.com/rust-lang/cargo/pull/11764) + +### Documentation + +- Cleaned-up unstable documentation. + [#11793](https://github.com/rust-lang/cargo/pull/11793) +- Enhanced the documentation of timing report with graphs. + [#11798](https://github.com/rust-lang/cargo/pull/11798) + +### Internal + +- Switched to `sha2` crate for SHA256 calculation. + [#11795](https://github.com/rust-lang/cargo/pull/11795) + [#11807](https://github.com/rust-lang/cargo/pull/11807) +- Updated to `base64` v0.21.0. + [#11796](https://github.com/rust-lang/cargo/pull/11796) +- Integrated `cargo-deny` in Cargo its own CI pipeline. + [#11761](https://github.com/rust-lang/cargo/pull/11761) + +## Cargo 1.69 (2023-04-20) +[985d561f...rust-1.69.0](https://github.com/rust-lang/cargo/compare/985d561f...rust-1.69.0) + +### Added + +- Cargo now suggests `cargo fix` or `cargo clippy --fix` + when compilation warnings are auto-fixable. + [#11558](https://github.com/rust-lang/cargo/pull/11558) +- Cargo now suggests `cargo add` if you try to install a library crate. + [#11410](https://github.com/rust-lang/cargo/pull/11410) +- Cargo now sets `CARGO_BIN_NAME` environment variable also for binary examples. + [#11705](https://github.com/rust-lang/cargo/pull/11705) + +### Changed + +- ❗ When `default-features` is set to false of a workspace dependency, + and an inherited dependency of a member has `default-features = true`, + Cargo will enable default features of that dependency. + [#11409](https://github.com/rust-lang/cargo/pull/11409) +- ❗ Deny `CARGO_HOME` in `[env]` configuration table. Cargo itself doesn't + pick up this value, but recursive calls to cargo will. We consider it as a + wrong behavior to only pass it to recursive invocations. + [#11644](https://github.com/rust-lang/cargo/pull/11644) +- ❗ Debuginfo for build dependencies is now off if not explicit set. This is + expected to boost the overall build time. + [#11252](https://github.com/rust-lang/cargo/pull/11252) +- Cargo now emits errors on invalid alphanumeric token for crates.io. + [#11600](https://github.com/rust-lang/cargo/pull/11600) +- `cargo add` now checks only the order of `[dependencies]` + without considering `[dependencies.*]`. + [#11612](https://github.com/rust-lang/cargo/pull/11612) +- Cargo now respects the new jobserver IPC style in GNU Make 4.4, by updating + its dependency `jobserver`. + [#11767](https://github.com/rust-lang/cargo/pull/11767) +- `cargo install` now reports required features when no binary meets its requirements. + [#11647](https://github.com/rust-lang/cargo/pull/11647) + +### Fixed + +- Uplifted `.dwp` DWARF package file next to the executable for debuggers to + locate them. + [#11572](https://github.com/rust-lang/cargo/pull/11572) +- Fixed build scripts triggering recompiles when a `rerun-if-changed` points to + a directory whose mtime is not preserved by the filesystem. + [#11613](https://github.com/rust-lang/cargo/pull/11613) +- Fixed panics when using dependencies from `[workspace.dependencies]` + for `[patch]`. This usage is not supposed to be supported. + [#11565](https://github.com/rust-lang/cargo/pull/11565) + [#11630](https://github.com/rust-lang/cargo/pull/11630) +- Fixed `cargo report` saving the same future-incompat reports multiple times. + [#11648](https://github.com/rust-lang/cargo/pull/11648) +- Fixed the incorrect inference of a directory ending with `.rs` as a file. + [#11678](https://github.com/rust-lang/cargo/pull/11678) +- Fixed `.cargo-ok` file being truncated wrongly, preventing from using a dependency. + [#11665](https://github.com/rust-lang/cargo/pull/11665) + [#11724](https://github.com/rust-lang/cargo/pull/11724) + +### Nightly only + +- `-Zrustdoc-scrape-example` must fail with bad build script. + [#11694](https://github.com/rust-lang/cargo/pull/11694) +- Updated 1password credential manager integration to the version 2 CLI. + [#11692](https://github.com/rust-lang/cargo/pull/11692) +- Emit an error message for transitive artifact dependencies with targets the + package doesn't directly interact with. + [#11643](https://github.com/rust-lang/cargo/pull/11643) +- Added `-C` flag for changing current dir before build starts. + [#10952](https://github.com/rust-lang/cargo/pull/10952) + +### Documentation + +- Clarified the difference between `CARGO_CRATE_NAME` and `CARGO_PKG_NAME`. + [#11576](https://github.com/rust-lang/cargo/pull/11576) +- Added links to the Target section of the glossary for occurences of target triple. + [#11603](https://github.com/rust-lang/cargo/pull/11603) +- Described how the current resolver sometimes duplicates depenencies. + [#11604](https://github.com/rust-lang/cargo/pull/11604) +- Added a note about verifying your email address on crates.io. + [#11620](https://github.com/rust-lang/cargo/pull/11620) +- Mention current default value in `publish.timeout` docs. + [#11652](https://github.com/rust-lang/cargo/pull/11652) +- More doc comments for `cargo::core::compiler` modules. + [#11669](https://github.com/rust-lang/cargo/pull/11669) + [#11703](https://github.com/rust-lang/cargo/pull/11703) + [#11711](https://github.com/rust-lang/cargo/pull/11711) + [#11758](https://github.com/rust-lang/cargo/pull/11758) +- Added more guidance on how to implement unstable features. + [#11675](https://github.com/rust-lang/cargo/pull/11675) +- Fixed unstable chapter layout for `codegen-backend`. + [#11676](https://github.com/rust-lang/cargo/pull/11676) +- Add a link to LTO doc. + [#11701](https://github.com/rust-lang/cargo/pull/11701) +- Added documentation for the configuration discovery of `cargo install` + to the man pages + [#11763](https://github.com/rust-lang/cargo/pull/11763) +- Documented `-F` flag as an alias for `--features` in `cargo add`. + [#11774](https://github.com/rust-lang/cargo/pull/11774) + +### Internal + +- Disable network SSH tests on Windows. + [#11610](https://github.com/rust-lang/cargo/pull/11610) +- Made some blocking tests non-blocking. + [#11650](https://github.com/rust-lang/cargo/pull/11650) +- Deny warnings in CI, not locally. + [#11699](https://github.com/rust-lang/cargo/pull/11699) +- Re-export `cargo_new::NewProjectKind` as public. + [#11700](https://github.com/rust-lang/cargo/pull/11700) +- Made dependencies in alphabetical order. + [#11719](https://github.com/rust-lang/cargo/pull/11719) +- Switched some tests from `build` to `check`. + [#11725](https://github.com/rust-lang/cargo/pull/11725) +- Consolidated how Cargo reads environments variables internally. + [#11727](https://github.com/rust-lang/cargo/pull/11727) + [#11754](https://github.com/rust-lang/cargo/pull/11754) +- Fixed tests with nondeterministic ordering + [#11766](https://github.com/rust-lang/cargo/pull/11766) +- Added a test to verify the intermediate artifacts persist in the temp directory. + [#11771](https://github.com/rust-lang/cargo/pull/11771) +- Updated cross test instructions for aarch64-apple-darwin. + [#11663](https://github.com/rust-lang/cargo/pull/11663) +- Updated to `toml` v0.6 and `toml_edit` v0.18 for TOML manipulations. + [#11618](https://github.com/rust-lang/cargo/pull/11618) +- Updated to `clap` v4.1.3. + [#11619](https://github.com/rust-lang/cargo/pull/11619) +- Replaced `winapi` with `windows-sys` crate for Windows bindings. + [#11656](https://github.com/rust-lang/cargo/pull/11656) +- Reused `url` crate for percent encoding instead of `percent-encoding`. + [#11750](https://github.com/rust-lang/cargo/pull/11750) +- Cargo contributors can benefit from smart punctuations when writing + documentations, e.g., `---` is auto-converted into an em dash. + ([docs](https://rust-lang.github.io/mdBook/format/markdown.html#smart-punctuation)) + [#11646](https://github.com/rust-lang/cargo/pull/11646) + [#11715](https://github.com/rust-lang/cargo/pull/11715) +- Cargo's CI pipeline now covers macOS on nightly. + [#11712](https://github.com/rust-lang/cargo/pull/11712) +- Re-enabled some clippy lints in Cargo itself. + [#11722](https://github.com/rust-lang/cargo/pull/11722) +- Enabled sparse protocol in Cargo's CI. + [#11632](https://github.com/rust-lang/cargo/pull/11632) +- Pull requests in Cargo now get autolabelled for label `A-*` and `Command-*`. + [#11664](https://github.com/rust-lang/cargo/pull/11664) + [#11679](https://github.com/rust-lang/cargo/pull/11679) + +## Cargo 1.68.2 (2023-03-28) +[115f3455...rust-1.68.0](https://github.com/rust-lang/cargo/compare/115f3455...rust-1.68.0) + +- Updated the GitHub RSA SSH host key bundled within cargo. + The key was [rotated by + GitHub](https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/) on + 2023-03-24 after the old one leaked. + [#11883](https://github.com/rust-lang/cargo/pull/11883) +- Added support for SSH known hosts marker `@revoked`. + [#11635](https://github.com/rust-lang/cargo/pull/11635) +- Marked the old GitHub RSA host key as revoked. This will prevent Cargo from + accepting the leaked key even when trusted by the system. + [#11889](https://github.com/rust-lang/cargo/pull/11889) + +## Cargo 1.68 (2023-03-09) +[f6e737b1...rust-1.68.0](https://github.com/rust-lang/cargo/compare/f6e737b1...rust-1.68.0) + +### Added + +- 🎉 The new "sparse" protocol has been stabilized. + It should provide a significant performance improvement when accessing crates.io. + ([RFC 2789](https://github.com/rust-lang/rfcs/blob/master/text/2789-sparse-index.md)) + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/registries.html#registry-protocols)) + [#11224](https://github.com/rust-lang/cargo/pull/11224) + [#11480](https://github.com/rust-lang/cargo/pull/11480) + [#11733](https://github.com/rust-lang/cargo/pull/11733) + [#11756](https://github.com/rust-lang/cargo/pull/11756) +- 🎉 `home` crate is now a subcrate in `rust-lang/cargo` repository. Welcome! + [#11359](https://github.com/rust-lang/cargo/pull/11359) + [#11481](https://github.com/rust-lang/cargo/pull/11481) +- Long diagnostic messages now can be truncated to be more readable. + [#11494](https://github.com/rust-lang/cargo/pull/11494) +- Shows the progress of crates.io index update even when `net.git-fetch-with-cli` enabled. + [#11579](https://github.com/rust-lang/cargo/pull/11579) +- `cargo build --verbose` tells you more about why it recompiles. + [#11407](https://github.com/rust-lang/cargo/pull/11407) +- Cargo's file locking mechanism now supports Solaris by using `fcntl`. + [#11439](https://github.com/rust-lang/cargo/pull/11439) + [#11474](https://github.com/rust-lang/cargo/pull/11474) +- Added a new SemVer compatibility rule explaining the expectations around diagnostic lints + [#11596](https://github.com/rust-lang/cargo/pull/11596) +- `cargo vendor` generates a different source replacement entry + for each revision from the same git repository. + [#10690](https://github.com/rust-lang/cargo/pull/1090) +- Cargo contributors can relabel issues via triagebot. + [doc](https://github.com/rust-lang/triagebot/wiki/Labeling) + [#11498](https://github.com/rust-lang/cargo/pull/11498) +- Cargo contributors can write tests in containers. + [#11583](https://github.com/rust-lang/cargo/pull/11583) + +### Changed + +- Cargo now by default saves credentials to `.cargo/credentials.toml`. + If `.cargo/credentials` exists, writes to it for backward compatibility reasons. + [#11533](https://github.com/rust-lang/cargo/pull/11533) +- To prevent sensitive data from being logged, Cargo introduces a new wrapper type internally. + [#11545](https://github.com/rust-lang/cargo/pull/11545) +- Several documentation improvements. + [#11475](https://github.com/rust-lang/cargo/pull/11475) + [#11504](https://github.com/rust-lang/cargo/pull/11504) + [#11516](https://github.com/rust-lang/cargo/pull/11516) + [#11517](https://github.com/rust-lang/cargo/pull/11517) + [#11568](https://github.com/rust-lang/cargo/pull/11568) + [#11586](https://github.com/rust-lang/cargo/pull/11586) + [#11592](https://github.com/rust-lang/cargo/pull/11592) + +### Fixed + +- ❗ `cargo package` and `cargo publish` now respects workspace's `Cargo.lock`. + This is an expected behavior but previously got overlooked. + [#11477](https://github.com/rust-lang/cargo/pull/11477) +- Fixed `cargo vendor` failing on resolving git dependencies inherited from a workspace. + [#11414](https://github.com/rust-lang/cargo/pull/11414) +- `cargo install` can now correctly install root package when `workspace.default-members` is specified. + [#11067](https://github.com/rust-lang/cargo/pull/11067) +- Fixed panic on target specific dependency errors. + [#11541](https://github.com/rust-lang/cargo/pull/11541) +- Shows `--help` if there is no man page for a subcommand. + [#11473](https://github.com/rust-lang/cargo/pull/11473) +- Setting `target.cfg(…).rustflags` shouldn't erase `build.rustdocflags`. + [#11323](https://github.com/rust-lang/cargo/pull/11323) +- Unsupported `profile.split-debuginfo` options are now ignored, + which previously made Cargo fail to compile on certain platforms. + [#11347](https://github.com/rust-lang/cargo/pull/11347) + [#11633](https://github.com/rust-lang/cargo/pull/11633) +- Don't panic in Windows headless session with really long file names. + [#11759](https://github.com/rust-lang/cargo/pull/11759) + +### Nightly only + +- Implemented a inital support of asymmetric token authentication for registries. + ([RFC 3231](https://github.com/rust-lang/rfcs/blob/master/text/3231-cargo-asymmetric-tokens.md)) + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#registry-auth)) + [#10771](https://github.com/rust-lang/cargo/pull/10771) +- Do not error for `auth-required: true` without `-Z sparse-registry` + [#11661](https://github.com/rust-lang/cargo/pull/11661) +- Supports `codegen-backend` and `rustflags` in profiles in config file. + [#11562](https://github.com/rust-lang/cargo/pull/11562) +- Suggests `cargo clippy --fix` when warnings/errors could be fixed with clippy. + [#11399](https://github.com/rust-lang/cargo/pull/11399) +- Fixed artifact deps not working when target field specified coexists with `optional = true`. + [#11434](https://github.com/rust-lang/cargo/pull/11434) +- Make Cargo distinguish `Unit`s with and without artifact targets. + [#11478](https://github.com/rust-lang/cargo/pull/11478) +- `cargo metadata` supports artifact dependencies. + [#11550](https://github.com/rust-lang/cargo/pull/11550) +- Allows builds of some crate to fail during optional doc-scraping. + [#11450](https://github.com/rust-lang/cargo/pull/11450) +- Add warning if potentially-scrapable examples are skipped due to dev-dependencies. + [#11503](https://github.com/rust-lang/cargo/pull/11503) +- Don't scrape examples from library targets by default. + [#11499](https://github.com/rust-lang/cargo/pull/11499) +- Fixed examples of proc-macro crates being scraped for examples. + [#11497](https://github.com/rust-lang/cargo/pull/11497) + +## Cargo 1.67 (2023-01-26) +[7e484fc1...rust-1.67.0](https://github.com/rust-lang/cargo/compare/7e484fc1...rust-1.67.0) + +### Added + +- `cargo remove` now cleans up the referenced dependency of the root + workspace manifest, `profile`, `patch`, and `replace` sections + after a successful removal of a dependency. + [#11194](https://github.com/rust-lang/cargo/pull/11194) + [#11242](https://github.com/rust-lang/cargo/pull/11242) + [#11351](https://github.com/rust-lang/cargo/pull/11351) +- `cargo package` and `cargo publish` now report total and compressed crate size + after packaging. + [#11270](https://github.com/rust-lang/cargo/pull/11270) + +### Changed + +- ❗ Cargo now reuses the value of `$CARGO` if it's already set in the environment, + and forwards the value when executing external subcommands and build scripts. + [#11285](https://github.com/rust-lang/cargo/pull/11285) +- ❗ Cargo now emits an error when running `cargo update --precise` without a `-p` flag. + [#11349](https://github.com/rust-lang/cargo/pull/11349) +- ❗ Cargo now emits an error if there are multiple registries in the configuration with the same index URL. + [#10592](https://github.com/rust-lang/cargo/pull/10592) +- Cargo now is aware of compression ratio when extracting crate files. + This relaxes the hard size limit introduced in 1.64.0 to mitigate zip bomb attack. + [#11337](https://github.com/rust-lang/cargo/pull/11337) +- Cargo now errors out when `cargo fix` on a git repo with uncommitted changes. + [#11400](https://github.com/rust-lang/cargo/pull/11400) +- Cargo now warns when `cargo tree -i ` cannot find any package. + [#11377](https://github.com/rust-lang/cargo/pull/11377) +- Cargo now warns when running `cargo new/init` and `PATH` env separator + is in the project path. + [#11318](https://github.com/rust-lang/cargo/pull/11318) +- Better error messages when multiple packages were found and + `cargo add/remove` gets confused. + [#11186](https://github.com/rust-lang/cargo/pull/11186) + [#11375](https://github.com/rust-lang/cargo/pull/11375) +- A better error message when `cargo init` but existing ignore files aren't UTF-8. + [#11321](https://github.com/rust-lang/cargo/pull/11321) +- A better error message for `cargo install .`. + [#11401](https://github.com/rust-lang/cargo/pull/11401) +- A better warning when the same file path found in multiple build targets. + [#11299](https://github.com/rust-lang/cargo/pull/11299) +- Updated the internal HTTP library libcurl with various fixes and updates. + [#11307](https://github.com/rust-lang/cargo/pull/11307) + [#11326](https://github.com/rust-lang/cargo/pull/11326) + +### Fixed + +- Fixed `cargo clean` for removing fingerprints and build script + artifacts of only the requested package + [#10621](https://github.com/rust-lang/cargo/pull/10621) +- Fixed `cargo install --index` not working when config `registry.default` is set. + [#11302](https://github.com/rust-lang/cargo/pull/11302) +- Fixed git2 safe-directory accidentally disabled when no network configuration was found. + [#11366](https://github.com/rust-lang/cargo/pull/11366) +- Migrate from crate `atty` to resolve potential soundness issue. + [#11420](https://github.com/rust-lang/cargo/pull/11420) +- Cleans stale git temp files left when libgit2 indexing is interrupted. + [#11308](https://github.com/rust-lang/cargo/pull/11308) + +### Nightly only + +- Suggests `cargo fix` when some compilation warnings/errors can be auto-fixed. + [#10989](https://github.com/rust-lang/cargo/pull/10989) + [#11368](https://github.com/rust-lang/cargo/pull/11368) +- Changed `rustdoc-scrape-examples` to be a target-level configuration. + [#10343](https://github.com/rust-lang/cargo/pull/10343) + [#11425](https://github.com/rust-lang/cargo/pull/11425) + [#11430](https://github.com/rust-lang/cargo/pull/11430) + [#11445](https://github.com/rust-lang/cargo/pull/11445) +- Propagates change of artifact bin dependency to its parent fingerprint. + [#11353](https://github.com/rust-lang/cargo/pull/11353) +- Fixed `wait-for-publish` to work with sparse registry. + [#11356](https://github.com/rust-lang/cargo/pull/11356) + [#11327](https://github.com/rust-lang/cargo/pull/11327) + [#11388](https://github.com/rust-lang/cargo/pull/11388) +- Stores the `sparse+` prefix in the `SourceId` for sparse registries + [#11387](https://github.com/rust-lang/cargo/pull/11387) + [#11403](https://github.com/rust-lang/cargo/pull/11403) +- Implemented alternative registry authentication support. + ([RFC 3139](https://github.com/rust-lang/rfcs/blob/master/text/3139-cargo-alternative-registry-auth.md)) + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#registry-auth)) + [#10592](https://github.com/rust-lang/cargo/pull/10592) +- Added documentation of config option `registries.crates-io.protocol`. + [#11350](https://github.com/rust-lang/cargo/pull/11350) + +## Cargo 1.66.1 (2023-01-10) + +### Fixed +- [CVE-2022-46176](https://github.com/rust-lang/cargo/security/advisories/GHSA-r5w3-xm58-jv6j): + Added validation of SSH host keys for git URLs. + See [the docs](https://doc.rust-lang.org/cargo/appendix/git-authentication.html#ssh-known-hosts) for more information on how to configure the known host keys. + +## Cargo 1.66 (2022-12-15) +[08250398...rust-1.66.0](https://github.com/rust-lang/cargo/compare/08250398...rust-1.66.0) + +### Added + +- 🎉 Added `cargo remove` command for removing dependencies from `Cargo.toml`. + [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html) + [#11059](https://github.com/rust-lang/cargo/pull/11059) + [#11099](https://github.com/rust-lang/cargo/pull/11099) + [#11193](https://github.com/rust-lang/cargo/pull/11193) + [#11204](https://github.com/rust-lang/cargo/pull/11204) + [#11227](https://github.com/rust-lang/cargo/pull/11227) +- Added support for git dependencies having git submodules with relative paths. + [#11106](https://github.com/rust-lang/cargo/pull/11106) +- Cargo now sends requests with a `Accept-Encoding` header to registries. + [#11292](https://github.com/rust-lang/cargo/pull/11292) +- Cargo now forwards non-UTF8 arguments to external subcommands. + [#11118](https://github.com/rust-lang/cargo/pull/11118) + +### Changed + +- ❗ Disambiguate source replacements from various angles. + [RFC-3289](https://github.com/rust-lang/rfcs/blob/master/text/3289-source_replacement_ambiguity.md) + [#10907](https://github.com/rust-lang/cargo/pull/10907) + - When the crates-io source is replaced, the user is required to specify which registry to use with `--registry ` when performing an API operation. + - Publishing to source-replaced crates.io is no longer permitted using the crates.io token (`registry.token`). + - In source replacement, the `replace-with` key can reference the name of an alternative registry in the `[registries]` table. +- ❗ `cargo publish` now blocks until it sees the published package in the index. + [#11062](https://github.com/rust-lang/cargo/pull/11062) + [#11210](https://github.com/rust-lang/cargo/pull/11210) + [#11216](https://github.com/rust-lang/cargo/pull/11216) + [#11255](https://github.com/rust-lang/cargo/pull/11255) +- Cargo now uses the clap v4 library for command-line argument parsing. + [#11116](https://github.com/rust-lang/cargo/pull/11116) + [#11119](https://github.com/rust-lang/cargo/pull/11119) + [#11159](https://github.com/rust-lang/cargo/pull/11159) + [#11190](https://github.com/rust-lang/cargo/pull/11190) + [#11239](https://github.com/rust-lang/cargo/pull/11239) + [#11280](https://github.com/rust-lang/cargo/pull/11280) +- Cargo now only warns on a user-defined alias shadowing an external command. + [#11170](https://github.com/rust-lang/cargo/pull/11170) +- Several documentation improvements. + [#10770](https://github.com/rust-lang/cargo/pull/10770) + [#10938](https://github.com/rust-lang/cargo/pull/10938) + [#11082](https://github.com/rust-lang/cargo/pull/11082) + [#11093](https://github.com/rust-lang/cargo/pull/11093) + [#11157](https://github.com/rust-lang/cargo/pull/11157) + [#11185](https://github.com/rust-lang/cargo/pull/11185) + [#11207](https://github.com/rust-lang/cargo/pull/11207) + [#11219](https://github.com/rust-lang/cargo/pull/11219) + [#11240](https://github.com/rust-lang/cargo/pull/11240) + [#11241](https://github.com/rust-lang/cargo/pull/11241) + [#11282](https://github.com/rust-lang/cargo/pull/11282) + +### Fixed + +- ❗ Config file loaded via `cargo --config ` now takes priority over + environment variables. This is a documented behaviour but the old + implementation accidentally got it wrong. + [#11077](https://github.com/rust-lang/cargo/pull/11077) +- ❗ Cargo collects rustflags in `target.cfg(…).rustflags` more correctly + and warns if that's not enough for convergence. + [#11114](https://github.com/rust-lang/cargo/pull/11114) +- Final artifacts not removed by linker should be removed before a compilation gets started. + [#11122](https://github.com/rust-lang/cargo/pull/11122) +- `cargo add` now reports unknown features in a more discoverable manner. + [#11098](https://github.com/rust-lang/cargo/pull/11098) +- Cargo now reports command aliasing failure with more error contexts. + [#11087](https://github.com/rust-lang/cargo/pull/11087) +- A better error message when `cargo login` prompt receives empty input. + [#11145](https://github.com/rust-lang/cargo/pull/11145) +- A better error message for fields with wrong types + where workspace inheritance is supported. + [#11113](https://github.com/rust-lang/cargo/pull/11113) +- A better error message when mixing feature syntax `dep:` with `/`. + [#11172](https://github.com/rust-lang/cargo/pull/11172) +- A better error message when publishing but `package.publish` is `false` + in the manifest. + [#11280](https://github.com/rust-lang/cargo/pull/11280) + +### Nightly only + +- Added new config option `publish.timeout` behind `-Zpublish-timeout`. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#publish-timeout) + [#11230](https://github.com/rust-lang/cargo/pull/11230) +- Added retry support to sparse registries. + [#11069](https://github.com/rust-lang/cargo/pull/11069) +- Fixed sparse registry lockfile urls containing `registry+sparse+`. + [#11177](https://github.com/rust-lang/cargo/pull/11177) +- Add new config option `registries.crates-io.protocol` + for controlling crates.io protocol. + [#11215](https://github.com/rust-lang/cargo/pull/11215) +- Removed `sparse+` prefix for index.crates.io. + [#11247](https://github.com/rust-lang/cargo/pull/11247) +- Fixed publishing with a dependency on a sparse registry. + [#11268](https://github.com/rust-lang/cargo/pull/11268) +- Fixed confusing error messages when using `-Zsparse-registry`. + [#11283](https://github.com/rust-lang/cargo/pull/11283) +- Fixed 410 gone response handling for sparse registries. + [#11286](https://github.com/rust-lang/cargo/pull/11286) + +## Cargo 1.65 (2022-11-03) +[4fd148c4...rust-1.65.0](https://github.com/rust-lang/cargo/compare/4fd148c4...rust-1.65.0) + +### Added + +- External subcommands can now inherit jobserver file descriptors from Cargo. + [#10511](https://github.com/rust-lang/cargo/pull/10511) +- Added an API documentation for private items in cargo-the-library. See + . + [#11019](https://github.com/rust-lang/cargo/pull/11019) + +### Changed + +- Cargo now stops adding its bin path to `PATH` if it's already there. + [#11023](https://github.com/rust-lang/cargo/pull/11023) +- Improved the performance of Cargo build scheduling + by sorting the queue of pending jobs. + [#11032](https://github.com/rust-lang/cargo/pull/11032) +- Improved the performance fetching git dependencies from GitHub even + when using a partial hash in the `rev` field. + [#10807](https://github.com/rust-lang/cargo/pull/10807) +- Cargo now uses git2 v0.15 and libgit2-sys v0.14, + which bring several compatibility fixes with git's new behaviors. + [#11004](https://github.com/rust-lang/cargo/pull/11004) +- Registry index files are cached in a more granular way based on content hash. + [#11044](https://github.com/rust-lang/cargo/pull/11044) +- Cargo now uses the standard library's `std::thread::scope` instead of the + `crossbeam` crate for spawning scoped threads. + [#10977](https://github.com/rust-lang/cargo/pull/10977) +- Cargo now uses the standard library's `available_parallelism` instead of the + `num_cpus` crate for determining the default parallelism. + [#10969](https://github.com/rust-lang/cargo/pull/10969) +- Cargo now guides you how to solve it when seeing an error message of + `rust-version` requirement not satisfied. + [#10891](https://github.com/rust-lang/cargo/pull/10891) +- Cargo now tells you more about possible causes and how to fix it + when a subcommand cannot be found. + [#10924](https://github.com/rust-lang/cargo/pull/10924) +- Cargo now lists available target names when a given Cargo target cannot be found. + [#10999](https://github.com/rust-lang/cargo/pull/10999) +- `cargo update` now warns if `--precise` is given without `--package` flag. + This will become a hard error after a transition period. + [#10988](https://github.com/rust-lang/cargo/pull/10988) + [#11011](https://github.com/rust-lang/cargo/pull/11011) +- `cargo bench` and `cargo test` now report a more precise test execution error + right after a test fails. + [#11028](https://github.com/rust-lang/cargo/pull/11028) +- `cargo add` now tells you for which version the features are added. + [#11075](https://github.com/rust-lang/cargo/pull/11075) +- Call out that non-ASCII crate names are not supported by Rust anymore. + [#11017](https://github.com/rust-lang/cargo/pull/11017) +- Enhanced the error message when in the manifest a field is expected to be + an array but a string is used. + [#10944](https://github.com/rust-lang/cargo/pull/10944) + +### Fixed + +- Removed the restriction on file locking supports on platforms other than Linux. + [#10975](https://github.com/rust-lang/cargo/pull/10975) +- Fixed incorrect OS detection by bumping os_info to 3.5.0. + [#10943](https://github.com/rust-lang/cargo/pull/10943) +- Scanning the package directory now ignores errors from broken + but excluded symlink files. + [#11008](https://github.com/rust-lang/cargo/pull/11008) +- Fixed deadlock when build scripts are waiting for input on stdin. + [#11257](https://github.com/rust-lang/cargo/pull/11257) + +### Nightly + +- Progress indicator for sparse registries becomes more straightforward. + [#11068](https://github.com/rust-lang/cargo/pull/11068) + +## Cargo 1.64 (2022-09-22) +[a5e08c47...rust-1.64.0](https://github.com/rust-lang/cargo/compare/a5e08c47...rust-1.64.0) + +### Added + +- 🎉 Packages can now inherit settings from the workspace so that the settings + can be centralized in one place. See + [`workspace.package`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-package-table) + and + [`workspace.dependencies`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-dependencies-table) + for more details on how to define these common settings. + [#10859](https://github.com/rust-lang/cargo/pull/10859) +- Added the + [`--crate-type`](https://doc.rust-lang.org/nightly/cargo/commands/cargo-rustc.html#option-cargo-rustc---crate-type) + flag to `cargo rustc` to override the crate type. + [#10838](https://github.com/rust-lang/cargo/pull/10838) +- Cargo commands can now accept multiple `--target` flags to build for + multiple targets at once, and the + [`build.target`](https://doc.rust-lang.org/nightly/cargo/reference/config.html#buildtarget) + config option may now take an array of multiple targets. + [#10766](https://github.com/rust-lang/cargo/pull/10766) +- The `--jobs` argument can now take a negative number to count backwards from + the max CPUs. + [#10844](https://github.com/rust-lang/cargo/pull/10844) + +### Changed +- Bash completion of `cargo install --path` now supports path completion. + [#10798](https://github.com/rust-lang/cargo/pull/10798) +- Significantly improved the performance fetching git dependencies from GitHub + when using a hash in the `rev` field. + [#10079](https://github.com/rust-lang/cargo/pull/10079) +- Published packages will now include the resolver setting from the workspace + to ensure that they use the same resolver when used in isolation. + [#10911](https://github.com/rust-lang/cargo/pull/10911) + [#10961](https://github.com/rust-lang/cargo/pull/10961) + [#10970](https://github.com/rust-lang/cargo/pull/10970) +- `cargo add` will now update `Cargo.lock`. + [#10902](https://github.com/rust-lang/cargo/pull/10902) +- The path in the config output of `cargo vendor` now translates backslashes + to forward slashes so that the settings should work across platforms. + [#10668](https://github.com/rust-lang/cargo/pull/10668) +- The + [`workspace.default-members`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#package-selection) + setting now allows a value of `"."` in a non-virtual workspace to refer to + the root package. + [#10784](https://github.com/rust-lang/cargo/pull/10784) + +### Fixed + +- [CVE-2022-36113](https://github.com/rust-lang/cargo/security/advisories/GHSA-rfj2-q3h3-hm5j): + Extracting malicious crates can corrupt arbitrary files. + [#11089](https://github.com/rust-lang/cargo/pull/11089) + [#11088](https://github.com/rust-lang/cargo/pull/11088) +- [CVE-2022-36114](https://github.com/rust-lang/cargo/security/advisories/GHSA-2hvr-h6gw-qrxp): + Extracting malicious crates can fill the file system. + [#11089](https://github.com/rust-lang/cargo/pull/11089) + [#11088](https://github.com/rust-lang/cargo/pull/11088) +- The `os` output in `cargo --version --verbose` now supports more platforms. + [#10802](https://github.com/rust-lang/cargo/pull/10802) +- Cached git checkouts will now be rebuilt if they are corrupted. This may + happen when using `net.git-fetch-with-cli` and interrupting the clone + process. + [#10829](https://github.com/rust-lang/cargo/pull/10829) +- Fixed panic in `cargo add --offline`. + [#10817](https://github.com/rust-lang/cargo/pull/10817) + + +### Nightly only +- Fixed deserialization of unstable `check-cfg` in `config.toml`. + [#10799](https://github.com/rust-lang/cargo/pull/10799) + + +## Cargo 1.63 (2022-08-11) +[3f052d8e...rust-1.63.0](https://github.com/rust-lang/cargo/compare/3f052d8e...rust-1.63.0) + +### Added + +- 🎉 Added the `--config` CLI option to pass config options directly on the CLI. + [#10755](https://github.com/rust-lang/cargo/pull/10755) +- The `CARGO_PKG_RUST_VERSION` environment variable is now set when compiling + a crate if the manifest has the `rust-version` field set. + [#10713](https://github.com/rust-lang/cargo/pull/10713) + + +### Changed +- A warning is emitted when encountering multiple packages with the same name + in a git dependency. This will ignore packages with `publish=false`. + [#10701](https://github.com/rust-lang/cargo/pull/10701) + [#10767](https://github.com/rust-lang/cargo/pull/10767) +- Change tracking now uses the contents of a `.json` target spec file instead + of its path. This should help avoid rebuilds if the path changes. + [#10746](https://github.com/rust-lang/cargo/pull/10746) +- Git dependencies with a submodule configured with the `update=none` strategy + in `.gitmodules` is now honored, and the submodule will not be fetched. + [#10717](https://github.com/rust-lang/cargo/pull/10717) +- Crate files now use a more recent date (Jul 23, 2006 instead of Nov 29, 1973) + for deterministic behavior. + [#10720](https://github.com/rust-lang/cargo/pull/10720) +- The initial template used for `cargo new` now includes a slightly more + realistic test structure that has `use super::*;` in the test module. + [#10706](https://github.com/rust-lang/cargo/pull/10706) +- Updated the internal HTTP library libcurl with various small fixes and updates. + [#10696](https://github.com/rust-lang/cargo/pull/10696) + +### Fixed +- Fix zsh completions for `cargo add` and `cargo locate-project` + [#10810](https://github.com/rust-lang/cargo/pull/10810) + [#10811](https://github.com/rust-lang/cargo/pull/10811) +- Fixed `-p` being ignored with `cargo publish` in the root of a virtual + workspace. Some additional checks were also added to generate an error if + multiple packages were selected (previously it would pick the first one). + [#10677](https://github.com/rust-lang/cargo/pull/10677) +- The human-readable executable name is no longer displayed for `cargo test` + when using JSON output. + [#10691](https://github.com/rust-lang/cargo/pull/10691) + +### Nightly only + +- Added `-Zcheck-cfg=output` to support build-scripts declaring their + supported set of `cfg` values with `cargo:rustc-check-cfg`. + [#10539](https://github.com/rust-lang/cargo/pull/10539) +- `-Z sparse-registry` now uses https://index.crates.io/ when accessing crates-io. + [#10725](https://github.com/rust-lang/cargo/pull/10725) +- Fixed formatting of `.workspace` key in `cargo add` for workspace inheritance. + [#10705](https://github.com/rust-lang/cargo/pull/10705) +- Sparse HTTP registry URLs must now end with a `/`. + [#10698](https://github.com/rust-lang/cargo/pull/10698) +- Fixed issue with `cargo add` and workspace inheritance of the `default-features` key. + [#10685](https://github.com/rust-lang/cargo/pull/10685) + + + +## Cargo 1.62 (2022-06-30) +[1ef1e0a1...rust-1.62.0](https://github.com/rust-lang/cargo/compare/1ef1e0a1...rust-1.62.0) + +### Added + +- 🎉 Added the `cargo add` command for adding dependencies to `Cargo.toml` from + the command-line. + [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-add.html) + [#10472](https://github.com/rust-lang/cargo/pull/10472) + [#10577](https://github.com/rust-lang/cargo/pull/10577) + [#10578](https://github.com/rust-lang/cargo/pull/10578) +- Package ID specs now support `name@version` syntax in addition to the + previous `name:version` to align with the behavior in `cargo add` and other + tools. `cargo install` and `cargo yank` also now support this syntax so the + version does not need to passed as a separate flag. + [#10582](https://github.com/rust-lang/cargo/pull/10582) + [#10650](https://github.com/rust-lang/cargo/pull/10650) + [#10597](https://github.com/rust-lang/cargo/pull/10597) +- Added the CLI option `-F` as an alias of `--features`. + [#10576](https://github.com/rust-lang/cargo/pull/10576) +- The `git` and `registry` directories in Cargo's home directory (usually + `~/.cargo`) are now marked as cache directories so that they are not + included in backups or content indexing (on Windows). + [#10553](https://github.com/rust-lang/cargo/pull/10553) +- Added the `--version` flag to `cargo yank` to replace the `--vers` flag to + be consistent with `cargo install`. + [#10575](https://github.com/rust-lang/cargo/pull/10575) +- Added automatic `@` argfile support, which will use "response files" if the + command-line to `rustc` exceeds the operating system's limit. + [#10546](https://github.com/rust-lang/cargo/pull/10546) +- `cargo clean` now has a progress bar (if it takes longer than half a second). + [#10236](https://github.com/rust-lang/cargo/pull/10236) + +### Changed + +- `cargo install` no longer generates an error if no binaries were found + to install (such as missing required features). + [#10508](https://github.com/rust-lang/cargo/pull/10508) +- `cargo test` now passes `--target` to `rustdoc` if the specified target is + the same as the host target. + [#10594](https://github.com/rust-lang/cargo/pull/10594) +- `cargo doc` now automatically passes `-Arustdoc::private-intra-doc-links` + when documenting a binary (which automatically includes + `--document-private-items`). The + [`private-intra-doc-links`](https://doc.rust-lang.org/rustdoc/lints.html#private_intra_doc_links) + lint is only relevant when *not* documenting private items, which doesn't + apply to binaries. + [#10142](https://github.com/rust-lang/cargo/pull/10142) +- The length of the short git hash in the `cargo --version` output is now + fixed to 9 characters. Previously the length was inconsistent between + different platforms. + [#10579](https://github.com/rust-lang/cargo/pull/10579) +- Attempting to publish a package with a `Cargo.toml.orig` file will now + result in an error. The filename would otherwise conflict with the + automatically-generated file. + [#10551](https://github.com/rust-lang/cargo/pull/10551) + +### Fixed + +- The `build.dep-info-basedir` configuration setting now properly supports the + use of `..` in the path to refer to a parent directory. + [#10281](https://github.com/rust-lang/cargo/pull/10281) +- Fixed regression in automatic detection of the default number of CPUs to use + on systems using cgroups v1. + [#10737](https://github.com/rust-lang/cargo/pull/10737) + [#10739](https://github.com/rust-lang/cargo/pull/10739) + + +### Nightly only + +- `cargo fetch` now works with `-Zbuild-std` to fetch the standard library's dependencies. + [#10129](https://github.com/rust-lang/cargo/pull/10129) +- Added support for workspace inheritance. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#workspace-inheritance) + [#10584](https://github.com/rust-lang/cargo/pull/10584) + [#10568](https://github.com/rust-lang/cargo/pull/10568) + [#10565](https://github.com/rust-lang/cargo/pull/10565) + [#10564](https://github.com/rust-lang/cargo/pull/10564) + [#10563](https://github.com/rust-lang/cargo/pull/10563) + [#10606](https://github.com/rust-lang/cargo/pull/10606) + [#10548](https://github.com/rust-lang/cargo/pull/10548) + [#10538](https://github.com/rust-lang/cargo/pull/10538) +- Added `-Zcheck-cfg` which adds various forms of validating `cfg` expressions + for unknown names and values. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#check-cfg) + [#10486](https://github.com/rust-lang/cargo/pull/10486) + [#10566](https://github.com/rust-lang/cargo/pull/10566) +- The `--config` CLI option no longer allows setting a registry token. + [#10580](https://github.com/rust-lang/cargo/pull/10580) +- Fixed issues with proc-macros and `-Z rustdoc-scrape-examples`. + [#10549](https://github.com/rust-lang/cargo/pull/10549) + [#10533](https://github.com/rust-lang/cargo/pull/10533) + + +## Cargo 1.61 (2022-05-19) +[ea2a21c9...rust-1.61.0](https://github.com/rust-lang/cargo/compare/ea2a21c9...rust-1.61.0) + +### Added + +### Changed + +- `cargo test --no-run` will now display the path to the test executables. + [#10346](https://github.com/rust-lang/cargo/pull/10346) +- `cargo tree --duplicates` no longer reports dependencies that are shared + between the host and the target as duplicates. + [#10466](https://github.com/rust-lang/cargo/pull/10466) +- Updated to the 1.4.2 release of libgit2 which brings in several fixes + [#10442](https://github.com/rust-lang/cargo/pull/10442) + [#10479](https://github.com/rust-lang/cargo/pull/10479) +- `cargo vendor` no longer allows multiple values for `--sync`, you must pass + multiple `--sync` flags instead. + [#10448](https://github.com/rust-lang/cargo/pull/10448) +- Warnings are now issued for manifest keys that have mixed both underscore + and dash variants (such as specifying both `proc_macro` and `proc-macro`) + [#10316](https://github.com/rust-lang/cargo/pull/10316) +- Cargo now uses the standard library's `available_parallelism` instead of the + `num_cpus` crate for determining the default parallelism. + [#10427](https://github.com/rust-lang/cargo/pull/10427) +- `cargo search` terms are now highlighted. + [#10425](https://github.com/rust-lang/cargo/pull/10425) + +### Fixed + +- Paths passed to VCS tools like `hg` are now added after `--` to avoid + conflict with VCS flags. + [#10483](https://github.com/rust-lang/cargo/pull/10483) +- Fixed the `http.timeout` configuration value to actually work. + [#10456](https://github.com/rust-lang/cargo/pull/10456) +- Fixed issues with `cargo rustc --crate-type` not working in some situations. + [#10388](https://github.com/rust-lang/cargo/pull/10388) + +### Nightly only + +- Added `-Z check-cfg-features` to enable compile-time checking of features + [#10408](https://github.com/rust-lang/cargo/pull/10408) +- Added `-Z bindeps` to support binary artifact dependencies (RFC-3028) + [#9992](https://github.com/rust-lang/cargo/pull/9992) +- `-Z multitarget` is now supported in the `build.target` config value with an array. + [#10473](https://github.com/rust-lang/cargo/pull/10473) +- Added `--keep-going` flag which will continue compilation even if one crate + fails to compile. + [#10383](https://github.com/rust-lang/cargo/pull/10383) +- Start work on inheriting manifest values in a workspace. + [#10497](https://github.com/rust-lang/cargo/pull/10497) + [#10517](https://github.com/rust-lang/cargo/pull/10517) +- Added support for sparse HTTP registries. + [#10470](https://github.com/rust-lang/cargo/pull/10470) + [#10064](https://github.com/rust-lang/cargo/pull/10064) +- Fixed panic when artifact target is used for `[target.'cfg()'.dependencies]` + [#10433](https://github.com/rust-lang/cargo/pull/10433) +- Fixed host flags to pass to build scripts (`-Z target-applies-to-host`) + [#10395](https://github.com/rust-lang/cargo/pull/10395) +- Added `-Z check-cfg-features` support for rustdoc + [#10428](https://github.com/rust-lang/cargo/pull/10428) + + +## Cargo 1.60 (2022-04-07) +[358e79fe...rust-1.60.0](https://github.com/rust-lang/cargo/compare/358e79fe...rust-1.60.0) + +### Added + +- 🎉 Added the `dep:` prefix in the `[features]` table to refer to an optional + dependency. This allows creating feature names with the same name as a + dependency, and allows for "hiding" optional dependencies so that they do + not implicitly expose a feature name. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/features.html#optional-dependencies) + [#10269](https://github.com/rust-lang/cargo/pull/10269) +- 🎉 Added the `dep-name?/feature-name` syntax to the `[features]` table to + only enable the feature `feature-name` if the optional dependency `dep-name` + is already enabled by some other feature. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/features.html#dependency-features) + [#10269](https://github.com/rust-lang/cargo/pull/10269) +- 🎉 Added `--timings` option to generate an HTML report about build timing, + concurrency, and CPU use. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/timings.html) + [#10245](https://github.com/rust-lang/cargo/pull/10245) +- Added the `"v"` and `"features2"` fields to the registry index. + The `"v"` field provides a method for compatibility with future changes to the index. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/registries.html#index-format) + [#10269](https://github.com/rust-lang/cargo/pull/10269) +- Added bash completion for `cargo clippy` + [#10347](https://github.com/rust-lang/cargo/pull/10347) +- Added bash completion for `cargo report` + [#10295](https://github.com/rust-lang/cargo/pull/10295) +- Added support to build scripts for `rustc-link-arg-tests`, + `rustc-link-arg-examples`, and `rustc-link-arg-benches`. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/build-scripts.html#outputs-of-the-build-script) + [#10274](https://github.com/rust-lang/cargo/pull/10274) + +### Changed + +- Cargo now uses the clap 3 library for command-line argument parsing. + [#10265](https://github.com/rust-lang/cargo/pull/10265) +- The `build.pipelining` config option is now deprecated, pipelining will now + always be enabled. + [#10258](https://github.com/rust-lang/cargo/pull/10258) +- `cargo new` will now generate a `.gitignore` which only ignores `Cargo.lock` + in the root of the repo, instead of any directory. + [#10379](https://github.com/rust-lang/cargo/pull/10379) +- Improved startup time of bash completion. + [#10365](https://github.com/rust-lang/cargo/pull/10365) +- The `--features` flag is now honored when used with the `--all-features` + flag, which allows enabling features from other packages. + [#10337](https://github.com/rust-lang/cargo/pull/10337) +- Cargo now uses a different TOML parser. This should not introduce any + user-visible changes. This paves the way to support format-preserving + programmatic modification of TOML files for supporting `cargo add` and other + future enhancements. + [#10086](https://github.com/rust-lang/cargo/pull/10086) +- Setting a library to emit both a `dylib` and `cdylib` is now an error, as + this combination is not supported. + [#10243](https://github.com/rust-lang/cargo/pull/10243) +- `cargo --list` now includes the `help` command. + [#10300](https://github.com/rust-lang/cargo/pull/10300) + +### Fixed + +- Fixed running `cargo doc` on examples with dev-dependencies. + [#10341](https://github.com/rust-lang/cargo/pull/10341) +- Fixed `cargo install --path` for a path that is relative to a directory + outside of the workspace in the current directory. + [#10335](https://github.com/rust-lang/cargo/pull/10335) +- `cargo test TEST_FILTER` should no longer build binaries that are explicitly + disabled with `test = false`. + [#10305](https://github.com/rust-lang/cargo/pull/10305) +- Fixed regression with `term.verbose` without `term.quiet`, and vice versa. + [#10429](https://github.com/rust-lang/cargo/pull/10429) + [#10436](https://github.com/rust-lang/cargo/pull/10436) + +### Nightly only + +- Added `rustflags` option to a profile definition. + [#10217](https://github.com/rust-lang/cargo/pull/10217) +- Changed `--config` to only support dotted keys. + [#10176](https://github.com/rust-lang/cargo/pull/10176) +- Fixed profile `rustflags` not being gated in profile overrides. + [#10411](https://github.com/rust-lang/cargo/pull/10411) + [#10413](https://github.com/rust-lang/cargo/pull/10413) + +## Cargo 1.59 (2022-02-24) +[7f08ace4...rust-1.59.0](https://github.com/rust-lang/cargo/compare/7f08ace4...rust-1.59.0) + +### Added + +- 🎉 The `strip` option can now be specified in a profile to specify the + behavior for removing symbols and debug information from binaries. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/profiles.html#strip) + [#10088](https://github.com/rust-lang/cargo/pull/10088) + [#10376](https://github.com/rust-lang/cargo/pull/10376) +- 🎉 Added future incompatible reporting. + This provides reporting for when a future change in `rustc` may cause a + package or any of its dependencies to stop building. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/future-incompat-report.html) + [#10165](https://github.com/rust-lang/cargo/pull/10165) +- SSH authentication on Windows now supports ssh-agent. + [docs](https://doc.rust-lang.org/nightly/cargo/appendix/git-authentication.html#ssh-authentication) + [#10248](https://github.com/rust-lang/cargo/pull/10248) +- Added `term.quiet` configuration option to enable the `--quiet` behavior + from a config file. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/config.html#termquiet) + [#10152](https://github.com/rust-lang/cargo/pull/10152) +- Added `-r` CLI option as an alias for `--release`. + [#10133](https://github.com/rust-lang/cargo/pull/10133) + +### Changed + +- Scanning the package directory should now be resilient to errors, such as + filesystem loops or access issues. + [#10188](https://github.com/rust-lang/cargo/pull/10188) + [#10214](https://github.com/rust-lang/cargo/pull/10214) + [#10286](https://github.com/rust-lang/cargo/pull/10286) +- `cargo help ` will now show the target of the alias. + [#10193](https://github.com/rust-lang/cargo/pull/10193) +- Removed the deprecated `--host` CLI option. + [#10145](https://github.com/rust-lang/cargo/pull/10145) + [#10327](https://github.com/rust-lang/cargo/pull/10327) +- Cargo should now report its version to always be in sync with `rustc`. + [#10178](https://github.com/rust-lang/cargo/pull/10178) +- Added EOPNOTSUPP to ignored file locking errors, which is relevant to BSD + operating systems. + [#10157](https://github.com/rust-lang/cargo/pull/10157) + +### Fixed + +- macOS: Fixed an issue where running an executable would sporadically be + killed by the kernel (likely starting in macOS 12). + [#10196](https://github.com/rust-lang/cargo/pull/10196) +- Fixed so that the `doc=false` setting is honored in the `[lib]` definition + of a dependency. + [#10201](https://github.com/rust-lang/cargo/pull/10201) + [#10324](https://github.com/rust-lang/cargo/pull/10324) +- The `"executable"` field in the JSON option was incorrectly including the + path to `index.html` when documenting a binary. It is now null. + [#10171](https://github.com/rust-lang/cargo/pull/10171) +- Documenting a binary now waits for the package library to finish documenting + before starting. This fixes some race conditions if the binary has intra-doc + links to the library. + [#10172](https://github.com/rust-lang/cargo/pull/10172) +- Fixed panic when displaying help text to a closed pipe. + [#10164](https://github.com/rust-lang/cargo/pull/10164) + +### Nightly only +- Added the `--crate-type` flag to `cargo rustc`. + [#10093](https://github.com/rust-lang/cargo/pull/10093) + + +## Cargo 1.58 (2022-01-13) +[b2e52d7c...rust-1.58.0](https://github.com/rust-lang/cargo/compare/b2e52d7c...rust-1.58.0) + +### Added + +- Added `rust_version` field to package data in `cargo metadata`. + [#9967](https://github.com/rust-lang/cargo/pull/9967) +- Added `--message-format` option to `cargo install`. + [#10107](https://github.com/rust-lang/cargo/pull/10107) + +### Changed + +- A warning is now shown when an alias shadows an external command. + [#10082](https://github.com/rust-lang/cargo/pull/10082) +- Updated curl to 7.80.0. + [#10040](https://github.com/rust-lang/cargo/pull/10040) + [#10106](https://github.com/rust-lang/cargo/pull/10106) + +### Fixed + +- Doctests now include rustc-link-args from build scripts. + [#9916](https://github.com/rust-lang/cargo/pull/9916) +- Fixed `cargo tree` entering an infinite loop with cyclical dev-dependencies. + Fixed an edge case where the resolver would fail to handle a cyclical dev-dependency with a feature. + [#10103](https://github.com/rust-lang/cargo/pull/10103) +- Fixed `cargo clean -p` when the directory path contains glob characters. + [#10072](https://github.com/rust-lang/cargo/pull/10072) +- Fixed debug builds of `cargo` which could panic when downloading a crate + when the server has a redirect with a non-empty body. + [#10048](https://github.com/rust-lang/cargo/pull/10048) + +### Nightly only + +- Make future-incompat-report output more user-friendly. + [#9953](https://github.com/rust-lang/cargo/pull/9953) +- Added support to scrape code examples from the `examples` directory to be included in the documentation. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#scrape-examples) + [#9525](https://github.com/rust-lang/cargo/pull/9525) + [#10037](https://github.com/rust-lang/cargo/pull/10037) + [#10017](https://github.com/rust-lang/cargo/pull/10017) +- Fixed `cargo report future-incompatibilities` to check stdout if it supports color. + [#10024](https://github.com/rust-lang/cargo/pull/10024) + +## Cargo 1.57 (2021-12-02) +[18751dd3...rust-1.57.0](https://github.com/rust-lang/cargo/compare/18751dd3...rust-1.57.0) + +### Added + +- 🎉 Added custom named profiles. This also changes the `test` and `bench` + profiles to inherit their settings from `dev` and `release`, and Cargo will + now only use a single profile during a given command instead of using + different profiles for dependencies and cargo-targets. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/profiles.html#custom-profiles) + [#9943](https://github.com/rust-lang/cargo/pull/9943) +- The `rev` option for a git dependency now supports git references that start + with `refs/`. An example where this can be used is to depend on a pull + request from a service like GitHub before it is merged. + [#9859](https://github.com/rust-lang/cargo/pull/9859) +- Added `path_in_vcs` field to the `.cargo_vcs_info.json` file. + [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-package.html#cargo_vcs_infojson-format) + [#9866](https://github.com/rust-lang/cargo/pull/9866) + +### Changed + +- ❗ `RUSTFLAGS` is no longer set for build scripts. This change was made in + 1.55, but the release notes did not highlight this change. Build scripts + should use `CARGO_ENCODED_RUSTFLAGS` instead. See the + [documentation](https://doc.rust-lang.org/nightly/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts) + for more details. +- The `cargo version` command now includes some extra information. + [#9968](https://github.com/rust-lang/cargo/pull/9968) +- Updated libgit2 to 1.3 which brings in a number of fixes and changes to git + handling. + [#9963](https://github.com/rust-lang/cargo/pull/9963) + [#9988](https://github.com/rust-lang/cargo/pull/9988) +- Shell completions now include shorthand b/r/c/d subcommands. + [#9951](https://github.com/rust-lang/cargo/pull/9951) +- `cargo update --precise` now allows specifying a version without semver + metadata (stuff after `+` in the version number). + [#9945](https://github.com/rust-lang/cargo/pull/9945) +- zsh completions now complete `--example` names. + [#9939](https://github.com/rust-lang/cargo/pull/9939) +- The progress bar now differentiates when building unittests. + [#9934](https://github.com/rust-lang/cargo/pull/9934) +- Some backwards-compatibility support for invalid TOML syntax has been removed. + [#9932](https://github.com/rust-lang/cargo/pull/9932) +- Reverted the change from 1.55 that triggered an error for dependency + specifications that did not include any fields. + [#9911](https://github.com/rust-lang/cargo/pull/9911) + +### Fixed + +- Removed a log message (from `CARGO_LOG`) that may leak tokens. + [#9873](https://github.com/rust-lang/cargo/pull/9873) +- `cargo fix` will now avoid writing fixes to the global registry cache. + [#9938](https://github.com/rust-lang/cargo/pull/9938) +- Fixed `-Z help` CLI option when used with a shorthand alias (b/c/r/d). + [#9933](https://github.com/rust-lang/cargo/pull/9933) + + +### Nightly only + + +## Cargo 1.56 (2021-10-21) +[cebef295...rust-1.56.0](https://github.com/rust-lang/cargo/compare/cebef295...rust-1.56.0) + +### Added + +- 🎉 Cargo now supports the 2021 edition. + More information may be found in the [edition + guide](https://doc.rust-lang.org/nightly/edition-guide/rust-2021/index.html). + [#9800](https://github.com/rust-lang/cargo/pull/9800) +- 🎉 Added the + [`rust-version`](https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-rust-version-field) + field to `Cargo.toml` to specify the minimum supported Rust version, and the + `--ignore-rust-version` command line option to override it. + [#9732](https://github.com/rust-lang/cargo/pull/9732) +- Added the `[env]` table to config files to specify environment variables to + set. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/config.html#env) + [#9411](https://github.com/rust-lang/cargo/pull/9411) +- `[patch]` tables may now be specified in config files. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/config.html#patch) + [#9839](https://github.com/rust-lang/cargo/pull/9839) +- `cargo doc` now supports the `--example` and `--examples` flags. + [#9808](https://github.com/rust-lang/cargo/pull/9808) +- 🎉 Build scripts can now pass additional linker arguments for binaries or all + linkable targets. [docs](https://doc.rust-lang.org/nightly/cargo/reference/build-scripts.html#outputs-of-the-build-script) + [#9557](https://github.com/rust-lang/cargo/pull/9557) +- Added support for the `-p` flag for `cargo publish` to publish a specific + package in a workspace. `cargo package` also now supports `-p` and + `--workspace`. + [#9559](https://github.com/rust-lang/cargo/pull/9559) +- Added documentation about third-party registries. + [#9830](https://github.com/rust-lang/cargo/pull/9830) +- Added the `{sha256-checksum}` placeholder for URLs in a registry `config.json`. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/registries.html#index-format) + [#9801](https://github.com/rust-lang/cargo/pull/9801) +- Added a warning when a dependency does not have a library. + [#9771](https://github.com/rust-lang/cargo/pull/9771) + +### Changed + +- Doc tests now support the `-q` flag to show terse test output. + [#9730](https://github.com/rust-lang/cargo/pull/9730) +- `features` used in a `[replace]` table now issues a warning, as they are ignored. + [#9681](https://github.com/rust-lang/cargo/pull/9681) +- Changed so that only `wasm32-unknown-emscripten` executables are built + without a hash in the filename. Previously it was all `wasm32` targets. + Additionally, all `apple` binaries are now built with a hash in the + filename. This allows multiple copies to be cached at once, and matches the + behavior on other platforms (except `msvc`). + [#9653](https://github.com/rust-lang/cargo/pull/9653) +- `cargo new` now generates an example that doesn't generate a warning with + clippy. + [#9796](https://github.com/rust-lang/cargo/pull/9796) +- `cargo fix --edition` now only applies edition-specific lints. + [#9846](https://github.com/rust-lang/cargo/pull/9846) +- Improve resolver message to include dependency requirements. + [#9827](https://github.com/rust-lang/cargo/pull/9827) +- `cargo fix` now has more debug logging available with the `CARGO_LOG` + environment variable. + [#9831](https://github.com/rust-lang/cargo/pull/9831) +- Changed `cargo fix --edition` to emit a warning when on the latest stable + edition when running on stable instead of generating an error. + [#9792](https://github.com/rust-lang/cargo/pull/9792) +- `cargo install` will now determine all of the packages to install before + starting the installation, which should help with reporting errors without + partially installing. + [#9793](https://github.com/rust-lang/cargo/pull/9793) +- The resolver report for `cargo fix --edition` now includes differences for + dev-dependencies. + [#9803](https://github.com/rust-lang/cargo/pull/9803) +- `cargo fix` will now show better diagnostics for abnormal errors from `rustc`. + [#9799](https://github.com/rust-lang/cargo/pull/9799) +- Entries in `cargo --list` are now deduplicated. + [#9773](https://github.com/rust-lang/cargo/pull/9773) +- Aliases are now included in `cargo --list`. + [#9764](https://github.com/rust-lang/cargo/pull/9764) + +### Fixed + +- Fixed panic with build-std of a proc-macro. + [#9834](https://github.com/rust-lang/cargo/pull/9834) +- Fixed running `cargo` recursively from proc-macros while running `cargo fix`. + [#9818](https://github.com/rust-lang/cargo/pull/9818) +- Return an error instead of a stack overflow for command alias loops. + [#9791](https://github.com/rust-lang/cargo/pull/9791) +- Updated to curl 7.79.1, which will hopefully fix intermittent http2 errors. + [#9937](https://github.com/rust-lang/cargo/pull/9937) + +### Nightly only + +- Added `[future-incompat-report]` config section. + [#9774](https://github.com/rust-lang/cargo/pull/9774) +- Fixed value-after-table error with custom named profiles. + [#9789](https://github.com/rust-lang/cargo/pull/9789) +- Added the `different-binary-name` feature to support specifying a + non-rust-identifier for a binary name. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#different-binary-name) + [#9627](https://github.com/rust-lang/cargo/pull/9627) +- Added a profile option to select the codegen backend. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#codegen-backend) + [#9118](https://github.com/rust-lang/cargo/pull/9118) + + +## Cargo 1.55 (2021-09-09) +[aa8b0929...rust-1.55.0](https://github.com/rust-lang/cargo/compare/aa8b0929...rust-1.55.0) + +### Added + +- The package definition in `cargo metadata` now includes the `"default_run"` + field from the manifest. + [#9550](https://github.com/rust-lang/cargo/pull/9550) +- ❗ Build scripts now have access to the following environment variables: + `RUSTC_WRAPPER`, `RUSTC_WORKSPACE_WRAPPER`, `CARGO_ENCODED_RUSTFLAGS`. + `RUSTFLAGS` is no longer set for build scripts; they should use + `CARGO_ENCODED_RUSTFLAGS` instead. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts) + [#9601](https://github.com/rust-lang/cargo/pull/9601) +- Added `cargo d` as an alias for `cargo doc`. + [#9680](https://github.com/rust-lang/cargo/pull/9680) +- Added `{lib}` to the `cargo tree --format` option to display the library + name of a package. + [#9663](https://github.com/rust-lang/cargo/pull/9663) +- Added `members_mut` method to the `Workspace` API. + [#9547](https://github.com/rust-lang/cargo/pull/9547) + +### Changed + +- If a build command does not match any targets when using the + `--all-targets`, `--bins`, `--tests`, `--examples`, or `--benches` flags, a + warning is now displayed to inform you that there were no matching targets. + [#9549](https://github.com/rust-lang/cargo/pull/9549) +- The way `cargo init` detects whether or not existing source files represent + a binary or library has been changed to respect the command-line flags + instead of trying to guess which type it is. + [#9522](https://github.com/rust-lang/cargo/pull/9522) +- Registry names are now displayed instead of registry URLs when possible. + [#9632](https://github.com/rust-lang/cargo/pull/9632) +- Duplicate compiler diagnostics are no longer shown. This can often happen + with `cargo test` which builds multiple copies of the same code in parallel. + This also updates the warning summary to provide more context. + [#9675](https://github.com/rust-lang/cargo/pull/9675) +- The output for warnings or errors is now improved to be leaner, cleaner, and + show more context. + [#9655](https://github.com/rust-lang/cargo/pull/9655) +- Network send errors are now treated as "spurious" which means they will be retried. + [#9695](https://github.com/rust-lang/cargo/pull/9695) +- Git keys (`branch`, `tag`, `rev`) on a non-git dependency are now an error. + Additionally, specifying both `git` and `path` is now an error. + [#9689](https://github.com/rust-lang/cargo/pull/9689) +- Specifying a dependency without any keys is now an error. + [#9686](https://github.com/rust-lang/cargo/pull/9686) +- The resolver now prefers to use `[patch]` table entries of dependencies when + possible. + [#9639](https://github.com/rust-lang/cargo/pull/9639) +- Package name typo errors in dependencies are now displayed aligned with the + original to help make it easier to see the difference. + [#9665](https://github.com/rust-lang/cargo/pull/9665) +- Windows platforms may now warn on environment variables that have the wrong case. + [#9654](https://github.com/rust-lang/cargo/pull/9654) +- `features` used in a `[patch]` table now issues a warning, as they are ignored. + [#9666](https://github.com/rust-lang/cargo/pull/9666) +- The `target` directory is now excluded from content indexing on Windows. + [#9635](https://github.com/rust-lang/cargo/pull/9635) +- When `Cargo.toml` is not found, the error message now detects if it was + misnamed with a lowercase `c` to suggest the correct form. + [#9607](https://github.com/rust-lang/cargo/pull/9607) +- Building `diesel` with the new resolver displays a compatibility notice. + [#9602](https://github.com/rust-lang/cargo/pull/9602) +- Updated the `opener` dependency, which handles opening a web browser, which + includes several changes, such as new behavior when run on WSL, and using + the system `xdg-open` on Linux. + [#9583](https://github.com/rust-lang/cargo/pull/9583) +- Updated to libcurl 7.78. + [#9809](https://github.com/rust-lang/cargo/pull/9809) + [#9810](https://github.com/rust-lang/cargo/pull/9810) + +### Fixed + +- Fixed dep-info files including non-local build script paths. + [#9596](https://github.com/rust-lang/cargo/pull/9596) +- Handle "jobs = 0" case in cargo config files + [#9584](https://github.com/rust-lang/cargo/pull/9584) +- Implement warning for ignored trailing arguments after `--` + [#9561](https://github.com/rust-lang/cargo/pull/9561) +- Fixed rustc/rustdoc config values to be config-relative. + [#9566](https://github.com/rust-lang/cargo/pull/9566) +- `cargo fix` now supports rustc's suggestions with multiple spans. + [#9567](https://github.com/rust-lang/cargo/pull/9567) +- `cargo fix` now fixes each target serially instead of in parallel to avoid + problems with fixing the same file concurrently. + [#9677](https://github.com/rust-lang/cargo/pull/9677) +- Changes to the target `linker` config value now trigger a rebuild. + [#9647](https://github.com/rust-lang/cargo/pull/9647) +- Git unstaged deleted files are now ignored when using the `--allow-dirty` + flag with `cargo publish` or `cargo package`. + [#9645](https://github.com/rust-lang/cargo/pull/9645) + +### Nightly only + +- Enabled support for `cargo fix --edition` for 2021. + [#9588](https://github.com/rust-lang/cargo/pull/9588) +- Several changes to named profiles. + [#9685](https://github.com/rust-lang/cargo/pull/9685) +- Extended instructions on what to do when running `cargo fix --edition` on + the 2021 edition. + [#9694](https://github.com/rust-lang/cargo/pull/9694) +- Multiple updates to error messages using nightly features to help better + explain the situation. + [#9657](https://github.com/rust-lang/cargo/pull/9657) +- Adjusted the edition 2021 resolver diff report. + [#9649](https://github.com/rust-lang/cargo/pull/9649) +- Fixed error using `cargo doc --open` with `doc.extern-map`. + [#9531](https://github.com/rust-lang/cargo/pull/9531) +- Unified weak and namespaced features. + [#9574](https://github.com/rust-lang/cargo/pull/9574) +- Various updates to future-incompatible reporting. + [#9606](https://github.com/rust-lang/cargo/pull/9606) +- `[env]` environment variables are not allowed to set vars set by Cargo. + [#9579](https://github.com/rust-lang/cargo/pull/9579) + +## Cargo 1.54 (2021-07-29) +[4369396c...rust-1.54.0](https://github.com/rust-lang/cargo/compare/4369396c...rust-1.54.0) + +### Added + +- Fetching from a git repository (such as the crates.io index) now displays + the network transfer rate. + [#9395](https://github.com/rust-lang/cargo/pull/9395) +- Added `--prune` option for `cargo tree` to limit what is displayed. + [#9520](https://github.com/rust-lang/cargo/pull/9520) +- Added `--depth` option for `cargo tree` to limit what is displayed. + [#9499](https://github.com/rust-lang/cargo/pull/9499) +- Added `cargo tree -e no-proc-macro` to hide procedural macro dependencies. + [#9488](https://github.com/rust-lang/cargo/pull/9488) +- Added `doc.browser` config option to set which browser to open with `cargo doc --open`. + [#9473](https://github.com/rust-lang/cargo/pull/9473) +- Added `CARGO_TARGET_TMPDIR` environment variable set for integration tests & + benches. This provides a temporary or "scratch" directory in the `target` + directory for tests and benches to use. + [#9375](https://github.com/rust-lang/cargo/pull/9375) + +### Changed + +- `--features` CLI flags now provide typo suggestions with the new feature resolver. + [#9420](https://github.com/rust-lang/cargo/pull/9420) +- Cargo now uses a new parser for SemVer versions. This should behave mostly + the same as before with some minor exceptions where invalid syntax for + version requirements is now rejected. + [#9508](https://github.com/rust-lang/cargo/pull/9508) +- Mtime handling of `.crate` published packages has changed slightly to avoid + mtime values of 0. This was causing problems with lldb which refused to read + those files. + [#9517](https://github.com/rust-lang/cargo/pull/9517) +- Improved performance of git status check in `cargo package`. + [#9478](https://github.com/rust-lang/cargo/pull/9478) +- `cargo new` with fossil now places the ignore settings in the new repository + instead of using `fossil settings` to set them globally. This also includes + several other cleanups to make it more consistent with other VCS + configurations. + [#9469](https://github.com/rust-lang/cargo/pull/9469) +- `rustc-cdylib-link-arg` applying transitively displays a warning that this + was not intended, and may be an error in the future. + [#9563](https://github.com/rust-lang/cargo/pull/9563) + +### Fixed + +- Fixed `package.exclude` in `Cargo.toml` using inverted exclusions + (`!somefile`) when not in a git repository or when vendoring a dependency. + [#9186](https://github.com/rust-lang/cargo/pull/9186) +- Dep-info files now adjust build script `rerun-if-changed` paths to be + absolute paths. + [#9421](https://github.com/rust-lang/cargo/pull/9421) +- Fixed a bug when with resolver = "1" non-virtual package was allowing + unknown features. + [#9437](https://github.com/rust-lang/cargo/pull/9437) +- Fixed an issue with the index cache mishandling versions that only + differed in build metadata (such as `110.0.0` and `110.0.0+1.1.0f`). + [#9476](https://github.com/rust-lang/cargo/pull/9476) +- Fixed `cargo install` with a semver metadata version. + [#9467](https://github.com/rust-lang/cargo/pull/9467) + +### Nightly only + +- Added `report` subcommand, and changed `cargo + describe-future-incompatibilitie` to `cargo report + future-incompatibilities`. + [#9438](https://github.com/rust-lang/cargo/pull/9438) +- Added a `[host]` table to the config files to be able to set build flags for + host target. Also added `target-applies-to-host` to control how the + `[target]` tables behave. + [#9322](https://github.com/rust-lang/cargo/pull/9322) +- Added some validation to build script `rustc-link-arg-*` instructions to + return an error if the target doesn't exist. + [#9523](https://github.com/rust-lang/cargo/pull/9523) +- Added `cargo:rustc-link-arg-bin` instruction for build scripts. + [#9486](https://github.com/rust-lang/cargo/pull/9486) + + +## Cargo 1.53 (2021-06-17) +[90691f2b...rust-1.53.0](https://github.com/rust-lang/cargo/compare/90691f2b...rust-1.53.0) + +### Added + +### Changed +- 🔥 Cargo now supports git repositories where the default `HEAD` branch is not + "master". This also includes a switch to the version 3 `Cargo.lock` format + which can handle default branches correctly. + [#9133](https://github.com/rust-lang/cargo/pull/9133) + [#9397](https://github.com/rust-lang/cargo/pull/9397) + [#9384](https://github.com/rust-lang/cargo/pull/9384) + [#9392](https://github.com/rust-lang/cargo/pull/9392) +- 🔥 macOS targets now default to `unpacked` split-debuginfo. + [#9298](https://github.com/rust-lang/cargo/pull/9298) +- ❗ The `authors` field is no longer included in `Cargo.toml` for new + projects. + [#9282](https://github.com/rust-lang/cargo/pull/9282) +- `cargo update` may now work with the `--offline` flag. + [#9279](https://github.com/rust-lang/cargo/pull/9279) +- `cargo doc` will now erase the `doc` directory when switching between + different toolchain versions. There are shared, unversioned files (such as + the search index) that can become broken when using different versions. + [#8640](https://github.com/rust-lang/cargo/pull/8640) + [#9404](https://github.com/rust-lang/cargo/pull/9404) +- Improved error messages when path dependency/workspace member is missing. + [#9368](https://github.com/rust-lang/cargo/pull/9368) + +### Fixed +- Fixed `cargo doc` detecting if the documentation needs to be rebuilt when + changing some settings such as features. + [#9419](https://github.com/rust-lang/cargo/pull/9419) +- `cargo doc` now deletes the output directory for the package before running + rustdoc to clear out any stale files. + [#9419](https://github.com/rust-lang/cargo/pull/9419) +- Fixed the `-C metadata` value to always include all information for all + builds. Previously, in some situations, the hash only included the package + name and version. This fixes some issues, such as incremental builds with + split-debuginfo on macOS corrupting the incremental cache in some cases. + [#9418](https://github.com/rust-lang/cargo/pull/9418) +- Fixed man pages not working on Windows if `man` is in `PATH`. + [#9378](https://github.com/rust-lang/cargo/pull/9378) +- The `rustc` cache is now aware of `RUSTC_WRAPPER` and `RUSTC_WORKSPACE_WRAPPER`. + [#9348](https://github.com/rust-lang/cargo/pull/9348) +- Track the `CARGO` environment variable in the rebuild fingerprint if the + code uses `env!("CARGO")`. + [#9363](https://github.com/rust-lang/cargo/pull/9363) + +### Nightly only +- Fixed config includes not working. + [#9299](https://github.com/rust-lang/cargo/pull/9299) +- Emit note when `--future-incompat-report` had nothing to report. + [#9263](https://github.com/rust-lang/cargo/pull/9263) +- Error messages for nightly features flags (like `-Z` and `cargo-features`) + now provides more information. + [#9290](https://github.com/rust-lang/cargo/pull/9290) +- Added the ability to set the target for an individual package in `Cargo.toml`. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#per-package-target) + [#9030](https://github.com/rust-lang/cargo/pull/9030) +- Fixed build-std updating the index on every build. + [#9393](https://github.com/rust-lang/cargo/pull/9393) +- `-Z help` now displays all the `-Z` options. + [#9369](https://github.com/rust-lang/cargo/pull/9369) +- Added `-Zallow-features` to specify which nightly features are allowed to be used. + [#9283](https://github.com/rust-lang/cargo/pull/9283) +- Added `cargo config` subcommand. + [#9302](https://github.com/rust-lang/cargo/pull/9302) + +## Cargo 1.52 (2021-05-06) +[34170fcd...rust-1.52.0](https://github.com/rust-lang/cargo/compare/34170fcd...rust-1.52.0) + +### Added +- Added the `"manifest_path"` field to JSON messages for a package. + [#9022](https://github.com/rust-lang/cargo/pull/9022) + [#9247](https://github.com/rust-lang/cargo/pull/9247) + +### Changed +- Build scripts are now forbidden from setting `RUSTC_BOOTSTRAP` on stable. + [#9181](https://github.com/rust-lang/cargo/pull/9181) + [#9385](https://github.com/rust-lang/cargo/pull/9385) +- crates.io now supports SPDX 3.11 licenses. + [#9209](https://github.com/rust-lang/cargo/pull/9209) +- An error is now reported if `CARGO_TARGET_DIR` is an empty string. + [#8939](https://github.com/rust-lang/cargo/pull/8939) +- Doc tests now pass the `--message-format` flag into the test so that the + "short" format can now be used for doc tests. + [#9128](https://github.com/rust-lang/cargo/pull/9128) +- `cargo test` now prints a clearer indicator of which target is currently running. + [#9195](https://github.com/rust-lang/cargo/pull/9195) +- The `CARGO_TARGET_` environment variable will now issue a warning if + it is using lowercase letters. + [#9169](https://github.com/rust-lang/cargo/pull/9169) + +### Fixed +- Fixed publication of packages with metadata and resolver fields in `Cargo.toml`. + [#9300](https://github.com/rust-lang/cargo/pull/9300) + [#9304](https://github.com/rust-lang/cargo/pull/9304) +- Fixed logic for determining prefer-dynamic for a dylib which differed in a + workspace vs a single package. + [#9252](https://github.com/rust-lang/cargo/pull/9252) +- Fixed an issue where exclusive target-specific dependencies that overlapped + across dependency kinds (like regular and build-dependencies) would + incorrectly include the dependencies in both. + [#9255](https://github.com/rust-lang/cargo/pull/9255) +- Fixed panic with certain styles of Package IDs when passed to the `-p` flag. + [#9188](https://github.com/rust-lang/cargo/pull/9188) +- When running cargo with output not going to a TTY, and with the progress bar + and color force-enabled, the output will now correctly clear the progress + line. + [#9231](https://github.com/rust-lang/cargo/pull/9231) +- Error instead of panic when JSON may contain non-utf8 paths. + [#9226](https://github.com/rust-lang/cargo/pull/9226) +- Fixed a hang that can happen on broken stderr. + [#9201](https://github.com/rust-lang/cargo/pull/9201) +- Fixed thin-local LTO not being disabled correctly when `lto=off` is set. + [#9182](https://github.com/rust-lang/cargo/pull/9182) + +### Nightly only +- The `strip` profile option now supports `true` and `false` values. + [#9153](https://github.com/rust-lang/cargo/pull/9153) +- `cargo fix --edition` now displays a report when switching to 2021 if the + new resolver changes features. + [#9268](https://github.com/rust-lang/cargo/pull/9268) +- Added `[patch]` table support in `.cargo/config` files. + [#9204](https://github.com/rust-lang/cargo/pull/9204) +- Added `cargo describe-future-incompatibilities` for generating a report on + dependencies that contain future-incompatible warnings. + [#8825](https://github.com/rust-lang/cargo/pull/8825) +- Added easier support for testing the 2021 edition. + [#9184](https://github.com/rust-lang/cargo/pull/9184) +- Switch the default resolver to "2" in the 2021 edition. + [#9184](https://github.com/rust-lang/cargo/pull/9184) +- `cargo fix --edition` now supports 2021. + [#9184](https://github.com/rust-lang/cargo/pull/9184) +- Added `--print` flag to `cargo rustc` to pass along to `rustc` to display + information from rustc. + [#9002](https://github.com/rust-lang/cargo/pull/9002) +- Added `-Zdoctest-in-workspace` for changing the directory where doctests are + *run* versus where they are *compiled*. + [#9105](https://github.com/rust-lang/cargo/pull/9105) +- Added support for an `[env]` section in `.cargo/config.toml` to set + environment variables when running cargo. + [#9175](https://github.com/rust-lang/cargo/pull/9175) +- Added a schema field and `features2` field to the index. + [#9161](https://github.com/rust-lang/cargo/pull/9161) +- Changes to JSON spec targets will now trigger a rebuild. + [#9223](https://github.com/rust-lang/cargo/pull/9223) + +## Cargo 1.51 (2021-03-25) +[75d5d8cf...rust-1.51.0](https://github.com/rust-lang/cargo/compare/75d5d8cf...rust-1.51.0) + +### Added +- 🔥 Added the `split-debuginfo` profile option. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/profiles.html#split-debuginfo) + [#9112](https://github.com/rust-lang/cargo/pull/9112) +- Added the `path` field to `cargo metadata` for the package dependencies list + to show the path for "path" dependencies. + [#8994](https://github.com/rust-lang/cargo/pull/8994) +- 🔥 Added a new feature resolver, and new CLI feature flag behavior. See the + new [features](https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2) + and [resolver](https://doc.rust-lang.org/nightly/cargo/reference/resolver.html#feature-resolver-version-2) + documentation for the `resolver = "2"` option. See the + [CLI](https://doc.rust-lang.org/nightly/cargo/reference/features.html#command-line-feature-options) + and [resolver 2 CLI](https://doc.rust-lang.org/nightly/cargo/reference/features.html#resolver-version-2-command-line-flags) + options for the new CLI behavior. And, finally, see + [RFC 2957](https://github.com/rust-lang/rfcs/blob/master/text/2957-cargo-features2.md) + for a detailed look at what has changed. + [#8997](https://github.com/rust-lang/cargo/pull/8997) + +### Changed +- `cargo install --locked` now emits a warning if `Cargo.lock` is not found. + [#9108](https://github.com/rust-lang/cargo/pull/9108) +- Unknown or ambiguous package IDs passed on the command-line now display + suggestions for the correct package ID. + [#9095](https://github.com/rust-lang/cargo/pull/9095) +- Slightly optimize `cargo vendor` + [#8937](https://github.com/rust-lang/cargo/pull/8937) + [#9131](https://github.com/rust-lang/cargo/pull/9131) + [#9132](https://github.com/rust-lang/cargo/pull/9132) + +### Fixed +- Fixed environment variables and cfg settings emitted by a build script that + are set for `cargo test` and `cargo run` when the build script runs multiple + times during the same build session. + [#9122](https://github.com/rust-lang/cargo/pull/9122) +- Fixed a panic with `cargo doc` and the new feature resolver. This also + introduces some heuristics to try to avoid path collisions with `rustdoc` by + only documenting one variant of a package if there are multiple (such as + multiple versions, or the same package shared for host and target + platforms). + [#9077](https://github.com/rust-lang/cargo/pull/9077) +- Fixed a bug in Cargo's cyclic dep graph detection that caused a stack + overflow. + [#9075](https://github.com/rust-lang/cargo/pull/9075) +- Fixed build script `links` environment variables (`DEP_*`) not showing up + for testing packages in some cases. + [#9065](https://github.com/rust-lang/cargo/pull/9065) +- Fixed features being selected in a nondeterministic way for a specific + scenario when building an entire workspace with all targets with a + proc-macro in the workspace with `resolver="2"`. + [#9059](https://github.com/rust-lang/cargo/pull/9059) +- Fixed to use `http.proxy` setting in `~/.gitconfig`. + [#8986](https://github.com/rust-lang/cargo/pull/8986) +- Fixed --feature pkg/feat for V1 resolver for non-member. + [#9275](https://github.com/rust-lang/cargo/pull/9275) + [#9277](https://github.com/rust-lang/cargo/pull/9277) +- Fixed panic in `cargo doc` when there are colliding output filenames in a workspace. + [#9276](https://github.com/rust-lang/cargo/pull/9276) + [#9277](https://github.com/rust-lang/cargo/pull/9277) +- Fixed `cargo install` from exiting with success if one of several packages + did not install successfully. + [#9185](https://github.com/rust-lang/cargo/pull/9185) + [#9196](https://github.com/rust-lang/cargo/pull/9196) +- Fix panic with doc collision orphan. + [#9142](https://github.com/rust-lang/cargo/pull/9142) + [#9196](https://github.com/rust-lang/cargo/pull/9196) + +### Nightly only +- Removed the `publish-lockfile` unstable feature, it was stabilized without + the need for an explicit flag 1.5 years ago. + [#9092](https://github.com/rust-lang/cargo/pull/9092) +- Added better diagnostics, help messages, and documentation for nightly + features (such as those passed with the `-Z` flag, or specified with + `cargo-features` in `Cargo.toml`). + [#9092](https://github.com/rust-lang/cargo/pull/9092) +- Added support for Rust edition 2021. + [#8922](https://github.com/rust-lang/cargo/pull/8922) +- Added support for the `rust-version` field in project metadata. + [#8037](https://github.com/rust-lang/cargo/pull/8037) +- Added a schema field to the index. + [#9161](https://github.com/rust-lang/cargo/pull/9161) + [#9196](https://github.com/rust-lang/cargo/pull/9196) + +## Cargo 1.50 (2021-02-11) +[8662ab42...rust-1.50.0](https://github.com/rust-lang/cargo/compare/8662ab42...rust-1.50.0) + +### Added +- Added the `doc` field to `cargo metadata`, which indicates if a target is + documented. + [#8869](https://github.com/rust-lang/cargo/pull/8869) +- Added `RUSTC_WORKSPACE_WRAPPER`, an alternate RUSTC wrapper that only runs + for the local workspace packages, and caches its artifacts independently of + non-wrapped builds. + [#8976](https://github.com/rust-lang/cargo/pull/8976) +- Added `--workspace` to `cargo update` to update only the workspace members, + and not their dependencies. This is particularly useful if you update the + version in `Cargo.toml` and want to update `Cargo.lock` without running any + other commands. + [#8725](https://github.com/rust-lang/cargo/pull/8725) + +### Changed +- `.crate` files uploaded to a registry are now built with reproducible + settings, so that the same `.crate` file created on different machines + should be identical. + [#8864](https://github.com/rust-lang/cargo/pull/8864) +- Git dependencies that specify more than one of `branch`, `tag`, or `rev` are + now rejected. + [#8984](https://github.com/rust-lang/cargo/pull/8984) +- The `rerun-if-changed` build script directive can now point to a directory, + in which case Cargo will check if any file in that directory changes. + [#8973](https://github.com/rust-lang/cargo/pull/8973) +- If Cargo cannot determine the username or email address, `cargo new` will no + longer fail, and instead create an empty authors list. + [#8912](https://github.com/rust-lang/cargo/pull/8912) +- The progress bar width has been reduced to provide more room to display the + crates currently being built. + [#8892](https://github.com/rust-lang/cargo/pull/8892) +- `cargo new` will now support `includeIf` directives in `.gitconfig` to match + the correct directory when determining the username and email address. + [#8886](https://github.com/rust-lang/cargo/pull/8886) + +### Fixed +- Fixed `cargo metadata` and `cargo tree` to only download packages for the + requested target. + [#8987](https://github.com/rust-lang/cargo/pull/8987) +- Updated libgit2, which brings in many fixes, particularly fixing a zlib + error that occasionally appeared on 32-bit systems. + [#8998](https://github.com/rust-lang/cargo/pull/8998) +- Fixed stack overflow with a circular dev-dependency that uses the `links` + field. + [#8969](https://github.com/rust-lang/cargo/pull/8969) +- Fixed `cargo publish` failing on some filesystems, particularly 9p on WSL2. + [#8950](https://github.com/rust-lang/cargo/pull/8950) + +### Nightly only +- Allow `resolver="1"` to specify the original feature resolution behavior. + [#8857](https://github.com/rust-lang/cargo/pull/8857) +- Added `-Z extra-link-arg` which adds the `cargo:rustc-link-arg-bins` + and `cargo:rustc-link-arg` build script options. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#extra-link-arg) + [#8441](https://github.com/rust-lang/cargo/pull/8441) +- Implemented external credential process support, and added `cargo logout`. + ([RFC 2730](https://github.com/rust-lang/rfcs/blob/master/text/2730-cargo-token-from-process.md)) + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#credential-process)) + [#8934](https://github.com/rust-lang/cargo/pull/8934) +- Fix panic with `-Zbuild-std` and no roots. + [#8942](https://github.com/rust-lang/cargo/pull/8942) +- Set docs.rs as the default extern-map for crates.io + [#8877](https://github.com/rust-lang/cargo/pull/8877) + +## Cargo 1.49 (2020-12-31) +[75615f8e...rust-1.49.0](https://github.com/rust-lang/cargo/compare/75615f8e...rust-1.49.0) + +### Added +- Added `homepage` and `documentation` fields to `cargo metadata`. + [#8744](https://github.com/rust-lang/cargo/pull/8744) +- Added the `CARGO_PRIMARY_PACKAGE` environment variable which is set when + running `rustc` if the package is one of the "root" packages selected on the + command line. + [#8758](https://github.com/rust-lang/cargo/pull/8758) +- Added support for Unix-style glob patterns for package and target selection + flags on the command-line (such as `-p 'serde*'` or `--test '*'`). + [#8752](https://github.com/rust-lang/cargo/pull/8752) + +### Changed +- Computed LTO flags are now included in the filename metadata hash so that + changes in LTO settings will independently cache build artifacts instead of + overwriting previous ones. This prevents rebuilds in some situations such as + switching between `cargo build` and `cargo test` in some circumstances. + [#8755](https://github.com/rust-lang/cargo/pull/8755) +- `cargo tree` now displays `(proc-macro)` next to proc-macro packages. + [#8765](https://github.com/rust-lang/cargo/pull/8765) +- Added a warning that the allowed characters for a feature name have been + restricted to letters, digits, `_`, `-`, and `+` to accommodate future + syntax changes. This is still a superset of the allowed syntax on crates.io, + which requires ASCII. This is intended to be changed to an error in the + future. + [#8814](https://github.com/rust-lang/cargo/pull/8814) +- `-p` without a value will now print a list of workspace package names. + [#8808](https://github.com/rust-lang/cargo/pull/8808) +- Add period to allowed feature name characters. + [#8932](https://github.com/rust-lang/cargo/pull/8932) + [#8943](https://github.com/rust-lang/cargo/pull/8943) + +### Fixed +- Fixed building a library with both "dylib" and "rlib" crate types with LTO enabled. + [#8754](https://github.com/rust-lang/cargo/pull/8754) +- Fixed paths in Cargo's dep-info files. + [#8819](https://github.com/rust-lang/cargo/pull/8819) +- Fixed inconsistent source IDs in `cargo metadata` for git dependencies that + explicitly specify `branch="master"`. + [#8824](https://github.com/rust-lang/cargo/pull/8824) +- Fixed re-extracting dependencies which contained a `.cargo-ok` file. + [#8835](https://github.com/rust-lang/cargo/pull/8835) + +### Nightly only +- Fixed a panic with `cargo doc -Zfeatures=itarget` in some situations. + [#8777](https://github.com/rust-lang/cargo/pull/8777) +- New implementation for namespaced features, using the syntax `dep:serde`. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#namespaced-features) + [#8799](https://github.com/rust-lang/cargo/pull/8799) +- Added support for "weak" dependency features, using the syntax + `dep_name?/feat_name`, which will enable a feature for a dependency without + also enabling the dependency. + [#8818](https://github.com/rust-lang/cargo/pull/8818) +- Fixed the new feature resolver downloading extra dependencies that weren't + strictly necessary. + [#8823](https://github.com/rust-lang/cargo/pull/8823) + +## Cargo 1.48 (2020-11-19) +[51b66125...rust-1.48.0](https://github.com/rust-lang/cargo/compare/51b66125...rust-1.48.0) + +### Added +- Added `term.progress` configuration option to control when and how the + progress bar is displayed. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/config.html#termprogresswhen) + [#8165](https://github.com/rust-lang/cargo/pull/8165) +- Added `--message-format plain` option to `cargo locate-project` to display + the project location without JSON to make it easier to use in a script. + [#8707](https://github.com/rust-lang/cargo/pull/8707) +- Added `--workspace` option to `cargo locate-project` to display the path to + the workspace manifest. + [#8712](https://github.com/rust-lang/cargo/pull/8712) +- A new contributor guide has been added for contributing to Cargo itself. + This is published at . + [#8715](https://github.com/rust-lang/cargo/pull/8715) +- Zsh `--target` completion will now complete with the built-in rustc targets. + [#8740](https://github.com/rust-lang/cargo/pull/8740) + +### Changed + +### Fixed +- Fixed `cargo new` creating a fossil repository to properly ignore the `target` directory. + [#8671](https://github.com/rust-lang/cargo/pull/8671) +- Don't show warnings about the workspace in the current directory when using `cargo install` + of a remote package. + [#8681](https://github.com/rust-lang/cargo/pull/8681) +- Automatically reinitialize the index when an "Object not found" error is + encountered in the git repository. + [#8735](https://github.com/rust-lang/cargo/pull/8735) +- Updated libgit2, which brings in several fixes for git repository handling. + [#8778](https://github.com/rust-lang/cargo/pull/8778) + [#8780](https://github.com/rust-lang/cargo/pull/8780) + +### Nightly only +- Fixed `cargo install` so that it will ignore the `[unstable]` table in local config files. + [#8656](https://github.com/rust-lang/cargo/pull/8656) +- Fixed nondeterministic behavior of the new feature resolver. + [#8701](https://github.com/rust-lang/cargo/pull/8701) +- Fixed running `cargo test` on a proc-macro with the new feature resolver + under a specific combination of circumstances. + [#8742](https://github.com/rust-lang/cargo/pull/8742) + +## Cargo 1.47 (2020-10-08) +[4f74d9b2...rust-1.47.0](https://github.com/rust-lang/cargo/compare/4f74d9b2...rust-1.47.0) + +### Added +- `cargo doc` will now include the package's version in the left sidebar. + [#8509](https://github.com/rust-lang/cargo/pull/8509) +- Added the `test` field to `cargo metadata` targets. + [#8478](https://github.com/rust-lang/cargo/pull/8478) +- Cargo's man pages are now displayed via the `cargo help` command (such as + `cargo help build`). + [#8456](https://github.com/rust-lang/cargo/pull/8456) + [#8577](https://github.com/rust-lang/cargo/pull/8577) +- Added new documentation chapters on [how dependency resolution + works](https://doc.rust-lang.org/nightly/cargo/reference/resolver.html) and + [SemVer + compatibility](https://doc.rust-lang.org/nightly/cargo/reference/semver.html), + along with suggestions on how to version your project and work with + dependencies. + [#8609](https://github.com/rust-lang/cargo/pull/8609) + +### Changed +- The comments added to `.gitignore` when it is modified have been tweaked to + add some spacing. + [#8476](https://github.com/rust-lang/cargo/pull/8476) +- `cargo metadata` output should now be sorted to be deterministic. + [#8489](https://github.com/rust-lang/cargo/pull/8489) +- By default, build scripts and proc-macros are now built with `opt-level=0` + and the default codegen units, even in release mode. + [#8500](https://github.com/rust-lang/cargo/pull/8500) +- `workspace.default-members` is now filtered by `workspace.exclude`. + [#8485](https://github.com/rust-lang/cargo/pull/8485) +- `workspace.members` globs now ignore non-directory paths. + [#8511](https://github.com/rust-lang/cargo/pull/8511) +- git zlib errors now trigger a retry. + [#8520](https://github.com/rust-lang/cargo/pull/8520) +- "http" class git errors now trigger a retry. + [#8553](https://github.com/rust-lang/cargo/pull/8553) +- git dependencies now override the `core.autocrlf` git configuration value to + ensure they behave consistently across platforms, particularly when + vendoring git dependencies on Windows. + [#8523](https://github.com/rust-lang/cargo/pull/8523) +- If `Cargo.lock` needs to be updated, then it will be automatically + transitioned to the new V2 format. This format removes the `[metadata]` + table, and should be easier to merge changes in source control systems. This + format was introduced in 1.38, and made the default for new projects in + 1.41. + [#8554](https://github.com/rust-lang/cargo/pull/8554) +- Added preparation for support of git repositories with a non-"master" + default branch. Actual support will arrive in a future version. This + introduces some warnings: + - Warn if a git dependency does not specify a branch, and the default branch + on the repository is not "master". In the future, Cargo will fetch the + default branch. In this scenario, the branch should be explicitly + specified. + - Warn if a workspace has multiple dependencies to the same git repository, + one without a `branch` and one with `branch="master"`. Dependencies should + all use one form or the other. + [#8522](https://github.com/rust-lang/cargo/pull/8522) +- Warnings are now issued if a `required-features` entry lists a feature that + does not exist. + [#7950](https://github.com/rust-lang/cargo/pull/7950) +- Built-in aliases are now included in `cargo --list`. + [#8542](https://github.com/rust-lang/cargo/pull/8542) +- `cargo install` with a specific version that has been yanked will now + display an error message that it has been yanked, instead of "could not + find". + [#8565](https://github.com/rust-lang/cargo/pull/8565) +- `cargo publish` with a package that has the `publish` field set to a single + registry, and no `--registry` flag has been given, will now publish to that + registry instead of generating an error. + [#8571](https://github.com/rust-lang/cargo/pull/8571) + +### Fixed +- Fixed issue where if a project directory was moved, and one of the + build scripts did not use the `rerun-if-changed` directive, then that + build script was being rebuilt when it shouldn't. + [#8497](https://github.com/rust-lang/cargo/pull/8497) +- Console colors should now work on Windows 7 and 8. + [#8540](https://github.com/rust-lang/cargo/pull/8540) +- The `CARGO_TARGET_{triplet}_RUNNER` environment variable will now correctly + override the config file instead of trying to merge the commands. + [#8629](https://github.com/rust-lang/cargo/pull/8629) +- Fixed LTO with doctests. + [#8657](https://github.com/rust-lang/cargo/pull/8657) + [#8658](https://github.com/rust-lang/cargo/pull/8658) + +### Nightly only +- Added support for `-Z terminal-width` which tells `rustc` the width of the + terminal so that it can format diagnostics better. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#terminal-width) + [#8427](https://github.com/rust-lang/cargo/pull/8427) +- Added ability to configure `-Z` unstable flags in config files via the + `[unstable]` table. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html) + [#8393](https://github.com/rust-lang/cargo/pull/8393) +- Added `-Z build-std-features` flag to set features for the standard library. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std-features) + [#8490](https://github.com/rust-lang/cargo/pull/8490) + +## Cargo 1.46 (2020-08-27) +[9fcb8c1d...rust-1.46.0](https://github.com/rust-lang/cargo/compare/9fcb8c1d...rust-1.46.0) + +### Added +- The `dl` key in `config.json` of a registry index now supports the + replacement markers `{prefix}` and `{lowerprefix}` to allow spreading crates + across directories similar to how the index itself is structured. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/registries.html#index-format) + [#8267](https://github.com/rust-lang/cargo/pull/8267) +- Added new environment variables that are set during compilation: + - `CARGO_CRATE_NAME`: The name of the crate being built. + - `CARGO_BIN_NAME`: The name of the executable binary (if this is a binary crate). + - `CARGO_PKG_LICENSE`: The `license` field from the manifest. + - `CARGO_PKG_LICENSE_FILE`: The `license-file` field from the manifest. + [#8270](https://github.com/rust-lang/cargo/pull/8270) + [#8325](https://github.com/rust-lang/cargo/pull/8325) + [#8387](https://github.com/rust-lang/cargo/pull/8387) +- If the value for `readme` is not specified in `Cargo.toml`, it is now + automatically inferred from the existence of a file named `README`, + `README.md`, or `README.txt`. This can be suppressed by setting + `readme = false`. + [#8277](https://github.com/rust-lang/cargo/pull/8277) +- `cargo install` now supports the `--index` flag to install directly from an index. + [#8344](https://github.com/rust-lang/cargo/pull/8344) +- Added the `metadata` table to the `workspace` definition in `Cargo.toml`. + This can be used for arbitrary data similar to the `package.metadata` table. + [#8323](https://github.com/rust-lang/cargo/pull/8323) +- Added the `--target-dir` flag to `cargo install` to set the target directory. + [#8391](https://github.com/rust-lang/cargo/pull/8391) +- Changes to environment variables used by the + [`env!`](https://doc.rust-lang.org/std/macro.env.html) or + [`option_env!`](https://doc.rust-lang.org/std/macro.option_env.html) macros + are now automatically detected to trigger a rebuild. + [#8421](https://github.com/rust-lang/cargo/pull/8421) +- The `target` directory now includes the `CACHEDIR.TAG` file which is used by + some tools to exclude the directory from backups. + [#8378](https://github.com/rust-lang/cargo/pull/8378) +- Added docs about rustup's `+toolchain` syntax. + [#8455](https://github.com/rust-lang/cargo/pull/8455) + +### Changed +- A warning is now displayed if a git dependency includes a `#` fragment in + the URL. This was potentially confusing because Cargo itself displays git + URLs with this syntax, but it does not have any meaning outside of the + `Cargo.lock` file, and would not work properly. + [#8297](https://github.com/rust-lang/cargo/pull/8297) +- Various optimizations and fixes for bitcode embedding and LTO. + [#8349](https://github.com/rust-lang/cargo/pull/8349) +- Reduced the amount of data fetched for git dependencies. If Cargo knows the + branch or tag to fetch, it will now only fetch that branch or tag instead of + all branches and tags. + [#8363](https://github.com/rust-lang/cargo/pull/8363) +- Enhanced git fetch error messages. + [#8409](https://github.com/rust-lang/cargo/pull/8409) +- `.crate` files are now generated with GNU tar format instead of UStar, which + supports longer file names. + [#8453](https://github.com/rust-lang/cargo/pull/8453) + +### Fixed +- Fixed a rare situation where an update to `Cargo.lock` failed once, but then + subsequent runs allowed it proceed. + [#8274](https://github.com/rust-lang/cargo/pull/8274) +- Removed assertion that Windows dylibs must have a `.dll` extension. Some + custom JSON spec targets may change the extension. + [#8310](https://github.com/rust-lang/cargo/pull/8310) +- Updated libgit2, which brings in a fix for zlib errors for some remote + git servers like googlesource.com. + [#8320](https://github.com/rust-lang/cargo/pull/8320) +- Fixed the GitHub fast-path check for up-to-date git dependencies on + non-master branches. + [#8363](https://github.com/rust-lang/cargo/pull/8363) +- Fixed issue when enabling a feature with `pkg/feature` syntax, and `pkg` is + an optional dependency, but also a dev-dependency, and the dev-dependency + appears before the optional normal dependency in the registry summary, then + the optional dependency would not get activated. + [#8395](https://github.com/rust-lang/cargo/pull/8395) +- Fixed `clean -p` deleting the build directory if there is a test named + `build`. + [#8398](https://github.com/rust-lang/cargo/pull/8398) +- Fixed indentation of multi-line Cargo error messages. + [#8409](https://github.com/rust-lang/cargo/pull/8409) +- Fixed issue where the automatic inclusion of the `--document-private-items` + flag for rustdoc would override any flags passed to the `cargo rustdoc` + command. + [#8449](https://github.com/rust-lang/cargo/pull/8449) +- Cargo will now include a version in the hash of the fingerprint directories + to support backwards-incompatible changes to the fingerprint structure. + [#8473](https://github.com/rust-lang/cargo/pull/8473) + [#8488](https://github.com/rust-lang/cargo/pull/8488) + +### Nightly only +- Added `-Zrustdoc-map` feature which provides external mappings for rustdoc + (such as https://docs.rs/ links). + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#rustdoc-map) + [#8287](https://github.com/rust-lang/cargo/pull/8287) +- Fixed feature calculation when a proc-macro is declared in `Cargo.toml` with + an underscore (like `proc_macro = true`). + [#8319](https://github.com/rust-lang/cargo/pull/8319) +- Added support for setting `-Clinker` with `-Zdoctest-xcompile`. + [#8359](https://github.com/rust-lang/cargo/pull/8359) +- Fixed setting the `strip` profile field in config files. + [#8454](https://github.com/rust-lang/cargo/pull/8454) + +## Cargo 1.45 (2020-07-16) +[ebda5065e...rust-1.45.0](https://github.com/rust-lang/cargo/compare/ebda5065...rust-1.45.0) + +### Added + +### Changed +- Changed official documentation to recommend `.cargo/config.toml` filenames + (with the `.toml` extension). `.toml` extension support was added in 1.39. + [#8121](https://github.com/rust-lang/cargo/pull/8121) +- The `registry.index` config value is no longer allowed (it has been + deprecated for 4 years). + [#7973](https://github.com/rust-lang/cargo/pull/7973) +- An error is generated if both `--index` and `--registry` are passed + (previously `--index` was silently ignored). + [#7973](https://github.com/rust-lang/cargo/pull/7973) +- The `registry.token` config value is no longer used with the `--index` flag. + This is intended to avoid potentially leaking the crates.io token to another + registry. + [#7973](https://github.com/rust-lang/cargo/pull/7973) +- Added a warning if `registry.token` is used with source replacement. It is + intended this will be an error in future versions. + [#7973](https://github.com/rust-lang/cargo/pull/7973) +- Windows GNU targets now copy `.dll.a` import library files for DLL crate + types to the output directory. + [#8141](https://github.com/rust-lang/cargo/pull/8141) +- Dylibs for all dependencies are now unconditionally copied to the output + directory. Some obscure scenarios can cause an old dylib to be referenced + between builds, and this ensures that all the latest copies are used. + [#8139](https://github.com/rust-lang/cargo/pull/8139) +- `package.exclude` can now match directory names. If a directory is + specified, the entire directory will be excluded, and Cargo will not attempt + to inspect it further. Previously Cargo would try to check every file in the + directory which could cause problems if the directory contained unreadable + files. + [#8095](https://github.com/rust-lang/cargo/pull/8095) +- When packaging with `cargo publish` or `cargo package`, Cargo can use git to + guide its decision on which files to include. Previously this git-based + logic required a `Cargo.toml` file to exist at the root of the repository. + This is no longer required, so Cargo will now use git-based guidance even if + there is not a `Cargo.toml` in the root of the repository. + [#8095](https://github.com/rust-lang/cargo/pull/8095) +- While unpacking a crate on Windows, if it fails to write a file because the + file is a reserved Windows filename (like "aux.rs"), Cargo will display an + extra message to explain why it failed. + [#8136](https://github.com/rust-lang/cargo/pull/8136) +- Failures to set mtime on files are now ignored. Some filesystems did not + support this. + [#8185](https://github.com/rust-lang/cargo/pull/8185) +- Certain classes of git errors will now recommend enabling + `net.git-fetch-with-cli`. + [#8166](https://github.com/rust-lang/cargo/pull/8166) +- When doing an LTO build, Cargo will now instruct rustc not to perform + codegen when possible. This may result in a faster build and use less disk + space. Additionally, for non-LTO builds, Cargo will instruct rustc to not + embed LLVM bitcode in libraries, which should decrease their size. + [#8192](https://github.com/rust-lang/cargo/pull/8192) + [#8226](https://github.com/rust-lang/cargo/pull/8226) + [#8254](https://github.com/rust-lang/cargo/pull/8254) +- The implementation for `cargo clean -p` has been rewritten so that it can + more accurately remove the files for a specific package. + [#8210](https://github.com/rust-lang/cargo/pull/8210) +- The way Cargo computes the outputs from a build has been rewritten to be + more complete and accurate. Newly tracked files will be displayed in JSON + messages, and may be uplifted to the output directory in some cases. Some of + the changes from this are: + + - `.exp` export files on Windows MSVC dynamic libraries are now tracked. + - Proc-macros on Windows track import/export files. + - All targets (like tests, etc.) that generate separate debug files + (pdb/dSYM) are tracked. + - Added .map files for wasm32-unknown-emscripten. + - macOS dSYM directories are tracked for all dynamic libraries + (dylib/cdylib/proc-macro) and for build scripts. + + There are a variety of other changes as a consequence of this: + + - Binary examples on Windows MSVC with a hyphen will now show up twice in + the examples directory (`foo_bar.exe` and `foo-bar.exe`). Previously Cargo + just renamed the file instead of hard-linking it. + - Example libraries now follow the same rules for hyphen/underscore + translation as normal libs (they will now use underscores). + + [#8210](https://github.com/rust-lang/cargo/pull/8210) +- Cargo attempts to scrub any secrets from the debug log for HTTP debugging. + [#8222](https://github.com/rust-lang/cargo/pull/8222) +- Context has been added to many of Cargo's filesystem operations, so that + error messages now provide more information, such as the path that caused + the problem. + [#8232](https://github.com/rust-lang/cargo/pull/8232) +- Several commands now ignore the error if stdout or stderr is closed while it + is running. For example `cargo install --list | grep -q cargo-fuzz` would + previously sometimes panic because `grep -q` may close stdout before the + command finishes. Regular builds continue to fail if stdout or stderr is + closed, matching the behavior of many other build systems. + [#8236](https://github.com/rust-lang/cargo/pull/8236) +- If `cargo install` is given an exact version, like `--version=1.2.3`, it + will now avoid updating the index if that version is already installed, and + exit quickly indicating it is already installed. + [#8022](https://github.com/rust-lang/cargo/pull/8022) +- Changes to the `[patch]` section will now attempt to automatically update + `Cargo.lock` to the new version. It should now also provide better error + messages for the rare cases where it is unable to automatically update. + [#8248](https://github.com/rust-lang/cargo/pull/8248) + +### Fixed +- Fixed copying Windows `.pdb` files to the output directory when the filename + contained dashes. + [#8123](https://github.com/rust-lang/cargo/pull/8123) +- Fixed error where Cargo would fail when scanning if a package is inside a + git repository when any of its ancestor paths is a symlink. + [#8186](https://github.com/rust-lang/cargo/pull/8186) +- Fixed `cargo update` with an unused `[patch]` so that it does not get + stuck and refuse to update. + [#8243](https://github.com/rust-lang/cargo/pull/8243) +- Fixed a situation where Cargo would hang if stderr is closed, and the + compiler generated a large number of messages. + [#8247](https://github.com/rust-lang/cargo/pull/8247) +- Fixed backtraces on macOS not showing filenames or line numbers. As a + consequence of this, binary executables on apple targets do not include a + hash in the filename in Cargo's cache. This means Cargo can only track one + copy, so if you switch features or rustc versions, Cargo will need to + rebuild the executable. + [#8329](https://github.com/rust-lang/cargo/pull/8329) + [#8335](https://github.com/rust-lang/cargo/pull/8335) +- Fixed fingerprinting when using lld on Windows with a dylib. Cargo was + erroneously thinking the dylib was never fresh. + [#8290](https://github.com/rust-lang/cargo/pull/8290) + [#8335](https://github.com/rust-lang/cargo/pull/8335) + +### Nightly only +- Fixed passing the full path for `--target` to `rustdoc` when using JSON spec + targets. + [#8094](https://github.com/rust-lang/cargo/pull/8094) +- `-Cembed-bitcode=no` renamed to `-Cbitcode-in-rlib=no` + [#8134](https://github.com/rust-lang/cargo/pull/8134) +- Added new `resolver` field to `Cargo.toml` to opt-in to the new feature + resolver. + [#8129](https://github.com/rust-lang/cargo/pull/8129) +- `-Zbuild-std` no longer treats std dependencies as "local". This means that + it won't use incremental compilation for those dependencies, removes them + from dep-info files, and caps lints at "allow". + [#8177](https://github.com/rust-lang/cargo/pull/8177) +- Added `-Zmultitarget` which allows multiple `--target` flags to build the + same thing for multiple targets at once. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#multitarget) + [#8167](https://github.com/rust-lang/cargo/pull/8167) +- Added `strip` option to the profile to remove symbols and debug information. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#profile-strip-option) + [#8246](https://github.com/rust-lang/cargo/pull/8246) +- Fixed panic with `cargo tree --target=all -Zfeatures=all`. + [#8269](https://github.com/rust-lang/cargo/pull/8269) + +## Cargo 1.44 (2020-06-04) +[bda50510...rust-1.44.0](https://github.com/rust-lang/cargo/compare/bda50510...rust-1.44.0) + +### Added +- 🔥 Added the `cargo tree` command. + [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-tree.html) + [#8062](https://github.com/rust-lang/cargo/pull/8062) +- Added warnings if a package has Windows-restricted filenames (like `nul`, + `con`, `aux`, `prn`, etc.). + [#7959](https://github.com/rust-lang/cargo/pull/7959) +- Added a `"build-finished"` JSON message when compilation is complete so that + tools can detect when they can stop listening for JSON messages with + commands like `cargo run` or `cargo test`. + [#8069](https://github.com/rust-lang/cargo/pull/8069) + +### Changed +- Valid package names are now restricted to Unicode XID identifiers. This is + mostly the same as before, except package names cannot start with a number + or `-`. + [#7959](https://github.com/rust-lang/cargo/pull/7959) +- `cargo new` and `init` will warn or reject additional package names + (reserved Windows names, reserved Cargo directories, non-ASCII names, + conflicting std names like `core`, etc.). + [#7959](https://github.com/rust-lang/cargo/pull/7959) +- Tests are no longer hard-linked into the output directory (`target/debug/`). + This ensures tools will have access to debug symbols and execute tests in + the same way as Cargo. Tools should use JSON messages to discover the path + to the executable. + [#7965](https://github.com/rust-lang/cargo/pull/7965) +- Updating git submodules now displays an "Updating" message for each + submodule. + [#7989](https://github.com/rust-lang/cargo/pull/7989) +- File modification times are now preserved when extracting a `.crate` file. + This reverses the change made in 1.40 where the mtime was not preserved. + [#7935](https://github.com/rust-lang/cargo/pull/7935) +- Build script warnings are now displayed separately when the build script + fails. + [#8017](https://github.com/rust-lang/cargo/pull/8017) +- Removed the `git-checkout` subcommand. + [#8040](https://github.com/rust-lang/cargo/pull/8040) +- The progress bar is now enabled for all unix platforms. Previously it was + only Linux, macOS, and FreeBSD. + [#8054](https://github.com/rust-lang/cargo/pull/8054) +- Artifacts generated by pre-release versions of `rustc` now share the same + filenames. This means that changing nightly versions will not leave stale + files in the build directory. + [#8073](https://github.com/rust-lang/cargo/pull/8073) +- Invalid package names are rejected when using renamed dependencies. + [#8090](https://github.com/rust-lang/cargo/pull/8090) +- Added a certain class of HTTP2 errors as "spurious" that will get retried. + [#8102](https://github.com/rust-lang/cargo/pull/8102) +- Allow `cargo package --list` to succeed, even if there are other validation + errors (such as `Cargo.lock` generation problem, or missing dependencies). + [#8175](https://github.com/rust-lang/cargo/pull/8175) + [#8215](https://github.com/rust-lang/cargo/pull/8215) + +### Fixed +- Cargo no longer buffers excessive amounts of compiler output in memory. + [#7838](https://github.com/rust-lang/cargo/pull/7838) +- Symbolic links in git repositories now work on Windows. + [#7996](https://github.com/rust-lang/cargo/pull/7996) +- Fixed an issue where `profile.dev` was not loaded from a config file with + `cargo test` when the `dev` profile was not defined in `Cargo.toml`. + [#8012](https://github.com/rust-lang/cargo/pull/8012) +- When a binary is built as an implicit dependency of an integration test, + it now checks `dep_name/feature_name` syntax in `required-features` correctly. + [#8020](https://github.com/rust-lang/cargo/pull/8020) +- Fixed an issue where Cargo would not detect that an executable (such as an + integration test) needs to be rebuilt when the previous build was + interrupted with Ctrl-C. + [#8087](https://github.com/rust-lang/cargo/pull/8087) +- Protect against some (unknown) situations where Cargo could panic when the + system monotonic clock doesn't appear to be monotonic. + [#8114](https://github.com/rust-lang/cargo/pull/8114) +- Fixed panic with `cargo clean -p` if the package has a build script. + [#8216](https://github.com/rust-lang/cargo/pull/8216) + +### Nightly only +- Fixed panic with new feature resolver and required-features. + [#7962](https://github.com/rust-lang/cargo/pull/7962) +- Added `RUSTC_WORKSPACE_WRAPPER` environment variable, which provides a way + to wrap `rustc` for workspace members only, and affects the filename hash so + that artifacts produced by the wrapper are cached separately. This usage can + be seen on nightly clippy with `cargo clippy -Zunstable-options`. + [#7533](https://github.com/rust-lang/cargo/pull/7533) +- Added `--unit-graph` CLI option to display Cargo's internal dependency graph + as JSON. + [#7977](https://github.com/rust-lang/cargo/pull/7977) +- Changed `-Zbuild_dep` to `-Zhost_dep`, and added proc-macros to the feature + decoupling logic. + [#8003](https://github.com/rust-lang/cargo/pull/8003) + [#8028](https://github.com/rust-lang/cargo/pull/8028) +- Fixed so that `--crate-version` is not automatically passed when the flag + is found in `RUSTDOCFLAGS`. + [#8014](https://github.com/rust-lang/cargo/pull/8014) +- Fixed panic with `-Zfeatures=dev_dep` and `check --profile=test`. + [#8027](https://github.com/rust-lang/cargo/pull/8027) +- Fixed panic with `-Zfeatures=itarget` with certain host dependencies. + [#8048](https://github.com/rust-lang/cargo/pull/8048) +- Added support for `-Cembed-bitcode=no`, which provides a performance boost + and disk-space usage reduction for non-LTO builds. + [#8066](https://github.com/rust-lang/cargo/pull/8066) +- `-Zpackage-features` has been extended with several changes intended to make + it easier to select features on the command-line in a workspace. + [#8074](https://github.com/rust-lang/cargo/pull/8074) + +## Cargo 1.43 (2020-04-23) +[9d32b7b0...rust-1.43.0](https://github.com/rust-lang/cargo/compare/9d32b7b0...rust-1.43.0) + +### Added +- 🔥 Profiles may now be specified in config files (and environment variables). + [docs](https://doc.rust-lang.org/nightly/cargo/reference/config.html#profile) + [#7823](https://github.com/rust-lang/cargo/pull/7823) +- ❗ Added `CARGO_BIN_EXE_` environment variable when building + integration tests. This variable contains the path to any `[[bin]]` targets + in the package. Integration tests should use the `env!` macro to determine + the path to a binary to execute. + [docs](https://doc.rust-lang.org/nightly/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates) + [#7697](https://github.com/rust-lang/cargo/pull/7697) + +### Changed +- `cargo install --git` now honors workspaces in a git repository. This allows + workspace settings, like `[patch]`, `[replace]`, or `[profile]` to be used. + [#7768](https://github.com/rust-lang/cargo/pull/7768) +- `cargo new` will now run `rustfmt` on the new files to pick up rustfmt + settings like `tab_spaces` so that the new file matches the user's preferred + indentation settings. + [#7827](https://github.com/rust-lang/cargo/pull/7827) +- Environment variables printed with "very verbose" output (`-vv`) are now + consistently sorted. + [#7877](https://github.com/rust-lang/cargo/pull/7877) +- Debug logging for fingerprint rebuild-detection now includes more information. + [#7888](https://github.com/rust-lang/cargo/pull/7888) + [#7890](https://github.com/rust-lang/cargo/pull/7890) + [#7952](https://github.com/rust-lang/cargo/pull/7952) +- Added warning during publish if the license-file doesn't exist. + [#7905](https://github.com/rust-lang/cargo/pull/7905) +- The `license-file` file is automatically included during publish, even if it + is not explicitly listed in the `include` list or is in a location outside + of the root of the package. + [#7905](https://github.com/rust-lang/cargo/pull/7905) +- `CARGO_CFG_DEBUG_ASSERTIONS` and `CARGO_CFG_PROC_MACRO` are no longer set + when running a build script. These were inadvertently set in the past, but + had no meaning as they were always true. Additionally, `cfg(proc-macro)` + is no longer supported in a `target` expression. + [#7943](https://github.com/rust-lang/cargo/pull/7943) + [#7970](https://github.com/rust-lang/cargo/pull/7970) + +### Fixed +- Global command-line flags now work with aliases (like `cargo -v b`). + [#7837](https://github.com/rust-lang/cargo/pull/7837) +- Required-features using dependency syntax (like `renamed_dep/feat_name`) now + handle renamed dependencies correctly. + [#7855](https://github.com/rust-lang/cargo/pull/7855) +- Fixed a rare situation where if a build script is run multiple times during + the same build, Cargo will now keep the results separate instead of losing + the output of the first execution. + [#7857](https://github.com/rust-lang/cargo/pull/7857) +- Fixed incorrect interpretation of environment variable + `CARGO_TARGET_*_RUNNER=true` as a boolean. Also improved related env var + error messages. + [#7891](https://github.com/rust-lang/cargo/pull/7891) +- Updated internal libgit2 library, bringing various fixes to git support. + [#7939](https://github.com/rust-lang/cargo/pull/7939) +- `cargo package` / `cargo publish` should no longer buffer the entire + contents of each file in memory. + [#7946](https://github.com/rust-lang/cargo/pull/7946) +- Ignore more invalid `Cargo.toml` files in a git dependency. Cargo currently + walks the entire repo to find the requested package. Certain invalid + manifests were already skipped, and now it should skip all of them. + [#7947](https://github.com/rust-lang/cargo/pull/7947) + +### Nightly only +- Added `build.out-dir` config variable to set the output directory. + [#7810](https://github.com/rust-lang/cargo/pull/7810) +- Added `-Zjobserver-per-rustc` feature to support improved performance for + parallel rustc. + [#7731](https://github.com/rust-lang/cargo/pull/7731) +- Fixed filename collision with `build-std` and crates like `cc`. + [#7860](https://github.com/rust-lang/cargo/pull/7860) +- `-Ztimings` will now save its report even if there is an error. + [#7872](https://github.com/rust-lang/cargo/pull/7872) +- Updated `--config` command-line flag to support taking a path to a config + file to load. + [#7901](https://github.com/rust-lang/cargo/pull/7901) +- Added new feature resolver. + [#7820](https://github.com/rust-lang/cargo/pull/7820) +- Rustdoc docs now automatically include the version of the package in the + side bar (requires `-Z crate-versions` flag). + [#7903](https://github.com/rust-lang/cargo/pull/7903) + +## Cargo 1.42 (2020-03-12) +[0bf7aafe...rust-1.42.0](https://github.com/rust-lang/cargo/compare/0bf7aafe...rust-1.42.0) + +### Added +- Added documentation on git authentication. + [#7658](https://github.com/rust-lang/cargo/pull/7658) +- Bitbucket Pipeline badges are now supported on crates.io. + [#7663](https://github.com/rust-lang/cargo/pull/7663) +- `cargo vendor` now accepts the `--versioned-dirs` option to force it to + always include the version number in each package's directory name. + [#7631](https://github.com/rust-lang/cargo/pull/7631) +- The `proc_macro` crate is now automatically added to the extern prelude for + proc-macro packages. This means that `extern crate proc_macro;` is no longer + necessary for proc-macros. + [#7700](https://github.com/rust-lang/cargo/pull/7700) + +### Changed +- Emit a warning if `debug_assertions`, `test`, `proc_macro`, or `feature=` is + used in a `cfg()` expression. + [#7660](https://github.com/rust-lang/cargo/pull/7660) +- Large update to the Cargo documentation, adding new chapters on Cargo + targets, workspaces, and features. + [#7733](https://github.com/rust-lang/cargo/pull/7733) +- Windows: `.lib` DLL import libraries are now copied next to the dll for all + Windows MSVC targets. Previously it was only supported for + `pc-windows-msvc`. This adds DLL support for `uwp-windows-msvc` targets. + [#7758](https://github.com/rust-lang/cargo/pull/7758) +- The `ar` field in the `[target]` configuration is no longer read. It has + been ignored for over 4 years. + [#7763](https://github.com/rust-lang/cargo/pull/7763) +- Bash completion file simplified and updated for latest changes. + [#7789](https://github.com/rust-lang/cargo/pull/7789) +- Credentials are only loaded when needed, instead of every Cargo command. + [#7774](https://github.com/rust-lang/cargo/pull/7774) + +### Fixed +- Removed `--offline` empty index check, which was a false positive in some + cases. + [#7655](https://github.com/rust-lang/cargo/pull/7655) +- Files and directories starting with a `.` can now be included in a package + by adding it to the `include` list. + [#7680](https://github.com/rust-lang/cargo/pull/7680) +- Fixed `cargo login` removing alternative registry tokens when previous + entries existed in the credentials file. + [#7708](https://github.com/rust-lang/cargo/pull/7708) +- Fixed `cargo vendor` from panicking when used with alternative registries. + [#7718](https://github.com/rust-lang/cargo/pull/7718) +- Fixed incorrect explanation in the fingerprint debug log message. + [#7749](https://github.com/rust-lang/cargo/pull/7749) +- A `[source]` that is defined multiple times will now result in an error. + Previously it was randomly picking a source, which could cause + non-deterministic behavior. + [#7751](https://github.com/rust-lang/cargo/pull/7751) +- `dep_kinds` in `cargo metadata` are now de-duplicated. + [#7756](https://github.com/rust-lang/cargo/pull/7756) +- Fixed packaging where `Cargo.lock` was listed in `.gitignore` in a + subdirectory inside a git repository. Previously it was assuming + `Cargo.lock` was at the root of the repo. + [#7779](https://github.com/rust-lang/cargo/pull/7779) +- Partial file transfer errors will now cause an automatic retry. + [#7788](https://github.com/rust-lang/cargo/pull/7788) +- Linux: Fixed panic if CPU iowait stat decreases. + [#7803](https://github.com/rust-lang/cargo/pull/7803) +- Fixed using the wrong sysroot for detecting host compiler settings when + `--sysroot` is passed in via `RUSTFLAGS`. + [#7798](https://github.com/rust-lang/cargo/pull/7798) + +### Nightly only +- `build-std` now uses `--extern` instead of `--sysroot` to find sysroot + packages. + [#7699](https://github.com/rust-lang/cargo/pull/7699) +- Added `--config` command-line option to set config settings. + [#7649](https://github.com/rust-lang/cargo/pull/7649) +- Added `include` config setting which allows including another config file. + [#7649](https://github.com/rust-lang/cargo/pull/7649) +- Profiles in config files now support any named profile. Previously it was + limited to dev/release. + [#7750](https://github.com/rust-lang/cargo/pull/7750) + +## Cargo 1.41 (2020-01-30) +[5da4b4d4...rust-1.41.0](https://github.com/rust-lang/cargo/compare/5da4b4d4...rust-1.41.0) + +### Added +- 🔥 Cargo now uses a new `Cargo.lock` file format. This new format should + support easier merges in source control systems. Projects using the old + format will continue to use the old format, only new `Cargo.lock` files will + use the new format. + [#7579](https://github.com/rust-lang/cargo/pull/7579) +- 🔥 `cargo install` will now upgrade already installed packages instead of + failing. + [#7560](https://github.com/rust-lang/cargo/pull/7560) +- 🔥 Profile overrides have been added. This allows overriding profiles for + individual dependencies or build scripts. See [the + documentation](https://doc.rust-lang.org/nightly/cargo/reference/profiles.html#overrides) + for more. + [#7591](https://github.com/rust-lang/cargo/pull/7591) +- Added new documentation for build scripts. + [#7565](https://github.com/rust-lang/cargo/pull/7565) +- Added documentation for Cargo's JSON output. + [#7595](https://github.com/rust-lang/cargo/pull/7595) +- Significant expansion of config and environment variable documentation. + [#7650](https://github.com/rust-lang/cargo/pull/7650) +- Add back support for `BROWSER` environment variable for `cargo doc --open`. + [#7576](https://github.com/rust-lang/cargo/pull/7576) +- Added `kind` and `platform` for dependencies in `cargo metadata`. + [#7132](https://github.com/rust-lang/cargo/pull/7132) +- The `OUT_DIR` value is now included in the `build-script-executed` JSON message. + [#7622](https://github.com/rust-lang/cargo/pull/7622) + +### Changed +- `cargo doc` will now document private items in binaries by default. + [#7593](https://github.com/rust-lang/cargo/pull/7593) +- Subcommand typo suggestions now include aliases. + [#7486](https://github.com/rust-lang/cargo/pull/7486) +- Tweak how the "already existing..." comment is added to `.gitignore`. + [#7570](https://github.com/rust-lang/cargo/pull/7570) +- Ignore `cargo login` text from copy/paste in token. + [#7588](https://github.com/rust-lang/cargo/pull/7588) +- Windows: Ignore errors for locking files when not supported by the filesystem. + [#7602](https://github.com/rust-lang/cargo/pull/7602) +- Remove `**/*.rs.bk` from `.gitignore`. + [#7647](https://github.com/rust-lang/cargo/pull/7647) + +### Fixed +- Fix unused warnings for some keys in the `build` config section. + [#7575](https://github.com/rust-lang/cargo/pull/7575) +- Linux: Don't panic when parsing `/proc/stat`. + [#7580](https://github.com/rust-lang/cargo/pull/7580) +- Don't show canonical path in `cargo vendor`. + [#7629](https://github.com/rust-lang/cargo/pull/7629) + +### Nightly only + + +## Cargo 1.40 (2019-12-19) +[1c6ec66d...5da4b4d4](https://github.com/rust-lang/cargo/compare/1c6ec66d...5da4b4d4) + +### Added +- Added `http.ssl-version` config option to control the version of TLS, + along with min/max versions. + [#7308](https://github.com/rust-lang/cargo/pull/7308) +- 🔥 Compiler warnings are now cached on disk. If a build generates warnings, + re-running the build will now re-display the warnings. + [#7450](https://github.com/rust-lang/cargo/pull/7450) +- Added `--filter-platform` option to `cargo metadata` to narrow the nodes + shown in the resolver graph to only packages included for the given target + triple. + [#7376](https://github.com/rust-lang/cargo/pull/7376) + +### Changed +- Cargo's "platform" `cfg` parsing has been extracted into a separate crate + named `cargo-platform`. + [#7375](https://github.com/rust-lang/cargo/pull/7375) +- Dependencies extracted into Cargo's cache no longer preserve mtimes to + reduce syscall overhead. + [#7465](https://github.com/rust-lang/cargo/pull/7465) +- Windows: EXE files no longer include a metadata hash in the filename. + This helps with debuggers correlating the filename with the PDB file. + [#7400](https://github.com/rust-lang/cargo/pull/7400) +- Wasm32: `.wasm` files are no longer treated as an "executable", allowing + `cargo test` and `cargo run` to work properly with the generated `.js` file. + [#7476](https://github.com/rust-lang/cargo/pull/7476) +- crates.io now supports SPDX 3.6 licenses. + [#7481](https://github.com/rust-lang/cargo/pull/7481) +- Improved cyclic dependency error message. + [#7470](https://github.com/rust-lang/cargo/pull/7470) +- Bare `cargo clean` no longer locks the package cache. + [#7502](https://github.com/rust-lang/cargo/pull/7502) +- `cargo publish` now allows dev-dependencies without a version key to be + published. A git or path-only dev-dependency will be removed from the + package manifest before uploading. + [#7333](https://github.com/rust-lang/cargo/pull/7333) +- `--features` and `--no-default-features` in the root of a virtual workspace + will now generate an error instead of being ignored. + [#7507](https://github.com/rust-lang/cargo/pull/7507) +- Generated files (like `Cargo.toml` and `Cargo.lock`) in a package archive + now have their timestamp set to the current time instead of the epoch. + [#7523](https://github.com/rust-lang/cargo/pull/7523) +- The `-Z` flag parser is now more strict, rejecting more invalid syntax. + [#7531](https://github.com/rust-lang/cargo/pull/7531) + +### Fixed +- Fixed an issue where if a package had an `include` field, and `Cargo.lock` + in `.gitignore`, and a binary or example target, and the `Cargo.lock` exists + in the current project, it would fail to publish complaining the + `Cargo.lock` was dirty. + [#7448](https://github.com/rust-lang/cargo/pull/7448) +- Fixed a panic in a particular combination of `[patch]` entries. + [#7452](https://github.com/rust-lang/cargo/pull/7452) +- Windows: Better error message when `cargo test` or `rustc` crashes in an + abnormal way, such as a signal or seg fault. + [#7535](https://github.com/rust-lang/cargo/pull/7535) + +### Nightly only +- The `mtime-on-use` feature may now be enabled via the + `unstable.mtime_on_use` config option. + [#7411](https://github.com/rust-lang/cargo/pull/7411) +- Added support for named profiles. + [#6989](https://github.com/rust-lang/cargo/pull/6989) +- Added `-Zpanic-abort-tests` to allow building and running tests with the + "abort" panic strategy. + [#7460](https://github.com/rust-lang/cargo/pull/7460) +- Changed `build-std` to use `--sysroot`. + [#7421](https://github.com/rust-lang/cargo/pull/7421) +- Various fixes and enhancements to `-Ztimings`. + [#7395](https://github.com/rust-lang/cargo/pull/7395) + [#7398](https://github.com/rust-lang/cargo/pull/7398) + [#7397](https://github.com/rust-lang/cargo/pull/7397) + [#7403](https://github.com/rust-lang/cargo/pull/7403) + [#7428](https://github.com/rust-lang/cargo/pull/7428) + [#7429](https://github.com/rust-lang/cargo/pull/7429) +- Profile overrides have renamed the syntax to be + `[profile.dev.package.NAME]`. + [#7504](https://github.com/rust-lang/cargo/pull/7504) +- Fixed warnings for unused profile overrides in a workspace. + [#7536](https://github.com/rust-lang/cargo/pull/7536) + +## Cargo 1.39 (2019-11-07) +[e853aa97...1c6ec66d](https://github.com/rust-lang/cargo/compare/e853aa97...1c6ec66d) + +### Added +- Config files may now use the `.toml` filename extension. + [#7295](https://github.com/rust-lang/cargo/pull/7295) +- The `--workspace` flag has been added as an alias for `--all` to help avoid + confusion about the meaning of "all". + [#7241](https://github.com/rust-lang/cargo/pull/7241) +- The `publish` field has been added to `cargo metadata`. + [#7354](https://github.com/rust-lang/cargo/pull/7354) + +### Changed +- Display more information if parsing the output from `rustc` fails. + [#7236](https://github.com/rust-lang/cargo/pull/7236) +- TOML errors now show the column number. + [#7248](https://github.com/rust-lang/cargo/pull/7248) +- `cargo vendor` no longer deletes files in the `vendor` directory that starts + with a `.`. + [#7242](https://github.com/rust-lang/cargo/pull/7242) +- `cargo fetch` will now show manifest warnings. + [#7243](https://github.com/rust-lang/cargo/pull/7243) +- `cargo publish` will now check git submodules if they contain any + uncommitted changes. + [#7245](https://github.com/rust-lang/cargo/pull/7245) +- In a build script, `cargo:rustc-flags` now allows `-l` and `-L` flags + without spaces. + [#7257](https://github.com/rust-lang/cargo/pull/7257) +- When `cargo install` replaces an older version of a package it will now + delete any installed binaries that are no longer present in the newly + installed version. + [#7246](https://github.com/rust-lang/cargo/pull/7246) +- A git dependency may now also specify a `version` key when published. The + `git` value will be stripped from the uploaded crate, matching the behavior + of `path` dependencies. + [#7237](https://github.com/rust-lang/cargo/pull/7237) +- The behavior of workspace default-members has changed. The default-members + now only applies when running Cargo in the root of the workspace. Previously + it would always apply regardless of which directory Cargo is running in. + [#7270](https://github.com/rust-lang/cargo/pull/7270) +- libgit2 updated pulling in all upstream changes. + [#7275](https://github.com/rust-lang/cargo/pull/7275) +- Bump `home` dependency for locating home directories. + [#7277](https://github.com/rust-lang/cargo/pull/7277) +- zsh completions have been updated. + [#7296](https://github.com/rust-lang/cargo/pull/7296) +- SSL connect errors are now retried. + [#7318](https://github.com/rust-lang/cargo/pull/7318) +- The jobserver has been changed to acquire N tokens (instead of N-1), and + then immediately acquires the extra token. This was changed to accommodate + the `cc` crate on Windows to allow it to release its implicit token. + [#7344](https://github.com/rust-lang/cargo/pull/7344) +- The scheduling algorithm for choosing which crate to build next has been + changed. It now chooses the crate with the greatest number of transitive + crates waiting on it. Previously it used a maximum topological depth. + [#7390](https://github.com/rust-lang/cargo/pull/7390) +- RUSTFLAGS are no longer incorporated in the metadata and filename hash, + reversing the change from 1.33 that added it. This means that any change to + RUSTFLAGS will cause a recompile, and will not affect symbol munging. + [#7459](https://github.com/rust-lang/cargo/pull/7459) + +### Fixed +- Git dependencies with submodules with shorthand SSH URLs (like + `git@github.com/user/repo.git`) should now work. + [#7238](https://github.com/rust-lang/cargo/pull/7238) +- Handle broken symlinks when creating `.dSYM` symlinks on macOS. + [#7268](https://github.com/rust-lang/cargo/pull/7268) +- Fixed issues with multiple versions of the same crate in a `[patch]` table. + [#7303](https://github.com/rust-lang/cargo/pull/7303) +- Fixed issue with custom target `.json` files where a substring of the name + matches an unsupported crate type (like "bin"). + [#7363](https://github.com/rust-lang/cargo/issues/7363) +- Fixed issues with generating documentation for proc-macro crate types. + [#7159](https://github.com/rust-lang/cargo/pull/7159) +- Fixed hang if Cargo panics within a build thread. + [#7366](https://github.com/rust-lang/cargo/pull/7366) +- Fixed rebuild detection if a `build.rs` script issues different `rerun-if` + directives between builds. Cargo was erroneously causing a rebuild after the + change. + [#7373](https://github.com/rust-lang/cargo/pull/7373) +- Properly handle canonical URLs for `[patch]` table entries, preventing + the patch from working after the first time it is used. + [#7368](https://github.com/rust-lang/cargo/pull/7368) +- Fixed an issue where integration tests were waiting for the package binary + to finish building before starting their own build. They now may build + concurrently. + [#7394](https://github.com/rust-lang/cargo/pull/7394) +- Fixed accidental change in the previous release on how `--features a b` flag + is interpreted, restoring the original behavior where this is interpreted as + `--features a` along with the argument `b` passed to the command. To pass + multiple features, use quotes around the features to pass multiple features + like `--features "a b"`, or use commas, or use multiple `--features` flags. + [#7419](https://github.com/rust-lang/cargo/pull/7419) + +### Nightly only +- Basic support for building the standard library directly from Cargo has been + added. + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std)) + [#7216](https://github.com/rust-lang/cargo/pull/7216) +- Added `-Ztimings` feature to generate an HTML report on the time spent on + individual compilation steps. This also may output completion steps on the + console and JSON data. + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#timings)) + [#7311](https://github.com/rust-lang/cargo/pull/7311) +- Added ability to cross-compile doctests. + ([docs](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#doctest-xcompile)) + [#6892](https://github.com/rust-lang/cargo/pull/6892) + +## Cargo 1.38 (2019-09-26) +[4c1fa54d...23ef9a4e](https://github.com/rust-lang/cargo/compare/4c1fa54d...23ef9a4e) + +### Added +- 🔥 Cargo build pipelining has been enabled by default to leverage more idle CPU + parallelism during builds. + [#7143](https://github.com/rust-lang/cargo/pull/7143) +- The `--message-format` option to Cargo can now be specified multiple times and + accepts a comma-separated list of values. In addition to the previous values + it also now accepts `json-diagnostic-short` and + `json-diagnostic-rendered-ansi` which configures the output coming from rustc + in `json` message mode. + [#7214](https://github.com/rust-lang/cargo/pull/7214) +- Cirrus CI badges are now supported on crates.io. + [#7119](https://github.com/rust-lang/cargo/pull/7119) +- A new format for `Cargo.lock` has been introduced. This new format is + intended to avoid source-control merge conflicts more often, and to + generally make it safer to merge changes. This new format is *not* enabled + at this time, though Cargo will use it if it sees it. At some point in the + future, it is intended that this will become the default. + [#7070](https://github.com/rust-lang/cargo/pull/7070) +- Progress bar support added for FreeBSD. + [#7222](https://github.com/rust-lang/cargo/pull/7222) + +### Changed +- The `-q` flag will no longer suppress the root error message for an error + from Cargo itself. + [#7116](https://github.com/rust-lang/cargo/pull/7116) +- The Cargo Book is now published with mdbook 0.3 providing a number of + formatting fixes and improvements. + [#7140](https://github.com/rust-lang/cargo/pull/7140) +- The `--features` command-line flag can now be specified multiple times. + The list of features from all the flags are joined together. + [#7084](https://github.com/rust-lang/cargo/pull/7084) +- Package include/exclude glob-vs-gitignore warnings have been removed. + Packages may now use gitignore-style matching without producing any + warnings. + [#7170](https://github.com/rust-lang/cargo/pull/7170) +- Cargo now shows the command and output when parsing `rustc` output fails + when querying `rustc` for information like `cfg` values. + [#7185](https://github.com/rust-lang/cargo/pull/7185) +- `cargo package`/`cargo publish` now allows a symbolic link to a git + submodule to include that submodule. + [#6817](https://github.com/rust-lang/cargo/pull/6817) +- Improved the error message when a version requirement does not + match any versions, but there are pre-release versions available. + [#7191](https://github.com/rust-lang/cargo/pull/7191) + +### Fixed +- Fixed using the wrong directory when updating git repositories when using + the `git-fetch-with-cli` config option, and the `GIT_DIR` environment + variable is set. This may happen when running cargo from git callbacks. + [#7082](https://github.com/rust-lang/cargo/pull/7082) +- Fixed dep-info files being overwritten for targets that have separate debug + outputs. For example, binaries on `-apple-` targets with `.dSYM` directories + would overwrite the `.d` file. + [#7057](https://github.com/rust-lang/cargo/pull/7057) +- Fix `[patch]` table not preserving "one major version per source" rule. + [#7118](https://github.com/rust-lang/cargo/pull/7118) +- Ignore `--remap-path-prefix` flags for the metadata hash in the `cargo + rustc` command. This was causing the remap settings to inadvertently affect + symbol names. + [#7134](https://github.com/rust-lang/cargo/pull/7134) +- Fixed cycle detection in `[patch]` dependencies. + [#7174](https://github.com/rust-lang/cargo/pull/7174) +- Fixed `cargo new` leaving behind a symlink on Windows when `core.symlinks` + git config is true. Also adds a number of fixes and updates from upstream + libgit2. + [#7176](https://github.com/rust-lang/cargo/pull/7176) +- macOS: Fixed setting the flag to mark the `target` directory to be excluded + from backups. + [#7192](https://github.com/rust-lang/cargo/pull/7192) +- Fixed `cargo fix` panicking under some situations involving multi-byte + characters. + [#7221](https://github.com/rust-lang/cargo/pull/7221) + +### Nightly only +- Added `cargo fix --clippy` which will apply machine-applicable fixes from + Clippy. + [#7069](https://github.com/rust-lang/cargo/pull/7069) +- Added `-Z binary-dep-depinfo` flag to add change tracking for binary + dependencies like the standard library. + [#7137](https://github.com/rust-lang/cargo/pull/7137) + [#7219](https://github.com/rust-lang/cargo/pull/7219) +- `cargo clippy-preview` will always run, even if no changes have been made. + [#7157](https://github.com/rust-lang/cargo/pull/7157) +- Fixed exponential blowup when using `CARGO_BUILD_PIPELINING`. + [#7062](https://github.com/rust-lang/cargo/pull/7062) +- Fixed passing args to clippy in `cargo clippy-preview`. + [#7162](https://github.com/rust-lang/cargo/pull/7162) + +## Cargo 1.37 (2019-08-15) +[c4fcfb72...9edd0891](https://github.com/rust-lang/cargo/compare/c4fcfb72...9edd0891) + +### Added +- Added `doctest` field to `cargo metadata` to determine if a target's + documentation is tested. + [#6953](https://github.com/rust-lang/cargo/pull/6953) + [#6965](https://github.com/rust-lang/cargo/pull/6965) +- 🔥 The [`cargo + vendor`](https://doc.rust-lang.org/nightly/cargo/commands/cargo-vendor.html) + command is now built-in to Cargo. This command may be used to create a local + copy of the sources of all dependencies. + [#6869](https://github.com/rust-lang/cargo/pull/6869) +- 🔥 The "publish lockfile" feature is now stable. This feature will + automatically include the `Cargo.lock` file when a package is published if + it contains a binary executable target. By default, Cargo will ignore + `Cargo.lock` when installing a package. To force Cargo to use the + `Cargo.lock` file included in the published package, use `cargo install + --locked`. This may be useful to ensure that `cargo install` consistently + reproduces the same result. It may also be useful when a semver-incompatible + change is accidentally published to a dependency, providing a way to fall + back to a version that is known to work. + [#7026](https://github.com/rust-lang/cargo/pull/7026) +- 🔥 The `default-run` feature has been stabilized. This feature allows you to + specify which binary executable to run by default with `cargo run` when a + package includes multiple binaries. Set the `default-run` key in the + `[package]` table in `Cargo.toml` to the name of the binary to use by + default. + [#7056](https://github.com/rust-lang/cargo/pull/7056) + +### Changed +- `cargo package` now verifies that build scripts do not create empty + directories. + [#6973](https://github.com/rust-lang/cargo/pull/6973) +- A warning is now issued if `cargo doc` generates duplicate outputs, which + causes files to be randomly stomped on. This may happen for a variety of + reasons (renamed dependencies, multiple versions of the same package, + packages with renamed libraries, etc.). This is a known bug, which needs + more work to handle correctly. + [#6998](https://github.com/rust-lang/cargo/pull/6998) +- Enabling a dependency's feature with `--features foo/bar` will no longer + compile the current crate with the `foo` feature if `foo` is not an optional + dependency. + [#7010](https://github.com/rust-lang/cargo/pull/7010) +- If `--remap-path-prefix` is passed via RUSTFLAGS, it will no longer affect + the filename metadata hash. + [#6966](https://github.com/rust-lang/cargo/pull/6966) +- libgit2 has been updated to 0.28.2, which Cargo uses to access git + repositories. This brings in hundreds of changes and fixes since it was last + updated in November. + [#7018](https://github.com/rust-lang/cargo/pull/7018) +- Cargo now supports absolute paths in the dep-info files generated by rustc. + This is laying the groundwork for [tracking + binaries](https://github.com/rust-lang/rust/pull/61727), such as libstd, for + rebuild detection. (Note: this contains a known bug.) + [#7030](https://github.com/rust-lang/cargo/pull/7030) + +### Fixed +- Fixed how zsh completions fetch the list of commands. + [#6956](https://github.com/rust-lang/cargo/pull/6956) +- "+ debuginfo" is no longer printed in the build summary when `debug` is set + to 0. + [#6971](https://github.com/rust-lang/cargo/pull/6971) +- Fixed `cargo doc` with an example configured with `doc = true` to document + correctly. + [#7023](https://github.com/rust-lang/cargo/pull/7023) +- Don't fail if a read-only lock cannot be acquired in CARGO_HOME. This helps + when CARGO_HOME doesn't exist, but `--locked` is used which means CARGO_HOME + is not needed. + [#7149](https://github.com/rust-lang/cargo/pull/7149) +- Reverted a change in 1.35 which released jobserver tokens when Cargo blocked + on a lock file. It caused a deadlock in some situations. + [#7204](https://github.com/rust-lang/cargo/pull/7204) + +### Nightly only +- Added [compiler message + caching](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#cache-messages). + The `-Z cache-messages` flag makes cargo cache the compiler output so that + future runs can redisplay previous warnings. + [#6933](https://github.com/rust-lang/cargo/pull/6933) +- `-Z mtime-on-use` no longer touches intermediate artifacts. + [#7050](https://github.com/rust-lang/cargo/pull/7050) + +## Cargo 1.36 (2019-07-04) +[6f3e9c36...c4fcfb72](https://github.com/rust-lang/cargo/compare/6f3e9c36...c4fcfb72) + +### Added +- Added more detailed documentation on target auto-discovery. + [#6898](https://github.com/rust-lang/cargo/pull/6898) +- 🔥 Stabilize the `--offline` flag which allows using cargo without a network + connection. + [#6934](https://github.com/rust-lang/cargo/pull/6934) + [#6871](https://github.com/rust-lang/cargo/pull/6871) + +### Changed +- `publish = ["crates-io"]` may be added to the manifest to restrict + publishing to crates.io only. + [#6838](https://github.com/rust-lang/cargo/pull/6838) +- macOS: Only include the default paths if `DYLD_FALLBACK_LIBRARY_PATH` is not + set. Also, remove `/lib` from the default set. + [#6856](https://github.com/rust-lang/cargo/pull/6856) +- `cargo publish` will now exit early if the login token is not available. + [#6854](https://github.com/rust-lang/cargo/pull/6854) +- HTTP/2 stream errors are now considered "spurious" and will cause a retry. + [#6861](https://github.com/rust-lang/cargo/pull/6861) +- Setting a feature on a dependency where that feature points to a *required* + dependency is now an error. Previously it was a warning. + [#6860](https://github.com/rust-lang/cargo/pull/6860) +- The `registry.index` config value now supports relative `file:` URLs. + [#6873](https://github.com/rust-lang/cargo/pull/6873) +- macOS: The `.dSYM` directory is now symbolically linked next to example + binaries without the metadata hash so that debuggers can find it. + [#6891](https://github.com/rust-lang/cargo/pull/6891) +- The default `Cargo.toml` template for now projects now includes a comment + providing a link to the documentation. + [#6881](https://github.com/rust-lang/cargo/pull/6881) +- Some improvements to the wording of the crate download summary. + [#6916](https://github.com/rust-lang/cargo/pull/6916) + [#6920](https://github.com/rust-lang/cargo/pull/6920) +- ✨ Changed `RUST_LOG` environment variable to `CARGO_LOG` so that user code + that uses the `log` crate will not display cargo's debug output. + [#6918](https://github.com/rust-lang/cargo/pull/6918) +- `Cargo.toml` is now always included when packaging, even if it is not listed + in `package.include`. + [#6925](https://github.com/rust-lang/cargo/pull/6925) +- Package include/exclude values now use gitignore patterns instead of glob + patterns. [#6924](https://github.com/rust-lang/cargo/pull/6924) +- Provide a better error message when crates.io times out. Also improve error + messages with other HTTP response codes. + [#6936](https://github.com/rust-lang/cargo/pull/6936) + +### Performance +- Resolver performance improvements for some cases. + [#6853](https://github.com/rust-lang/cargo/pull/6853) +- Optimized how cargo reads the index JSON files by caching the results. + [#6880](https://github.com/rust-lang/cargo/pull/6880) + [#6912](https://github.com/rust-lang/cargo/pull/6912) + [#6940](https://github.com/rust-lang/cargo/pull/6940) +- Various performance improvements. + [#6867](https://github.com/rust-lang/cargo/pull/6867) + +### Fixed +- More carefully track the on-disk fingerprint information for dependencies. + This can help in some rare cases where the build is interrupted and + restarted. [#6832](https://github.com/rust-lang/cargo/pull/6832) +- `cargo run` now correctly passes non-UTF8 arguments to the child process. + [#6849](https://github.com/rust-lang/cargo/pull/6849) +- Fixed bash completion to run on bash 3.2, the stock version in macOS. + [#6905](https://github.com/rust-lang/cargo/pull/6905) +- Various fixes and improvements to zsh completion. + [#6926](https://github.com/rust-lang/cargo/pull/6926) + [#6929](https://github.com/rust-lang/cargo/pull/6929) +- Fix `cargo update` ignoring `-p` arguments if the `Cargo.lock` file was + missing. + [#6904](https://github.com/rust-lang/cargo/pull/6904) + +### Nightly only +- Added [`-Z install-upgrade` + feature](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#install-upgrade) + to track details about installed crates and to update them if they are + out-of-date. [#6798](https://github.com/rust-lang/cargo/pull/6798) +- Added the [`public-dependency` + feature](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#public-dependency) + which allows tracking public versus private dependencies. + [#6772](https://github.com/rust-lang/cargo/pull/6772) +- Added build pipelining via the `build.pipelining` config + option (`CARGO_BUILD_PIPELINING` env var). + [#6883](https://github.com/rust-lang/cargo/pull/6883) +- The `publish-lockfile` feature has had some significant changes. The default + is now `true`, the `Cargo.lock` will always be published for binary crates. + The `Cargo.lock` is now regenerated during publishing. `cargo install` now + ignores the `Cargo.lock` file by default, and requires `--locked` to use the + lock file. Warnings have been added if yanked dependencies are detected. + [#6840](https://github.com/rust-lang/cargo/pull/6840) + +## Cargo 1.35 (2019-05-23) +[6789d8a0...6f3e9c36](https://github.com/rust-lang/cargo/compare/6789d8a0...6f3e9c36) + +### Added +- Added the `rustc-cdylib-link-arg` key for build scripts to specify linker + arguments for cdylib crates. + [#6298](https://github.com/rust-lang/cargo/pull/6298) + +### Changed +- When passing a test filter, such as `cargo test foo`, don't build examples + (unless they set `test = true`). + [#6683](https://github.com/rust-lang/cargo/pull/6683) +- Forward the `--quiet` flag from `cargo test` to the libtest harness so that + tests are actually quiet. + [#6358](https://github.com/rust-lang/cargo/pull/6358) +- The verification step in `cargo package` that checks if any files are + modified is now stricter. It uses a hash of the contents instead of checking + filesystem mtimes. It also checks *all* files in the package. + [#6740](https://github.com/rust-lang/cargo/pull/6740) +- Jobserver tokens are now released whenever Cargo blocks on a file lock. + [#6748](https://github.com/rust-lang/cargo/pull/6748) +- Issue a warning for a previous bug in the TOML parser that allowed multiple + table headers with the same name. + [#6761](https://github.com/rust-lang/cargo/pull/6761) +- Removed the `CARGO_PKG_*` environment variables from the metadata hash and + added them to the fingerprint instead. This means that when these values + change, stale artifacts are not left behind. Also added the "repository" + value to the fingerprint. + [#6785](https://github.com/rust-lang/cargo/pull/6785) +- `cargo metadata` no longer shows a `null` field for a dependency without a + library in `resolve.nodes.deps`. The dependency is no longer shown. + [#6534](https://github.com/rust-lang/cargo/pull/6534) +- `cargo new` will no longer include an email address in the `authors` field + if it is set to the empty string. + [#6802](https://github.com/rust-lang/cargo/pull/6802) +- `cargo doc --open` now works when documenting multiple packages. + [#6803](https://github.com/rust-lang/cargo/pull/6803) +- `cargo install --path P` now loads the `.cargo/config` file from the + directory P. [#6805](https://github.com/rust-lang/cargo/pull/6805) +- Using semver metadata in a version requirement (such as `1.0.0+1234`) now + issues a warning that it is ignored. + [#6806](https://github.com/rust-lang/cargo/pull/6806) +- `cargo install` now rejects certain combinations of flags where some flags + would have been ignored. + [#6801](https://github.com/rust-lang/cargo/pull/6801) +- Resolver performance improvements for some cases. + [#6776](https://github.com/rust-lang/cargo/pull/6776) + +### Fixed +- Fixed running separate commands (such as `cargo build` then `cargo test`) + where the second command could use stale results from a build script. + [#6720](https://github.com/rust-lang/cargo/pull/6720) +- Fixed `cargo fix` not working properly if a `.gitignore` file that matched + the root package directory. + [#6767](https://github.com/rust-lang/cargo/pull/6767) +- Fixed accidentally compiling a lib multiple times if `panic=unwind` was set + in a profile. [#6781](https://github.com/rust-lang/cargo/pull/6781) +- Paths to JSON files in `build.target` config value are now canonicalized to + fix building dependencies. + [#6778](https://github.com/rust-lang/cargo/pull/6778) +- Fixed re-running a build script if its compilation was interrupted (such as + if it is killed). [#6782](https://github.com/rust-lang/cargo/pull/6782) +- Fixed `cargo new` initializing a fossil repo. + [#6792](https://github.com/rust-lang/cargo/pull/6792) +- Fixed supporting updating a git repo that has a force push when using the + `git-fetch-with-cli` feature. `git-fetch-with-cli` also shows more error + information now when it fails. + [#6800](https://github.com/rust-lang/cargo/pull/6800) +- `--example` binaries built for the WASM target are fixed to no longer + include a metadata hash in the filename, and are correctly emitted in the + `compiler-artifact` JSON message. + [#6812](https://github.com/rust-lang/cargo/pull/6812) + +### Nightly only +- `cargo clippy-preview` is now a built-in cargo command. + [#6759](https://github.com/rust-lang/cargo/pull/6759) +- The `build-override` profile setting now includes proc-macros and their + dependencies. + [#6811](https://github.com/rust-lang/cargo/pull/6811) +- Optional and target dependencies now work better with `-Z offline`. + [#6814](https://github.com/rust-lang/cargo/pull/6814) + +## Cargo 1.34 (2019-04-11) +[f099fe94...6789d8a0](https://github.com/rust-lang/cargo/compare/f099fe94...6789d8a0) + +### Added +- 🔥 Stabilized support for [alternate + registries](https://doc.rust-lang.org/1.34.0/cargo/reference/registries.html). + [#6654](https://github.com/rust-lang/cargo/pull/6654) +- Added documentation on using builds.sr.ht Continuous Integration with Cargo. + [#6565](https://github.com/rust-lang/cargo/pull/6565) +- `Cargo.lock` now includes a comment at the top that it is `@generated`. + [#6548](https://github.com/rust-lang/cargo/pull/6548) +- Azure DevOps badges are now supported. + [#6264](https://github.com/rust-lang/cargo/pull/6264) +- Added a warning if `--exclude` flag specifies an unknown package. + [#6679](https://github.com/rust-lang/cargo/pull/6679) + +### Changed +- `cargo test --doc --no-run` doesn't do anything, so it now displays an error + to that effect. [#6628](https://github.com/rust-lang/cargo/pull/6628) +- Various updates to bash completion: add missing options and commands, + support libtest completions, use rustup for `--target` completion, fallback + to filename completion, fix editing the command line. + [#6644](https://github.com/rust-lang/cargo/pull/6644) +- Publishing a crate with a `[patch]` section no longer generates an error. + The `[patch]` section is removed from the manifest before publishing. + [#6535](https://github.com/rust-lang/cargo/pull/6535) +- `build.incremental = true` config value is now treated the same as + `CARGO_INCREMENTAL=1`, previously it was ignored. + [#6688](https://github.com/rust-lang/cargo/pull/6688) +- Errors from a registry are now always displayed regardless of the HTTP + response code. [#6771](https://github.com/rust-lang/cargo/pull/6771) + +### Fixed +- Fixed bash completion for `cargo run --example`. + [#6578](https://github.com/rust-lang/cargo/pull/6578) +- Fixed a race condition when using a *local* registry and running multiple + cargo commands at the same time that build the same crate. + [#6591](https://github.com/rust-lang/cargo/pull/6591) +- Fixed some flickering and excessive updates of the progress bar. + [#6615](https://github.com/rust-lang/cargo/pull/6615) +- Fixed a hang when using a git credential helper that returns incorrect + credentials. [#6681](https://github.com/rust-lang/cargo/pull/6681) +- Fixed resolving yanked crates with a local registry. + [#6750](https://github.com/rust-lang/cargo/pull/6750) + +### Nightly only +- Added `-Z mtime-on-use` flag to cause the mtime to be updated on the + filesystem when a crate is used. This is intended to be able to track stale + artifacts in the future for cleaning up unused files. + [#6477](https://github.com/rust-lang/cargo/pull/6477) + [#6573](https://github.com/rust-lang/cargo/pull/6573) +- Added experimental `-Z dual-proc-macros` to build proc macros for both the + host and the target. + [#6547](https://github.com/rust-lang/cargo/pull/6547) + +## Cargo 1.33 (2019-02-28) +[8610973a...f099fe94](https://github.com/rust-lang/cargo/compare/8610973a...f099fe94) + +### Added +- `compiler-artifact` JSON messages now include an `"executable"` key which + includes the path to the executable that was built. + [#6363](https://github.com/rust-lang/cargo/pull/6363) +- The man pages have been rewritten, and are now published with the web + documentation. [#6405](https://github.com/rust-lang/cargo/pull/6405) +- `cargo login` now displays a confirmation after saving the token. + [#6466](https://github.com/rust-lang/cargo/pull/6466) +- A warning is now emitted if a `[patch]` entry does not match any package. + [#6470](https://github.com/rust-lang/cargo/pull/6470) +- `cargo metadata` now includes the `links` key for a package. + [#6480](https://github.com/rust-lang/cargo/pull/6480) +- "Very verbose" output with `-vv` now displays the environment variables that + cargo sets when it runs a process. + [#6492](https://github.com/rust-lang/cargo/pull/6492) +- `--example`, `--bin`, `--bench`, or `--test` without an argument now lists + the available targets for those options. + [#6505](https://github.com/rust-lang/cargo/pull/6505) +- Windows: If a process fails with an extended status exit code, a + human-readable name for the code is now displayed. + [#6532](https://github.com/rust-lang/cargo/pull/6532) +- Added `--features`, `--no-default-features`, and `--all-features` flags to + the `cargo package` and `cargo publish` commands to use the given features + when verifying the package. + [#6453](https://github.com/rust-lang/cargo/pull/6453) + +### Changed +- If `cargo fix` fails to compile the fixed code, the rustc errors are now + displayed on the console. + [#6419](https://github.com/rust-lang/cargo/pull/6419) +- Hide the `--host` flag from `cargo login`, it is unused. + [#6466](https://github.com/rust-lang/cargo/pull/6466) +- Build script fingerprints now include the rustc version. + [#6473](https://github.com/rust-lang/cargo/pull/6473) +- macOS: Switched to setting `DYLD_FALLBACK_LIBRARY_PATH` instead of + `DYLD_LIBRARY_PATH`. [#6355](https://github.com/rust-lang/cargo/pull/6355) +- `RUSTFLAGS` is now included in the metadata hash, meaning that changing + the flags will not overwrite previously built files. + [#6503](https://github.com/rust-lang/cargo/pull/6503) +- When updating the crate graph, unrelated yanked crates were erroneously + removed. They are now kept at their original version if possible. This was + causing unrelated packages to be downgraded during `cargo update -p + somecrate`. [#5702](https://github.com/rust-lang/cargo/issues/5702) +- TOML files now support the [0.5 TOML + syntax](https://github.com/toml-lang/toml/blob/master/CHANGELOG.md#050--2018-07-11). + +### Fixed +- `cargo fix` will now ignore suggestions that modify multiple files. + [#6402](https://github.com/rust-lang/cargo/pull/6402) +- `cargo fix` will now only fix one target at a time, to deal with targets + which share the same source files. + [#6434](https://github.com/rust-lang/cargo/pull/6434) +- Fixed bash completion showing the list of cargo commands. + [#6461](https://github.com/rust-lang/cargo/issues/6461) +- `cargo init` will now avoid creating duplicate entries in `.gitignore` + files. [#6521](https://github.com/rust-lang/cargo/pull/6521) +- Builds now attempt to detect if a file is modified in the middle of a + compilation, allowing you to build again and pick up the new changes. This + is done by keeping track of when the compilation *starts* not when it + finishes. Also, [#5919](https://github.com/rust-lang/cargo/pull/5919) was + reverted, meaning that cargo does *not* treat equal filesystem mtimes as + requiring a rebuild. [#6484](https://github.com/rust-lang/cargo/pull/6484) + +### Nightly only +- Allow using registry *names* in `[patch]` tables instead of just URLs. + [#6456](https://github.com/rust-lang/cargo/pull/6456) +- `cargo metadata` added the `registry` key for dependencies. + [#6500](https://github.com/rust-lang/cargo/pull/6500) +- Registry names are now restricted to the same style as + package names (alphanumeric, `-` and `_` characters). + [#6469](https://github.com/rust-lang/cargo/pull/6469) +- `cargo login` now displays the `/me` URL from the registry config. + [#6466](https://github.com/rust-lang/cargo/pull/6466) +- `cargo login --registry=NAME` now supports interactive input for the token. + [#6466](https://github.com/rust-lang/cargo/pull/6466) +- Registries may now elide the `api` key from `config.json` to indicate they + do not support API access. + [#6466](https://github.com/rust-lang/cargo/pull/6466) +- Fixed panic when using `--message-format=json` with metabuild. + [#6432](https://github.com/rust-lang/cargo/pull/6432) +- Fixed detection of publishing to crates.io when using alternate registries. + [#6525](https://github.com/rust-lang/cargo/pull/6525) + +## Cargo 1.32 (2019-01-17) +[339d9f9c...8610973a](https://github.com/rust-lang/cargo/compare/339d9f9c...8610973a) + +### Added +- Registries may now display warnings after a successful publish. + [#6303](https://github.com/rust-lang/cargo/pull/6303) +- Added a [glossary](https://doc.rust-lang.org/cargo/appendix/glossary.html) + to the documentation. [#6321](https://github.com/rust-lang/cargo/pull/6321) +- Added the alias `c` for `cargo check`. + [#6218](https://github.com/rust-lang/cargo/pull/6218) + +### Changed +- 🔥 HTTP/2 multiplexing is now enabled by default. The `http.multiplexing` + config value may be used to disable it. + [#6271](https://github.com/rust-lang/cargo/pull/6271) +- Use ANSI escape sequences to clear lines instead of spaces. + [#6233](https://github.com/rust-lang/cargo/pull/6233) +- Disable git templates when checking out git dependencies, which can cause + problems. [#6252](https://github.com/rust-lang/cargo/pull/6252) +- Include the `--update-head-ok` git flag when using the + `net.git-fetch-with-cli` option. This can help prevent failures when + fetching some repositories. + [#6250](https://github.com/rust-lang/cargo/pull/6250) +- When extracting a crate during the verification step of `cargo package`, the + filesystem mtimes are no longer set, which was failing on some rare + filesystems. [#6257](https://github.com/rust-lang/cargo/pull/6257) +- `crate-type = ["proc-macro"]` is now treated the same as `proc-macro = true` + in `Cargo.toml`. [#6256](https://github.com/rust-lang/cargo/pull/6256) +- An error is raised if `dependencies`, `features`, `target`, or `badges` is + set in a virtual workspace. Warnings are displayed if `replace` or `patch` + is used in a workspace member. + [#6276](https://github.com/rust-lang/cargo/pull/6276) +- Improved performance of the resolver in some cases. + [#6283](https://github.com/rust-lang/cargo/pull/6283) + [#6366](https://github.com/rust-lang/cargo/pull/6366) +- `.rmeta` files are no longer hard-linked into the base target directory + (`target/debug`). [#6292](https://github.com/rust-lang/cargo/pull/6292) +- A warning is issued if multiple targets are built with the same output + filenames. [#6308](https://github.com/rust-lang/cargo/pull/6308) +- When using `cargo build` (without `--release`) benchmarks are now built + using the "test" profile instead of "bench". This makes it easier to debug + benchmarks, and avoids confusing behavior. + [#6309](https://github.com/rust-lang/cargo/pull/6309) +- User aliases may now override built-in aliases (`b`, `r`, `t`, and `c`). + [#6259](https://github.com/rust-lang/cargo/pull/6259) +- Setting `autobins=false` now disables auto-discovery of inferred targets. + [#6329](https://github.com/rust-lang/cargo/pull/6329) +- `cargo verify-project` will now fail on stable if the project uses unstable + features. [#6326](https://github.com/rust-lang/cargo/pull/6326) +- Platform targets with an internal `.` within the name are now allowed. + [#6255](https://github.com/rust-lang/cargo/pull/6255) +- `cargo clean --release` now only deletes the release directory. + [#6349](https://github.com/rust-lang/cargo/pull/6349) + +### Fixed +- Avoid adding extra angle brackets in email address for `cargo new`. + [#6243](https://github.com/rust-lang/cargo/pull/6243) +- The progress bar is disabled if the CI environment variable is set. + [#6281](https://github.com/rust-lang/cargo/pull/6281) +- Avoid retaining all rustc output in memory. + [#6289](https://github.com/rust-lang/cargo/pull/6289) +- If JSON parsing fails, and rustc exits nonzero, don't lose the parse failure + message. [#6290](https://github.com/rust-lang/cargo/pull/6290) +- Fixed renaming a project directory with build scripts. + [#6328](https://github.com/rust-lang/cargo/pull/6328) +- Fixed `cargo run --example NAME` to work correctly if the example sets + `crate_type = ["bin"]`. + [#6330](https://github.com/rust-lang/cargo/pull/6330) +- Fixed issue with `cargo package` git discovery being too aggressive. The + `--allow-dirty` now completely disables the git repo checks. + [#6280](https://github.com/rust-lang/cargo/pull/6280) +- Fixed build change tracking for `[patch]` deps which resulted in `cargo + build` rebuilding when it shouldn't. + [#6493](https://github.com/rust-lang/cargo/pull/6493) + +### Nightly only +- Allow usernames in registry URLs. + [#6242](https://github.com/rust-lang/cargo/pull/6242) +- Added `"compile_mode"` key to the build-plan JSON structure to be able to + distinguish running a custom build script versus compiling the build script. + [#6331](https://github.com/rust-lang/cargo/pull/6331) +- `--out-dir` no longer copies over build scripts. + [#6300](https://github.com/rust-lang/cargo/pull/6300) + +## Cargo 1.31 (2018-12-06) +[36d96825...339d9f9c](https://github.com/rust-lang/cargo/compare/36d96825...339d9f9c) + +### Added +- 🔥 Stabilized support for the 2018 edition. + [#5984](https://github.com/rust-lang/cargo/pull/5984) + [#5989](https://github.com/rust-lang/cargo/pull/5989) +- 🔥 Added the ability to [rename + dependencies](https://doc.rust-lang.org/1.31.0/cargo/reference/specifying-dependencies.html#renaming-dependencies-in-cargotoml) + in Cargo.toml. [#6319](https://github.com/rust-lang/cargo/pull/6319) +- 🔥 Added support for HTTP/2 pipelining and multiplexing. Set the + `http.multiplexing` config value to enable. + [#6005](https://github.com/rust-lang/cargo/pull/6005) +- Added `http.debug` configuration value to debug HTTP connections. Use + `CARGO_HTTP_DEBUG=true RUST_LOG=cargo::ops::registry cargo build` to display + the debug information. [#6166](https://github.com/rust-lang/cargo/pull/6166) +- `CARGO_PKG_REPOSITORY` environment variable is set with the repository value + from `Cargo.toml` when building . + [#6096](https://github.com/rust-lang/cargo/pull/6096) + +### Changed +- `cargo test --doc` now rejects other flags instead of ignoring them. + [#6037](https://github.com/rust-lang/cargo/pull/6037) +- `cargo install` ignores `~/.cargo/config`. + [#6026](https://github.com/rust-lang/cargo/pull/6026) +- `cargo version --verbose` is now the same as `cargo -vV`. + [#6076](https://github.com/rust-lang/cargo/pull/6076) +- Comments at the top of `Cargo.lock` are now preserved. + [#6181](https://github.com/rust-lang/cargo/pull/6181) +- When building in "very verbose" mode (`cargo build -vv`), build script + output is prefixed with the package name and version, such as `[foo 0.0.1]`. + [#6164](https://github.com/rust-lang/cargo/pull/6164) +- If `cargo fix --broken-code` fails to compile after fixes have been applied, + the files are no longer reverted and are left in their broken state. + [#6316](https://github.com/rust-lang/cargo/pull/6316) + +### Fixed +- Windows: Pass Ctrl-C to the process with `cargo run`. + [#6004](https://github.com/rust-lang/cargo/pull/6004) +- macOS: Fix bash completion. + [#6038](https://github.com/rust-lang/cargo/pull/6038) +- Support arbitrary toolchain names when completing `+toolchain` in bash + completion. [#6038](https://github.com/rust-lang/cargo/pull/6038) +- Fixed edge cases in the resolver, when backtracking on failed dependencies. + [#5988](https://github.com/rust-lang/cargo/pull/5988) +- Fixed `cargo test --all-targets` running lib tests three times. + [#6039](https://github.com/rust-lang/cargo/pull/6039) +- Fixed publishing renamed dependencies to crates.io. + [#5993](https://github.com/rust-lang/cargo/pull/5993) +- Fixed `cargo install` on a git repo with multiple binaries. + [#6060](https://github.com/rust-lang/cargo/pull/6060) +- Fixed deeply nested JSON emitted by rustc being lost. + [#6081](https://github.com/rust-lang/cargo/pull/6081) +- Windows: Fix locking msys terminals to 60 characters. + [#6122](https://github.com/rust-lang/cargo/pull/6122) +- Fixed renamed dependencies with dashes. + [#6140](https://github.com/rust-lang/cargo/pull/6140) +- Fixed linking against the wrong dylib when the dylib existed in both + `target/debug` and `target/debug/deps`. + [#6167](https://github.com/rust-lang/cargo/pull/6167) +- Fixed some unnecessary recompiles when `panic=abort` is used. + [#6170](https://github.com/rust-lang/cargo/pull/6170) + +### Nightly only +- Added `--registry` flag to `cargo install`. + [#6128](https://github.com/rust-lang/cargo/pull/6128) +- Added `registry.default` configuration value to specify the + default registry to use if `--registry` flag is not passed. + [#6135](https://github.com/rust-lang/cargo/pull/6135) +- Added `--registry` flag to `cargo new` and `cargo init`. + [#6135](https://github.com/rust-lang/cargo/pull/6135) + +## Cargo 1.30 (2018-10-25) +[524a578d...36d96825](https://github.com/rust-lang/cargo/compare/524a578d...36d96825) + +### Added +- 🔥 Added an animated progress bar shows progress during building. + [#5995](https://github.com/rust-lang/cargo/pull/5995/) +- Added `resolve.nodes.deps` key to `cargo metadata`, which includes more + information about resolved dependencies, and properly handles renamed + dependencies. [#5871](https://github.com/rust-lang/cargo/pull/5871) +- When creating a package, provide more detail with `-v` when failing to + discover if files are dirty in a git repository. Also fix a problem with + discovery on Windows. [#5858](https://github.com/rust-lang/cargo/pull/5858) +- Filters like `--bin`, `--test`, `--example`, `--bench`, or `--lib` can be + used in a workspace without selecting a specific package. + [#5873](https://github.com/rust-lang/cargo/pull/5873) +- `cargo run` can be used in a workspace without selecting a specific package. + [#5877](https://github.com/rust-lang/cargo/pull/5877) +- `cargo doc --message-format=json` now outputs JSON messages from rustdoc. + [#5878](https://github.com/rust-lang/cargo/pull/5878) +- Added `--message-format=short` to show one-line messages. + [#5879](https://github.com/rust-lang/cargo/pull/5879) +- Added `.cargo_vcs_info.json` file to `.crate` packages that captures the + current git hash. [#5886](https://github.com/rust-lang/cargo/pull/5886) +- Added `net.git-fetch-with-cli` configuration option to use the `git` + executable to fetch repositories instead of using the built-in libgit2 + library. [#5914](https://github.com/rust-lang/cargo/pull/5914) +- Added `required-features` to `cargo metadata`. + [#5902](https://github.com/rust-lang/cargo/pull/5902) +- `cargo uninstall` within a package will now uninstall that package. + [#5927](https://github.com/rust-lang/cargo/pull/5927) +- Added `--allow-staged` flag to `cargo fix` to allow it to run if files are + staged in git. [#5943](https://github.com/rust-lang/cargo/pull/5943) +- Added `net.low-speed-limit` config value, and also honor `net.timeout` for + http operations. [#5957](https://github.com/rust-lang/cargo/pull/5957) +- Added `--edition` flag to `cargo new`. + [#5984](https://github.com/rust-lang/cargo/pull/5984) +- Temporarily stabilized 2018 edition support for the duration of the beta. + [#5984](https://github.com/rust-lang/cargo/pull/5984) + [#5989](https://github.com/rust-lang/cargo/pull/5989) +- Added support for `target.'cfg(…)'.runner` config value to specify the + run/test/bench runner for targets that use config expressions. + [#5959](https://github.com/rust-lang/cargo/pull/5959) + +### Changed +- Windows: `cargo run` will not kill child processes when the main process + exits. [#5887](https://github.com/rust-lang/cargo/pull/5887) +- Switched to the `opener` crate to open a web browser with `cargo doc + --open`. This should more reliably select the system-preferred browser on + all platforms. [#5888](https://github.com/rust-lang/cargo/pull/5888) +- Equal file mtimes now cause a target to be rebuilt. Previously only if files + were strictly *newer* than the last build would it cause a rebuild. + [#5919](https://github.com/rust-lang/cargo/pull/5919) +- Ignore `build.target` config value when running `cargo install`. + [#5874](https://github.com/rust-lang/cargo/pull/5874) +- Ignore `RUSTC_WRAPPER` for `cargo fix`. + [#5983](https://github.com/rust-lang/cargo/pull/5983) +- Ignore empty `RUSTC_WRAPPER`. + [#5985](https://github.com/rust-lang/cargo/pull/5985) + +### Fixed +- Fixed error when creating a package with an edition field in `Cargo.toml`. + [#5908](https://github.com/rust-lang/cargo/pull/5908) +- More consistently use relative paths for path dependencies in a workspace. + [#5935](https://github.com/rust-lang/cargo/pull/5935) +- `cargo fix` now always runs, even if it was run previously. + [#5944](https://github.com/rust-lang/cargo/pull/5944) +- Windows: Attempt to more reliably detect terminal width. msys-based + terminals are forced to 60 characters wide. + [#6010](https://github.com/rust-lang/cargo/pull/6010) +- Allow multiple target flags with `cargo doc --document-private-items`. + [6022](https://github.com/rust-lang/cargo/pull/6022) + +### Nightly only +- Added + [metabuild](https://doc.rust-lang.org/1.30.0/cargo/reference/unstable.html#metabuild). + [#5628](https://github.com/rust-lang/cargo/pull/5628) -- cgit v1.2.3