A cargo
subcommand for checking and applying updates to installed executables
Firstly, ensure you have CMake and the Required Libraries™.
Then proceed as usual:
cargo install cargo-update
If that doesn't work:
- re-try with
PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
, - re-try with
LIBSSH2_SYS_USE_PKG_CONFIG=whatever
, - install OpenSSL via
brew
, and re-try withLDFLAGS="-L/usr/local/opt/[email protected]/lib" CPPFLAGS="-I/usr/local/opt/[email protected]/include"
, - verify that you don't
openssl
installed twice viabrew
, - re-try with
--features vendored-openssl
, - re-try with
--features vendored-libgit2
. - re-try with
--features vendored-libcurl
.
If it still doesn't work, slam open an issue or comment on one of the existing relevant ones.
Dependency | Debian package | Fedora package | MSYS2 package |
---|---|---|---|
libgit2 |
libgit2-dev |
libgit2-devel |
mingw-w64-x86_64-libgit2 |
libcurl |
libcurl4-*-dev |
libcurl-devel |
libcurl-devel |
libssh2 |
libssh-dev |
libssh2-devel |
mingw-w64-x86_64-libssh2 |
openssl |
libssl-dev |
openssl-devel |
mingw-w64-x86_64-openssl |
pkgconf (some platforms) |
pkgconf |
pkgconf |
mingw-w64-x86_64-pkgconf |
cargo install-update -a
— check for newer versions and update all installed packages.
cargo install-update crate1 crate2 ...
— check for newer versions and update selected packages, will not install new packages.
For more information and examples see the manual.
cargo install-update-config -t unstable -f feature1 -d false crate
— when building crate, do so with the unstable toolchain with feature1 and no default features.
For more information and examples see the manual.
cargo-update
will update itself seamlessly on Linux and Windows.
On Windows the following strategy is applied:
- Check for old versions, remove them
- Add the current version to the current executable's extension
- Create an empty file in place of the just-renamed file (this way
cargo install
will "replace" it and not duplicate the entry in.crates.toml
)
Some crates, like clippy
and rustfmt
, have moved from Crates.io to being a rustup
component.
If you'd installed them beforehand, then added them via rustup component
, they might not have been removed from the list of crates installed via cargo install
,
and you might come across errors such as
$ cargo install-update -a
Updating registry 'https://github.com/rust-lang/crates.io-index'
Package Installed Latest Needs update
clippy v0.0.179 v0.0.302 Yes
.....
Updating clippy
Updating crates.io index
Installing clippy v0.0.302
Compiling clippy v0.0.302
error: failed to compile `clippy v0.0.302`, intermediate artifacts can be found at `/tmp/cargo-installxHfj2y`
Caused by:
failed to run custom build command for `clippy v0.0.302`
Caused by:
process didn't exit successfully: `/tmp/cargo-installxHfj2y/release/build/clippy-ffeedc2f188020a4/build-script-build` (exit code: 1)
--- stderr
error: Clippy is no longer available via crates.io
help: please run `rustup component add clippy-preview` instead
In that case, run cargo install --list
to verify that they're still there and cargo uninstall
them,
which will deregister the cargo
versions and leave you with the rustup
ones.
Since 0.42.0
,
cargo install cratename
checks for newer versions and installs them if they exist, instead of erroring out like it does usually.
Cargo allows replacing entire registries at a time.
For example, this stanza in ~/.cargo/config
will replace the default crates.io registry with the Shanghai Jiao Tong Universty's mirror:
[source.crates-io]
replace-with = "sjtu"
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
cargo-update
resolves this to the deepest registry, and passes --registry sjtu
to cargo install
.
This worked until roughly nightly-2019-08-10
, but since nightly-2019-09-10
due to a Cargo regression (or feature, but it's breaking without a major version bump, so)
--registry
looks into a different key, requiring this additional stanza to ensure correct updates:
[registries.sjtu]
index = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
Confer the initial implementation, rewrite, final broken testcase and final debug implementation threads (h/t @DCJanus for help debugging and testcases, also dealing with me as I slowly spiraled into insanity).
To all who support further development on Patreon, in particular:
- ThePhD
- Embark Studios
- Lars Strojny
- EvModder