A cargo
subcommand for checking and applying updates to installed executables
Firstly, ensure you have CMake and the Required Libraries™.
Then proceed as usual:
shell
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 with LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
,
* verify that you don't openssl
installed twice via brew
,
* re-try with --features vendored-openssl
,
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
|
| libssh2
| libssh-dev
| libssh2-devel
| mingw-w64-x86_64-libssh2
|
| openssl
| libssl-dev
| openssl-devel
| mingw-w64-x86_64-openssl
|
| pkg-config
(some platforms) | pkg-config
| pkg-config
| mingw-w64-x86_64-pkg-config
|
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 manpage.
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.
cargo
sSince 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:
```toml
[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:
toml
[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: