cargo-outdated-0.9.1/.clog.toml 0100644 0001750 0001750 00000000351 13144330650 0014541 0 ustar 00 0000000 0000000 [clog]
repository = "https://github.com/kbknapp/cargo-outdated"
outfile = "CHANGELOG.md"
from-latest-tag = true
[sections]
Performance = ["perf"]
Improvements = ["impr", "im", "imp"]
Documentation = ["docs"]
Deprecations = ["depr"]
cargo-outdated-0.9.1/.gitignore 0100644 0001750 0001750 00000000235 13144330650 0014633 0 ustar 00 0000000 0000000 # Compiled files
*.o
*.so
*.rlib
*.dll
# Executables
*.exe
# Generated by Cargo
/target
# Temp files
.*~
# Test files
*.test
# Backup Files
*.orig
*.bk
cargo-outdated-0.9.1/.travis.yml 0100644 0001750 0001750 00000000626 13572104650 0014764 0 ustar 00 0000000 0000000 language: rust
rust:
- nightly
- beta
- stable
matrix:
allow_failures:
- rust: nightly
branches:
only:
- master
script:
- |
cargo build --locked
cargo build --features debug
env:
global:
secure: JLBlgHY6OEmhJ8woewNJHmuBokTNUv7/WvLkJGV8xk0t6bXBwSU0jNloXwlH7FiQTc4TccX0PumPDD4MrMgxIAVFPmmmlQOCmdpYP4tqZJ8xo189E5zk8lKF5OyaVYCs5SMmFC3cxCsKjfwGIexNu3ck5Uhwe9jI0tqgkgM3URA=
cargo-outdated-0.9.1/CHANGELOG.md 0100644 0001750 0001750 00000025704 13572104650 0014470 0 ustar 00 0000000 0000000
## 0.8.0
* Update Cargo dependency for compatibility with Rust 2018 edition
## 0.7.1 (2018-09-23)
#### Documentation
* update contributor list ([eae6c697](https://github.com/kbknapp/cargo-outdated/commit/eae6c697b07d0453a5fcf5bbaad397bc5c649f59))
* updates usage text ([642ecbd1](https://github.com/kbknapp/cargo-outdated/commit/642ecbd1e1b40702142d644c560e39d8d58c3f82))
#### Bug Fixes
* Remove extra reference taking per clippy. ([9efa1e8d](https://github.com/kbknapp/cargo-outdated/commit/9efa1e8da16461b4d3f698b4d4c7343b64c5bd92))
#### Others
* Update dependencies and related codes for compatibility. ([d5813a13](https://github.com/kbknapp/cargo-outdated/pull/135/commits/d5813a13b538981e9ed7e60dc9f9c804ef9fe24e))
## v0.7.0 (2017-11-23)
#### Bug Fixes
* Treats optional dependencies as features as well (closes [#100](https://github.com/kbknapp/cargo-outdated/issues/100), [f67634f](https://github.com/kbknapp/cargo-outdated/pull/107/commits/f67634f1ccda77a1ff86e72d6f0e32e6c94ee717))
* Filters yanked packages out from candidates (closes [#101](https://github.com/kbknapp/cargo-outdated/issues/101), [c42a4ef](https://github.com/kbknapp/cargo-outdated/pull/109/commits/c42a4ef33e6242c26b94017be2e6dee3136072f3))
* Rewrites the algorithm of dependency tree comparison (closes [#105](https://github.com/kbknapp/cargo-outdated/issues/105), [5cd414a](https://github.com/kbknapp/cargo-outdated/pull/111/commits/5cd414aa766b5d7ca1bc8ec8687d8af91878116c))
#### Improvements
* Uses [`docopt`](https://crates.io/crates/docopt) instead of [`clap`](https://crates.io/crates/clap) to make `cargo-outdated` more native (closes [#110](https://github.com/kbknapp/cargo-outdated/issues/110), [71cd8ed](https://github.com/kbknapp/cargo-outdated/pull/112/commits/71cd8edb693fef2c24df352ff8d087fd06c4ce4e), [9497bd8](https://github.com/kbknapp/cargo-outdated/pull/114/commits/9497bd8d9b365db234f2ce02b3f7cd988752931a))
#### Documentation
* Adds crates.io version badge to readme ([7e64221](https://github.com/kbknapp/cargo-outdated/pull/104/commits/7e64221c30fbbcc5e9dcfacf12537ba3ac28207c))
* Removes dependency graph from readme ([3792687](https://github.com/kbknapp/cargo-outdated/pull/113/commits/37926871132de526519ddbd39790d357bc5ce28a))
## v0.6.3 (2017-11-07)
#### Documentation
* Adds a CONTRIBUTORS.md and a just target to update it ([062845e](https://github.com/kbknapp/cargo-outdated/pull/102/commits/062845e6a9e54c31a9bfe42307115e80decf47b2))
#### Others
* Adds crates.io categories and badges ([e99f31d](https://github.com/kbknapp/cargo-outdated/pull/102/commits/e99f31d39b0429c1405eff7e93b9310deeebc56d))
## v0.6.2 (2017-10-28)
#### Bug Fixes
* Replaces relative paths with absolute ones in latest manifests (closes [#96](https://github.com/kbknapp/cargo-outdated/issues/96), [ec431cd](https://github.com/kbknapp/cargo-outdated/pull/97/commits/ec431cd1bfe6680b4ccd89703c05a9840874c1ae))
## v0.6.1 (2017-10-25)
#### Bug Fixes
* Fixes `--exit-code`, `--color` (upstream) (closes [#63](https://github.com/kbknapp/cargo-outdated/issues/63), [4d4b6a8](https://github.com/kbknapp/cargo-outdated/pull/90/commits/4d4b6a85b9a6e2c212683eee35efc421188c2051))
* Calls `Source::update()` on non-default sources before `Registry::query()` (closes [#91](https://github.com/kbknapp/cargo-outdated/issues/91), [9e7b774](https://github.com/kbknapp/cargo-outdated/pull/93/commits/9e7b774b833c38e4b9ea842b205348ab2576034d))
#### Performance
* Replaces `format!()` with `Path.join()` (closes [#73](https://github.com/kbknapp/cargo-outdated/issues/73), [4d28c02](https://github.com/kbknapp/cargo-outdated/pull/94/commits/4d28c028fcd7cfce42df7e9223858ad5b046c9e7))
#### Tests
* Runs Travis CI only on `master` to avoid redundant builds
## v0.6.0 (2017-10-21)
#### Improvements
* Queries [`crates.io`](https://crates.io) API for new versions with a channel-aware policy for latest ones (can be ignored by `--aggressive`) (closes [#75](https://github.com/kbknapp/cargo-outdated/issues/75), [7d57929](https://github.com/kbknapp/cargo-outdated/pull/87/commits/7d5792943fd28e17e57589520818b08b55cb667f))
#### Bug Fixes
* Queries [`crates.io`](https://crates.io) API for feature changes to avoid "Package does not have these features" errors and warns user of obsolete features (can be suppressed by `--quiet`) (closes [#84](https://github.com/kbknapp/cargo-outdated/issues/84), [7d57929](https://github.com/kbknapp/cargo-outdated/pull/87/commits/7d5792943fd28e17e57589520818b08b55cb667f))
#### Documentation
* Updates dependency graph in `README.md` (closes [#86](https://github.com/kbknapp/cargo-outdated/issues/86), [cf773eb](https://github.com/kbknapp/cargo-outdated/pull/88/commits/cf773eb1643ee4770dc107579f668ea2a5fd6d3a))
#### Others
* Updates `cargo` to `0.22.0` ([29ce666](https://github.com/kbknapp/cargo-outdated/pull/85/commits/29ce6661cab50dcc9624d0a02be0facf4d5da067))
## v0.5.3 (2017-10-10)
#### Improvements
* Provides `--workspace` flag to enforce workspace mode so that it can loop through workspace members even if it's not executed against a virtual manifest (closes [#81](https://github.com/kbknapp/cargo-outdated/issues/81), [f690a7a](https://github.com/kbknapp/cargo-outdated/pull/82/commits/f690a7a22a3c1f56e67c7ee784e69d96f537c301))
## v0.5.2 (2017-10-06)
#### Documentation
* Briefly explains how `cargo-outdated` works in `README.md` ([8c35c61](https://github.com/kbknapp/cargo-outdated/commit/8c35c6148b4a29d50b55f1b064045e611fc5aa9b))
#### Features
* Loops through all workspace members if executed against a virtual manifest (closes [#58](https://github.com/kbknapp/cargo-outdated/issues/58), [cd36aed](https://github.com/kbknapp/cargo-outdated/commit/cd36aed8f6b540d58ff4eb805cb2a20985f0122e))
#### Bug Fixes
* Fixes missing dependency issue for debug build (closes [#77](https://github.com/kbknapp/cargo-outdated/issues/77), [c82e928](https://github.com/kbknapp/cargo-outdated/pull/78/commits/c82e92859e4659effcc08362081042b441004a1d))
#### Tests
* Debug build is now part of CI ([05ada44](https://github.com/kbknapp/cargo-outdated/pull/78/commits/05ada447863f775ff58e6bfcaa764582af62f2cc))
## v0.5.1 (2017-09-23)
#### Documentation
* Fixes a typo ([38e37c6](https://github.com/kbknapp/cargo-outdated/pull/66/commits/38e37c6ee77a6ff252bb0702033d7a0b03eac226))
#### Improvements
* Enables `--all-features` by default (closes [#57](https://github.com/kbknapp/cargo-outdated/issues/57), [f24c3a6](https://github.com/kbknapp/cargo-outdated/pull/64/commits/f24c3a6a8e050cbb651661bfbc9221546d987c41))
* Prints a dashed line under the table header ([b076bb1](https://github.com/kbknapp/cargo-outdated/pull/65/commits/b076bb144818b2c5d7efcc3af0acf85ae83f44e1))
#### Bug Fixes
* Correctly shows error messages (closes [#60](https://github.com/kbknapp/cargo-outdated/issues/60), [daab865](https://github.com/kbknapp/cargo-outdated/pull/61/commits/daab865647715cf467fc28f1333afcd1fe2cf447))
* Excludes default features if not explicitly specified by user (closes [#69](https://github.com/kbknapp/cargo-outdated/issues/69), [7074fc8](https://github.com/kbknapp/cargo-outdated/pull/70/commits/7074fc8754d0cf231ff84070307ee92c1cedf065))
## v0.5.0 (2017-09-18)
#### Refactoring
* Introduces [`cargo`](https://crates.io/crates/cargo) as a dependency ([0539a61](https://github.com/kbknapp/cargo-outdated/pull/51/commits/0539a619d30175fd287a979a9eecb1143df0f2f6))
#### Improvements
* Replaces `RM` with `Removed` (closes [#46](https://github.com/kbknapp/cargo-outdated/issues/46))
* Adds `Kind`, `Platform` in output
#### Features
* Supports `cargo` workspaces (closes [#28](https://github.com/kbknapp/cargo-outdated/issues/28))
* Supports embedded dependencies (fixes [#50](https://github.com/kbknapp/cargo-outdated/issues/50))
* Supports build/development/target-specific dependencies (closes [#20](https://github.com/kbknapp/cargo-outdated/issues/20), fixes [#49](https://github.com/kbknapp/cargo-outdated/issues/49))
* Adds `--all-features`, `--features`, `--no-default-features`
## v0.4.0 (2017-08-04)
#### Documentation
* Spelling ([6d309060](https://github.com/kbknapp/cargo-outdated/commit/6d3090601d03694838a848e044f157764d0271cb))
#### Bug Fixes
* Sets bin.path in the temp manifest ([a0231de5](https://github.com/kbknapp/cargo-outdated/commit/a0231de51428e5238dcab0d73cdce2d2443f8a7e), closes [#41](https://github.com/kbknapp/cargo-outdated/issues/41))
* Correctly handles dependencies with multiple occurrences ([03d3e74cf](https://github.com/kbknapp/cargo-outdated/commit/03d3e74cf38156adecc1620271ec8beb9c442865))
## v0.3.0 (2016-12-05)
#### Features
* adds a --manifest-path and --lockfile-path to allow use with other projects ([5f886d27](https://github.com/kbknapp/cargo-outdated/commit/5f886d27d3fefbc0b7fec9ffef651c137f58420d), closes [#29](https://github.com/kbknapp/cargo-outdated/issues/29))
## v0.2.0
* **Exit Codes:** adds feature for custom exit code on new vers ([61c8bb9b](https://github.com/kbknapp/cargo-outdated/commit/61c8bb9b52af8745fd16fad646bc2f4dcce336c7), closes [#23](https://github.com/kbknapp/cargo-outdated/issues/23))
#### Improvements
* sort output ([b137e050](https://github.com/kbknapp/cargo-outdated/commit/b137e050ffb861f7ff725324be5cdb527d724a49))
## v0.1.3 (2015-11-14)
#### Documentation
* adds demo ([c2192aac](https://github.com/kbknapp/cargo-outdated/commit/c2192aac903e764a43fc103251e56ce50b89a8eb))
* updates readme with cargo install instructions ([e936a454](https://github.com/kbknapp/cargo-outdated/commit/e936a45443fc02ab65be15d6a872609a95f7dc00))
#### Bug Fixes
* fixes build error on windows due to upstream dep ([af4e1a70](https://github.com/kbknapp/cargo-outdated/commit/af4e1a704a70d5524e76c9ad6fd320cd576c4a2c))
### v0.1.1 (2015-11-04)
#### Documentation
* adds crate level docs ([8ba28c73](https://github.com/kbknapp/cargo-outdated/commit/8ba28c73e084bf0535e0df72653c529886d025a5))
#### Improvements
* various fixes from clippy run ([b8b633fc](https://github.com/kbknapp/cargo-outdated/commit/b8b633fc148b8be38fec8a8efc73d30bc2917716))
## v0.1.0 Initial Implementation (2015-08-11)
### Features
* Initial implementation ([e5d5a82e](https://github.com/kbknapp/cargo-outdated/commit/e5d5a82e95b86f088c53fe5665dc4f8219b7db49))
#### Improvements
* adds better error handling ([9032454c](https://github.com/kbknapp/cargo-outdated/commit/9032454cd1fcbd2d1cadbb924b8664ced04e2406))
#### Documentation
* **CHANGELOG.md:** adds a changelog ([9d1c1601](https://github.com/kbknapp/cargo-outdated/commit/9d1c1601c0729a6f60d51c86936a061f1376b06a))
* **README.md:** adds a readme ([67bc5556](https://github.com/kbknapp/cargo-outdated/commit/67bc555669159f11907f9bb90913e45af232b277))
cargo-outdated-0.9.1/CONTRIBUTING.md 0100644 0001750 0001750 00000003362 13144330650 0015100 0 ustar 00 0000000 0000000 # How to Contribute
Contributions are always welcome! Please use the following guidelines when contributing to `cargo-outdated`
1. Fork `cargo-outdated`
2. Clone your fork (`git clone https://github.com/$YOUR_USERNAME/cargo-outdated && cd cargo-outdated`)
3. Create new branch (`git checkout -b new-branch`)
4. Make your changes, and commit (`git commit -am "your message"`)
* I use a [conventional](https://github.com/ajoslin/conventional-changelog/blob/master/CONVENTIONS.md) changelog format so I can update my changelog using [clog](https://github.com/clog-tool/clog-cli)
* Format your commit subject line using the following format: `TYPE(COMPONENT): MESSAGE` where `TYPE` is one of the following:
- `feat` - A new feature
- `imp` - An improvement to an existing feature
- `perf` - A performance improvement
- `docs` - Changes to documentation only
- `tests` - Changes to the testing framework or tests only
- `fix` - A bug fix
- `refactor` - Code functionality doesn't change, but underlying structure may
- `style` - Stylistic changes only, no functionality changes
- `wip` - A work in progress commit (Should typically be `git rebase`'ed away)
- `chore` - Catch all or things that have to do with the build system, etc
* The `COMPONENT` is optional, and may be a single file, directory, or logical component. Can be omitted if commit applies globally
5. Run the tests (`cargo test`)
6. `git rebase` into concise commits and remove `--fixup`s (`git rebase -i HEAD~NUM` where `NUM` is number of commits back)
7. Push your changes back to your fork (`git push origin $your-branch`)
8. Create a pull request! (You can also create the pull request first, and we'll merge when ready. This a good way to discuss proposed changes.)
cargo-outdated-0.9.1/CONTRIBUTORS.md 0100644 0001750 0001750 00000006507 13351666325 0015145 0 ustar 00 0000000 0000000 the following is a list of contributors:
[
](https://github.com/Frederick888) |[
](https://github.com/kbknapp) |[
](https://github.com/homu) |[
](https://github.com/waywardmonkeys) |[
](https://github.com/AerialX) |[
](https://github.com/Vinatorul) |
:---: |:---: |:---: |:---: |:---: |:---: |
[Frederick888](https://github.com/Frederick888) |[kbknapp](https://github.com/kbknapp) |[homu](https://github.com/homu) |[waywardmonkeys](https://github.com/waywardmonkeys) |[AerialX](https://github.com/AerialX) |[Vinatorul](https://github.com/Vinatorul) |
[
](https://github.com/mbrubeck) |[
](https://github.com/sinkuu) |[
](https://github.com/mathstuf) |[
](https://github.com/TimNN) |[
](https://github.com/wdv4758h) |[
](https://github.com/neosilky) |
:---: |:---: |:---: |:---: |:---: |:---: |
[mbrubeck](https://github.com/mbrubeck) |[sinkuu](https://github.com/sinkuu) |[mathstuf](https://github.com/mathstuf) |[TimNN](https://github.com/TimNN) |[wdv4758h](https://github.com/wdv4758h) |[neosilky](https://github.com/neosilky) |
[
](https://github.com/dimbleby) |[
](https://github.com/jonas-schievink) |[
](https://github.com/killercup) |[
](https://github.com/gitter-badger) |[
](https://github.com/chpio) |[
](https://github.com/bjgill) |
:---: |:---: |:---: |:---: |:---: |:---: |
[dimbleby](https://github.com/dimbleby) |[jonas-schievink](https://github.com/jonas-schievink) |[killercup](https://github.com/killercup) |[gitter-badger](https://github.com/gitter-badger) |[chpio](https://github.com/chpio) |[bjgill](https://github.com/bjgill) |
This list was generated by [mgechev/github-contributors-list](https://github.com/mgechev/github-contributors-list)
cargo-outdated-0.9.1/Cargo.toml.orig 0100644 0001750 0001750 00000001775 13572324547 0015561 0 ustar 00 0000000 0000000 [package]
name = "cargo-outdated"
version = "0.9.1"
authors = [
"Kevin K. ",
"Frederick Z. ",
]
categories = ["development-tools", "development-tools::cargo-plugins"]
edition = "2018"
exclude = ["*.png"]
keywords = [
"cargo",
"subcommand",
"dependencies",
"cargo-subcommand",
"deps",
]
license = "MIT"
readme = "README.md"
repository = "https://github.com/kbknapp/cargo-outdated.git"
description = "Cargo subcommand for displaying when dependencies are out of date"
[badges]
travis-ci = {repository = "kbknapp/cargo-outdated"}
[[bin]]
name = "cargo-outdated"
[dependencies]
cargo = "0.40"
docopt = "1.0.0"
env_logger = "0.7.0"
failure = "0.1.1"
semver = "0.9.0"
serde = {version="1.0.11", features = ["derive"]}
serde_derive = "1.0.11"
serde_json = "1.0.3"
tabwriter = "~1.1.0"
tempfile = "3"
toml = "~0.5.0"
[dependencies.termcolor]
optional = true
version = "1.0"
[features]
debug = ["termcolor"]
default = []
[profile.release]
lto = true
cargo-outdated-0.9.1/Cargo.toml 0000644 00000003316 13573172452 0012055 0 ustar 00 # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies
#
# If you believe there's an error in this file please file an
# issue against the rust-lang/cargo repository. If you're
# editing this file be aware that the upstream Cargo.toml
# will likely look very different (and much more reasonable)
[package]
edition = "2018"
name = "cargo-outdated"
version = "0.9.1"
authors = ["Kevin K. ", "Frederick Z. "]
exclude = ["*.png"]
description = "Cargo subcommand for displaying when dependencies are out of date"
readme = "README.md"
keywords = ["cargo", "subcommand", "dependencies", "cargo-subcommand", "deps"]
categories = ["development-tools", "development-tools::cargo-plugins"]
license = "MIT"
repository = "https://github.com/kbknapp/cargo-outdated.git"
[profile.release]
lto = true
[[bin]]
name = "cargo-outdated"
[dependencies.cargo]
version = "0.40"
[dependencies.docopt]
version = "1.0.0"
[dependencies.env_logger]
version = "0.7.0"
[dependencies.failure]
version = "0.1.1"
[dependencies.semver]
version = "0.9.0"
[dependencies.serde]
version = "1.0.11"
features = ["derive"]
[dependencies.serde_derive]
version = "1.0.11"
[dependencies.serde_json]
version = "1.0.3"
[dependencies.tabwriter]
version = "~1.1.0"
[dependencies.tempfile]
version = "3"
[dependencies.termcolor]
version = "1.0"
optional = true
[dependencies.toml]
version = "~0.5.0"
[features]
debug = ["termcolor"]
default = []
[badges.travis-ci]
repository = "kbknapp/cargo-outdated"
cargo-outdated-0.9.1/LICENSE-MIT 0100644 0001750 0001750 00000002064 13144330650 0014301 0 ustar 00 0000000 0000000 The MIT License (MIT)
Copyright (c) 2015 Kevin K.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
cargo-outdated-0.9.1/README.md 0100644 0001750 0001750 00000014360 13572104650 0014132 0 ustar 00 0000000 0000000 # cargo-outdated
[](https://gitter.im/kbknapp/cargo-outdated?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://crates.io/crates/cargo-outdated)
Linux: [](https://travis-ci.org/kbknapp/cargo-outdated)
A cargo subcommand for displaying when Rust dependencies are out of date
## About
`cargo-outdated` is for displaying when dependencies have newer versions available.
## How it works
The functionality of `cargo-outdated` largely depends on the `cargo` builtin command `cargo update`.
To retrieve the list of available SemVer compatible dependencies, `cargo-outdated` firstly creates a temporary workspace, then executes `cargo update` against it, finally compares the temporary dependency tree with the original one.
Similarly, to check the latest dependencies, `cargo-outdated` replaces the SemVer requirements of *direct* dependencies with wildcards then goes through the same process.
## Demo
Once installed (see below) running `cargo outdated` in a project directory looks like the following:
```text
$ cargo outdated
Name Project Compat Latest Kind Platform
---- ------- ------ ------ ---- --------
clap 2.20.0 2.20.5 2.26.0 Normal ---
clap->bitflags 0.7.0 --- 0.9.1 Normal ---
clap->libc 0.2.18 0.2.29 Removed Normal ---
clap->term_size 0.2.1 0.2.3 0.3.0 Normal ---
clap->vec_map 0.6.0 --- 0.8.0 Normal ---
num_cpus 1.6.0 --- 1.6.2 Development ---
num_cpus->libc 0.2.18 0.2.29 0.2.29 Normal ---
pkg-config 0.3.8 0.3.9 0.3.9 Build ---
term 0.4.5 --- 0.4.6 Normal ---
term_size->libc 0.2.18 0.2.29 0.2.29 Normal cfg(not(target_os = "windows"))
```
## Installing
The latest version of `cargo-outdated` compatible with Rust 2018 edition can be installed or updated with `cargo install`:
```sh
cargo install --force --git https://github.com/kbknapp/cargo-outdated
```
## Compiling
Follow these instructions to compile `cargo-outdated`, then skip down to Installation.
1. Ensure you have current version of `cargo` and [Rust](https://www.rust-lang.org) installed
2. Clone the project `$ git clone https://github.com/kbknapp/cargo-outdated && cd cargo-outdated`
3. Build the project `$ cargo build --release`
4. Once complete, the binary will be located at `target/release/cargo-outdated`
## Installation and Usage
All you need to do is place `cargo-outdated` somewhere in your `$PATH`. Then run `cargo outdated` anywhere in your project directory. For full details see below.
### Linux / OS X
You have two options, place `cargo-outdated` into a directory that is already located in your `$PATH` variable (To see which directories those are, open a terminal and type `echo "${PATH//:/\n}"`, the quotation marks are important), or you can add a custom directory to your `$PATH`
**Option 1**
If you have write permission to a directory listed in your `$PATH` or you have root permission (or via `sudo`), simply copy the `cargo-outdated` to that directory `# sudo cp cargo-outdated /usr/local/bin`
**Option 2**
If you do not have root, `sudo`, or write permission to any directory already in `$PATH` you can create a directory inside your home directory, and add that. Many people use `$HOME/.bin` to keep it hidden (and not clutter your home directory), or `$HOME/bin` if you want it to be always visible. Here is an example to make the directory, add it to `$PATH`, and copy `cargo-outdated` there.
Simply change `bin` to whatever you'd like to name the directory, and `.bashrc` to whatever your shell startup file is (usually `.bashrc`, `.bash_profile`, or `.zshrc`)
```sh
mkdir ~/bin
echo "export PATH=$PATH:$HOME/bin" >> ~/.bashrc
cp cargo-outdated ~/bin
source ~/.bashrc
```
### Windows
On Windows 7/8 you can add directory to the `PATH` variable by opening a command line as an administrator and running
```sh
setx path "%path%;C:\path\to\cargo-outdated\binary"
```
Otherwise, ensure you have the `cargo-outdated` binary in the directory which you operating in the command line from, because Windows automatically adds your current directory to PATH (i.e. if you open a command line to `C:\my_project\` to use `cargo-outdated` ensure `cargo-outdated.exe` is inside that directory as well).
### Options
There are a few options for using `cargo-outdated` which should be somewhat self explanatory.
```text
Displays information about project dependency versions
USAGE:
cargo outdated [options]
Options:
-a, --aggressive Ignores channels for latest updates
-h, --help Prints help information
--format FORMAT Output formatting [default: list]
[values: list, json]
-q, --quiet Suppresses warnings
-R, --root-deps-only Only check root dependencies (Equivalent to --depth=1)
-V, --version Prints version information
-v, --verbose ... Use verbose output
-w, --workspace Checks updates for all workspace members rather than
only the root package
--color COLOR Coloring: auto, always, never [default: auto]
[values: auto, always, never]
-d, --depth NUM How deep in the dependency chain to search
(Defaults to all dependencies when omitted)
--exit-code NUM The exit code to return on new versions found [default: 0]
--features FEATURES Space-separated list of features
-m, --manifest-path FILE An absolute path to the Cargo.toml file to use
(Defaults to Cargo.toml in project root)
-p, --packages PKGS Packages to inspect for updates
-r, --root ROOT Package to treat as the root package
```
## License
`cargo-outdated` is released under the terms of either the MIT or Apache 2.0 license. See the LICENSE-MIT or LICENSE-APACHE file for the details.
cargo-outdated-0.9.1/justfile 0100644 0001750 0001750 00000002116 13201315227 0014410 0 ustar 00 0000000 0000000 @update-contributors:
echo 'Removing old CONTRIBUTORS.md'
mv CONTRIBUTORS.md CONTRIBUTORS.md.bak
echo 'Downloading a list of new contributors'
echo "the following is a list of contributors:" > CONTRIBUTORS.md
echo "" >> CONTRIBUTORS.md
echo "" >> CONTRIBUTORS.md
githubcontrib --owner kbknapp --repo cargo-outdated --sha master --cols 6 --format md --showlogin true --sortBy contributions --sortOrder desc >> CONTRIBUTORS.md
echo "" >> CONTRIBUTORS.md
echo "" >> CONTRIBUTORS.md
echo "This list was generated by [mgechev/github-contributors-list](https://github.com/mgechev/github-contributors-list)" >> CONTRIBUTORS.md
rm CONTRIBUTORS.md.bak
run-test TEST:
cargo test --test {{TEST}}
debug TEST:
cargo test --test {{TEST}} --features debug
run-tests:
cargo test --features "yaml unstable"
nightly:
rustup override add nightly
rm-nightly:
rustup override remove
@lint: nightly
cargo build --features lints && just rm-nightly
clean:
cargo clean
find . -type f -name "*.orig" -exec rm {} \;
find . -type f -name "*.bk" -exec rm {} \;
find . -type f -name ".*~" -exec rm {} \;
cargo-outdated-0.9.1/rustfmt.toml 0100644 0001750 0001750 00000000055 13240452155 0015246 0 ustar 00 0000000 0000000 format_strings = false
fn_single_line = true
cargo-outdated-0.9.1/src/cargo_ops/elaborate_workspace.rs 0100644 0001750 0001750 00000036457 13572324547 0022024 0 ustar 00 0000000 0000000 use std::cell::RefCell;
use std::collections::{BTreeSet, HashMap, HashSet, VecDeque};
use std::io::{self, Write};
use cargo::core::{dependency::Kind, Dependency, Package, PackageId, Workspace};
use cargo::ops::{self, Packages};
use cargo::util::{CargoResult, Config};
use failure::{err_msg, format_err};
use serde::{Deserialize, Serialize};
use serde_json;
use tabwriter::TabWriter;
use super::pkg_status::*;
use super::Options;
/// An elaborate workspace containing resolved dependencies and
/// the update status of packages
pub struct ElaborateWorkspace<'ela> {
pub workspace: &'ela Workspace<'ela>,
pub pkgs: HashMap,
pub pkg_deps: HashMap>,
/// Map of package status
pub pkg_status: RefCell, PkgStatus>>,
/// Whether using workspace mode
pub workspace_mode: bool,
}
/// A struct to serialize to json with serde
#[derive(Serialize, Deserialize)]
pub struct CrateMetadata {
pub crate_name: String,
pub dependencies: HashSet,
}
#[derive(Serialize, Deserialize, Eq, Hash, PartialEq)]
pub struct Metadata {
pub name: String,
pub project: String,
pub compat: String,
pub latest: String,
pub kind: Option,
pub platform: Option,
}
impl<'ela> ElaborateWorkspace<'ela> {
/// Elaborate a `Workspace`
pub fn from_workspace(
workspace: &'ela Workspace<'_>,
options: &Options,
) -> CargoResult> {
use cargo::core::resolver::ResolveOpts;
let specs = Packages::All.to_package_id_specs(workspace)?;
let opts = ResolveOpts::new(
true,
&options.flag_features,
options.all_features(),
options.no_default_features(),
);
let (packages, resolve) = ops::resolve_ws_with_opts(workspace, opts, &specs)?;
let mut pkgs = HashMap::new();
let mut pkg_deps = HashMap::new();
for pkg in packages.get_many(packages.package_ids())? {
let pkg_id = pkg.package_id();
pkgs.insert(pkg_id, pkg.clone());
let deps = pkg.dependencies();
let mut dep_map = HashMap::new();
for dep_id in resolve.deps(pkg_id) {
for d in deps {
if d.matches_id(dep_id.0) {
dep_map.insert(dep_id.0, d.clone());
break;
}
}
}
pkg_deps.insert(pkg_id, dep_map);
}
Ok(ElaborateWorkspace {
workspace,
pkgs,
pkg_deps,
pkg_status: RefCell::new(HashMap::new()),
workspace_mode: options.flag_workspace || workspace.current().is_err(),
})
}
/// Determine root package based on current workspace and CLI options
pub fn determine_root(&self, options: &Options) -> CargoResult {
if let Some(ref root_name) = options.flag_root {
if let Ok(workspace_root) = self.workspace.current() {
if root_name == workspace_root.name().as_str() {
Ok(workspace_root.package_id())
} else {
for direct_dep in self.pkg_deps[&workspace_root.package_id()].keys() {
if self.pkgs[direct_dep].name().as_str() == root_name {
return Ok(*direct_dep);
}
}
return Err(err_msg(
"Root is neither the workspace root nor a direct dependency",
));
}
} else {
Err(err_msg(
"--root is not allowed when running against a virtual manifest",
))
}
} else {
Ok(self.workspace.current()?.package_id())
}
}
/// Find a member based on member name
fn find_member(&self, member: PackageId) -> CargoResult {
for m in self.workspace.members() {
// members with the same name in a workspace is not allowed
// even with different paths
if member.name() == m.name() {
return Ok(m.package_id());
}
}
Err(format_err!("Workspace member {} not found", member.name()))
}
/// Find a contained package, which is a member or dependency inside the workspace
fn find_contained_package(&self, name: &str) -> CargoResult {
let root_path = self.workspace.root();
for (pkg_id, pkg) in &self.pkgs {
if pkg.manifest_path().starts_with(root_path) && pkg.name().as_str() == name {
return Ok(*pkg_id);
}
}
Err(format_err!("Cannot find package {} in workspace", name))
}
/// Find a direct dependency of a contained package
pub fn find_direct_dependency(
&self,
dependency_name: &str,
dependent_package_name: &str,
) -> CargoResult {
let dependent_package = self.find_contained_package(dependent_package_name)?;
for direct_dep in self.pkg_deps[&dependent_package].keys() {
if direct_dep.name().as_str() == dependency_name {
return Ok(*direct_dep);
}
}
for (pkg_id, pkg) in &self.pkgs {
if pkg.name().as_str() == dependency_name {
return Ok(*pkg_id);
}
}
Err(format_err!(
"Direct dependency {} not found for package {}",
dependency_name,
dependent_package_name
))
}
/// Resolve compatible and latest status from the corresponding `ElaborateWorkspace`s
pub fn resolve_status(
&'ela self,
compat: &ElaborateWorkspace<'_>,
latest: &ElaborateWorkspace<'_>,
options: &Options,
_config: &Config,
root: PackageId,
) -> CargoResult<()> {
self.pkg_status.borrow_mut().clear();
let (compat_root, latest_root) = if self.workspace_mode {
(compat.find_member(root)?, latest.find_member(root)?)
} else {
(
compat.determine_root(options)?,
latest.determine_root(options)?,
)
};
let mut queue = VecDeque::new();
queue.push_back((vec![root], Some(compat_root), Some(latest_root)));
while let Some((path, compat_pkg, latest_pkg)) = queue.pop_front() {
let pkg = path.last().unwrap();
let depth = path.len() as i32 - 1;
// generate pkg_status
let status = PkgStatus {
compat: Status::from_versions(pkg.version(), compat_pkg.map(PackageId::version)),
latest: Status::from_versions(pkg.version(), latest_pkg.map(PackageId::version)),
};
debug!(
_config,
"STATUS => PKG: {}; PATH: {:?}; COMPAT: {:?}; LATEST: {:?}; STATUS: {:?}",
pkg,
path,
compat_pkg,
latest_pkg,
status
);
self.pkg_status.borrow_mut().insert(path.clone(), status);
// next layer
if options.flag_depth.is_none() || depth < options.flag_depth.unwrap() {
self.pkg_deps[pkg]
.keys()
.filter(|dep| !path.contains(dep))
.for_each(|&dep| {
let name = dep.name();
let compat_pkg = compat_pkg
.and_then(|id| compat.pkg_deps.get(&id))
.map(HashMap::keys)
.and_then(|mut deps| deps.find(|dep| dep.name() == name))
.cloned();
let latest_pkg = latest_pkg
.and_then(|id| latest.pkg_deps.get(&id))
.map(HashMap::keys)
.and_then(|mut deps| deps.find(|dep| dep.name() == name))
.cloned();
let mut path = path.clone();
path.push(dep);
queue.push_back((path, compat_pkg, latest_pkg));
});
}
}
Ok(())
}
/// Print package status to `TabWriter`
pub fn print_list(
&'ela self,
options: &Options,
root: PackageId,
preceding_line: bool,
) -> CargoResult {
let mut lines = BTreeSet::new();
let mut queue = VecDeque::new();
queue.push_back(vec![root]);
while let Some(path) = queue.pop_front() {
let pkg = path.last().unwrap();
let depth = path.len() as i32 - 1;
// generate lines
let status = &self.pkg_status.borrow_mut()[&path];
if (status.compat.is_changed() || status.latest.is_changed())
&& (options.flag_packages.is_empty()
|| options.flag_packages.contains(&pkg.name().to_string()))
{
// name version compatible latest kind platform
let parent = path.get(path.len() - 2);
if let Some(parent) = parent {
let dependency = &self.pkg_deps[parent][pkg];
let label = if self.workspace_mode
|| parent == &self.workspace.current()?.package_id()
{
pkg.name().to_string()
} else {
format!("{}->{}", self.pkgs[parent].name(), pkg.name())
};
let line = format!(
"{}\t{}\t{}\t{}\t{:?}\t{}\n",
label,
pkg.version(),
status.compat.to_string(),
status.latest.to_string(),
dependency.kind(),
dependency
.platform()
.map(ToString::to_string)
.unwrap_or_else(|| "---".to_owned())
);
lines.insert(line);
} else {
let line = format!(
"{}\t{}\t{}\t{}\t---\t---\n",
pkg.name(),
pkg.version(),
status.compat.to_string(),
status.latest.to_string()
);
lines.insert(line);
}
}
// next layer
if options.flag_depth.is_none() || depth < options.flag_depth.unwrap() {
self.pkg_deps[pkg]
.keys()
.filter(|dep| !path.contains(dep))
.filter(|&dep| {
!self.workspace_mode
|| !self.workspace.members().any(|mem| &mem.package_id() == dep)
})
.for_each(|&dep| {
let mut path = path.clone();
path.push(dep);
queue.push_back(path);
});
}
}
if lines.is_empty() {
if !self.workspace_mode {
println!("All dependencies are up to date, yay!");
}
} else {
if preceding_line {
println!();
}
if self.workspace_mode {
println!("{}\n================", root.name());
}
let mut tw = TabWriter::new(vec![]);
writeln!(&mut tw, "Name\tProject\tCompat\tLatest\tKind\tPlatform")?;
writeln!(&mut tw, "----\t-------\t------\t------\t----\t--------")?;
for line in &lines {
write!(&mut tw, "{}", line)?;
}
tw.flush()?;
write!(
io::stdout(),
"{}",
String::from_utf8(tw.into_inner().unwrap()).unwrap()
)?;
io::stdout().flush()?;
}
Ok(lines.len() as i32)
}
pub fn print_json(&'ela self, options: &Options, root: PackageId) -> CargoResult {
let mut crate_graph = CrateMetadata {
crate_name: root.name().to_string(),
dependencies: HashSet::new(),
};
let mut queue = VecDeque::new();
queue.push_back(vec![root]);
while let Some(path) = queue.pop_front() {
let pkg = path.last().unwrap();
let depth = path.len() as i32 - 1;
// generate lines
let status = &self.pkg_status.borrow_mut()[&path];
if (status.compat.is_changed() || status.latest.is_changed())
&& (options.flag_packages.is_empty()
|| options.flag_packages.contains(&pkg.name().to_string()))
{
// name version compatible latest kind platform
let parent = path.get(path.len() - 2);
let line;
if let Some(parent) = parent {
let dependency = &self.pkg_deps[parent][pkg];
let label = if self.workspace_mode
|| parent == &self.workspace.current()?.package_id()
{
pkg.name().to_string()
} else {
format!("{}->{}", self.pkgs[parent].name(), pkg.name())
};
let dependency_type = match dependency.kind() {
Kind::Normal => "Normal",
Kind::Development => "Development",
Kind::Build => "Build",
};
line = Metadata {
name: label,
project: pkg.version().to_string(),
compat: status.compat.to_string(),
latest: status.latest.to_string(),
kind: Some(dependency_type.to_string()),
platform: dependency.platform().map(|p| p.to_string()),
};
} else {
line = Metadata {
name: pkg.name().to_string(),
project: pkg.version().to_string(),
compat: status.compat.to_string(),
latest: status.latest.to_string(),
kind: None,
platform: None,
};
}
crate_graph.dependencies.insert(line);
}
// next layer
if options.flag_depth.is_none() || depth < options.flag_depth.unwrap() {
self.pkg_deps[pkg]
.keys()
.filter(|dep| !path.contains(dep))
.filter(|dep| {
!self.workspace_mode
|| !self
.workspace
.members()
.any(|mem| mem.package_id() == **dep)
})
.for_each(|dep| {
let mut path = path.clone();
path.push(*dep);
queue.push_back(path);
});
}
}
serde_json::to_writer(io::stdout(), &crate_graph)?;
Ok(crate_graph.dependencies.len() as i32)
}
}
cargo-outdated-0.9.1/src/cargo_ops/mod.rs 0100644 0001750 0001750 00000003460 13572104650 0016542 0 ustar 00 0000000 0000000 use super::Options;
use toml::value::{Table, Value};
mod elaborate_workspace;
mod pkg_status;
mod temp_project;
pub use self::elaborate_workspace::ElaborateWorkspace;
pub use self::pkg_status::*;
pub use self::temp_project::TempProject;
/// A continent struct for quick parsing and manipulating manifest
#[derive(Debug, serde_derive::Serialize, serde_derive::Deserialize)]
struct Manifest {
#[serde(serialize_with = "::toml::ser::tables_last")]
pub package: Table,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub dependencies: Option,
#[serde(
rename = "dev-dependencies",
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub dev_dependencies: Option,
#[serde(
rename = "build-dependencies",
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub build_dependencies: Option,
pub lib: Option,
pub bin: Option>,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub workspace: Option,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub target: Option,
pub features: Option,
}
impl Manifest {
pub fn name(&self) -> String {
match self.package["name"] {
Value::String(ref name) => name.clone(),
_ => unreachable!(),
}
}
}
pub fn opt_tables_last(data: &Option, serializer: S) -> Result
where
S: ::serde::ser::Serializer,
{
match *data {
Some(ref d) => ::toml::ser::tables_last(d, serializer),
None => unreachable!(),
}
}
cargo-outdated-0.9.1/src/cargo_ops/pkg_status.rs 0100666 0001750 0001750 00000001747 13160155041 0020152 0 ustar 00 0000000 0000000 use semver::Version;
/// Enum which represents the update status of a package
#[derive(Debug)]
pub enum Status {
Unchanged,
Removed,
Version(Version),
}
impl Status {
pub fn from_versions(from: &Version, to: Option<&Version>) -> Status {
if let Some(to) = to {
if from == to {
Status::Unchanged
} else {
Status::Version(to.clone())
}
} else {
Status::Removed
}
}
pub fn is_changed(&self) -> bool {
match *self {
Status::Unchanged => false,
_ => true,
}
}
}
impl ::std::string::ToString for Status {
fn to_string(&self) -> String {
match *self {
Status::Unchanged => "---".to_owned(),
Status::Removed => "Removed".to_owned(),
Status::Version(ref v) => v.to_string(),
}
}
}
#[derive(Debug)]
pub struct PkgStatus {
pub compat: Status,
pub latest: Status,
}
cargo-outdated-0.9.1/src/cargo_ops/temp_project.rs 0100644 0001750 0001750 00000062054 13572324576 0020475 0 ustar 00 0000000 0000000 use std::cell::RefCell;
use std::collections::HashSet;
use std::env;
use std::fs::{self, File, OpenOptions};
use std::io::{Read, Write};
use std::path::{Path, PathBuf};
use std::rc::Rc;
use cargo::core::{Dependency, PackageId, Summary, Verbosity, Workspace};
use cargo::ops::{update_lockfile, UpdateOptions};
use cargo::util::errors::CargoResultExt;
use cargo::util::{CargoResult, Config};
use failure::err_msg;
use semver::{Identifier, Version, VersionReq};
use tempfile::{Builder, TempDir};
use toml::value::Table;
use toml::Value;
use super::{ElaborateWorkspace, Manifest};
use crate::Options;
/// A temporary project
pub struct TempProject<'tmp> {
pub workspace: Rc>>>,
pub temp_dir: TempDir,
manifest_paths: Vec,
config: Config,
relative_manifest: String,
options: &'tmp Options,
}
impl<'tmp> TempProject<'tmp> {
/// Copy needed manifest and lock files from an existing workspace
pub fn from_workspace(
orig_workspace: &ElaborateWorkspace<'_>,
orig_manifest: &str,
options: &'tmp Options,
) -> CargoResult> {
// e.g. /path/to/project
let workspace_root = orig_workspace.workspace.root();
let workspace_root_str = workspace_root.to_string_lossy();
let temp_dir = Builder::new().prefix("cargo-outdated").tempdir()?;
let manifest_paths = manifest_paths(orig_workspace)?;
let mut tmp_manifest_paths = vec![];
for from in &manifest_paths {
// e.g. /path/to/project/src/sub
let mut from_dir = from.clone();
from_dir.pop();
let from_dir_str = from_dir.to_string_lossy();
// e.g. /tmp/cargo.xxx/src/sub
let mut dest = if workspace_root_str.len() < from_dir_str.len() {
temp_dir
.path()
.join(&from_dir_str[workspace_root_str.len() + 1..])
} else {
temp_dir.path().to_owned()
};
fs::create_dir_all(&dest)?;
// e.g. /tmp/cargo.xxx/src/sub/Cargo.toml
dest.push("Cargo.toml");
tmp_manifest_paths.push(dest.clone());
fs::copy(from, &dest)?;
//removing default-run key if it exists to check dependencies
let mut om: Manifest = {
let mut buf = String::new();
let mut file = File::open(&dest)?;
file.read_to_string(&mut buf)?;
::toml::from_str(&buf)?
};
if om.package.contains_key("default-run") {
om.package.remove("default-run");
let om_serialized = ::toml::to_string(&om).expect("Cannot format as toml file");
let mut cargo_toml = OpenOptions::new().read(true).write(true).truncate(true).open(&dest)?;
write!(cargo_toml, "{}", om_serialized)?;
}
let lockfile = from_dir.join("Cargo.lock");
if lockfile.is_file() {
dest.pop();
dest.push("Cargo.lock");
fs::copy(lockfile, dest)?;
}
}
// virtual root
let mut virtual_root = workspace_root.join("Cargo.toml");
if !manifest_paths.contains(&virtual_root) && virtual_root.is_file() {
fs::copy(&virtual_root, temp_dir.path().join("Cargo.toml"))?;
virtual_root.pop();
virtual_root.push("Cargo.lock");
if virtual_root.is_file() {
fs::copy(&virtual_root, temp_dir.path().join("Cargo.lock"))?;
}
}
let relative_manifest = String::from(&orig_manifest[workspace_root_str.len() + 1..]);
let config = Self::generate_config(temp_dir.path(), &relative_manifest, options)?;
Ok(TempProject {
workspace: Rc::new(RefCell::new(None)),
temp_dir,
manifest_paths: tmp_manifest_paths,
config,
relative_manifest,
options,
})
}
fn generate_config(
root: &Path,
relative_manifest: &str,
options: &Options,
) -> CargoResult {
let shell = ::cargo::core::Shell::new();
let cwd = env::current_dir()
.chain_err(|| "Cargo couldn't get the current directory of the process")?;
let homedir = ::cargo::util::homedir(&cwd).ok_or_else(|| {
err_msg(
"Cargo couldn't find your home directory. \
This probably means that $HOME was not set.",
)
})?;
let mut cwd = Path::new(root).join(relative_manifest);
cwd.pop();
let mut config = Config::new(shell, cwd, homedir);
config.configure(
0,
if options.flag_verbose > 0 {
None
} else {
Some(true)
},
&options.flag_color,
options.frozen(),
options.locked(),
false,
&None,
&[],
)?;
Ok(config)
}
/// Run `cargo update` against the temporary project
pub fn cargo_update(&self) -> CargoResult<()> {
let update_opts = UpdateOptions {
aggressive: false,
precise: None,
to_update: Vec::new(),
config: &self.config,
dry_run: false,
};
update_lockfile(self.workspace.borrow().as_ref().unwrap(), &update_opts)?;
Ok(())
}
fn write_manifest>(manifest: &Manifest, path: P) -> CargoResult<()> {
let mut file = File::create(path)?;
let serialized = ::toml::to_string(manifest).expect("Failed to serialized Cargo.toml");
write!(file, "{}", serialized)?;
Ok(())
}
fn manipulate_dependencies(manifest: &mut Manifest, f: &F) -> CargoResult<()>
where
F: Fn(&mut Table) -> CargoResult<()>,
{
if let Some(dep) = manifest.dependencies.as_mut() {
f(dep)?;
}
if let Some(dep) = manifest.dev_dependencies.as_mut() {
f(dep)?;
}
if let Some(dep) = manifest.build_dependencies.as_mut() {
f(dep)?;
}
if let Some(t) = manifest.target.as_mut() {
for (_key, target) in t.iter_mut() {
if let Value::Table(ref mut target) = *target {
for dependency_tables in
&["dependencies", "dev-dependencies", "build-dependencies"]
{
if let Some(&mut Value::Table(ref mut dep_table)) =
target.get_mut(*dependency_tables)
{
f(dep_table)?;
}
}
}
}
}
Ok(())
}
/// Write manifests with SemVer requirements
pub fn write_manifest_semver>(
&'tmp self,
orig_root: P,
tmp_root: P,
workspace: &ElaborateWorkspace<'_>,
) -> CargoResult<()> {
let bin = {
let mut bin = Table::new();
bin.insert("name".to_owned(), Value::String("test".to_owned()));
bin.insert("path".to_owned(), Value::String("test.rs".to_owned()));
bin
};
for manifest_path in &self.manifest_paths {
let mut manifest: Manifest = {
let mut buf = String::new();
let mut file = File::open(manifest_path)?;
file.read_to_string(&mut buf)?;
::toml::from_str(&buf)?
};
manifest.bin = Some(vec![bin.clone()]);
// provide lib.path
if let Some(lib) = manifest.lib.as_mut() {
lib.insert("path".to_owned(), Value::String("test_lib.rs".to_owned()));
}
Self::manipulate_dependencies(&mut manifest, &|deps| {
Self::replace_path_with_absolute(
deps,
orig_root.as_ref(),
tmp_root.as_ref(),
manifest_path,
)
})?;
let package_name = manifest.name();
let features = manifest.features.clone();
Self::manipulate_dependencies(&mut manifest, &|deps| {
self.update_version_and_feature(deps, &features, workspace, &package_name, false)
})?;
Self::write_manifest(&manifest, manifest_path)?;
}
let root_manifest = self.temp_dir.path().join(&self.relative_manifest);
*self.workspace.borrow_mut() =
Some(Workspace::new(Path::new(&root_manifest), &self.config)?);
Ok(())
}
/// Write manifests with wildcard requirements
pub fn write_manifest_latest>(
&'tmp self,
orig_root: P,
tmp_root: P,
workspace: &ElaborateWorkspace<'_>,
) -> CargoResult<()> {
let bin = {
let mut bin = Table::new();
bin.insert("name".to_owned(), Value::String("test".to_owned()));
bin.insert("path".to_owned(), Value::String("test.rs".to_owned()));
bin
};
for manifest_path in &self.manifest_paths {
let mut manifest: Manifest = {
let mut buf = String::new();
let mut file = File::open(manifest_path)?;
file.read_to_string(&mut buf)?;
::toml::from_str(&buf)?
};
manifest.bin = Some(vec![bin.clone()]);
// provide lib.path
if let Some(lib) = manifest.lib.as_mut() {
lib.insert("path".to_owned(), Value::String("test_lib.rs".to_owned()));
}
Self::manipulate_dependencies(&mut manifest, &|deps| {
Self::replace_path_with_absolute(
deps,
orig_root.as_ref(),
tmp_root.as_ref(),
manifest_path,
)
})?;
let package_name = manifest.name();
let features = manifest.features.clone();
Self::manipulate_dependencies(&mut manifest, &|deps| {
self.update_version_and_feature(deps, &features, workspace, &package_name, true)
})?;
Self::write_manifest(&manifest, manifest_path)?;
}
let root_manifest = self.temp_dir.path().join(&self.relative_manifest);
*self.workspace.borrow_mut() =
Some(Workspace::new(Path::new(&root_manifest), &self.config)?);
Ok(())
}
fn find_update(
&self,
name: &str,
dependent_package_name: &str,
requirement: Option<&str>,
workspace: &ElaborateWorkspace<'_>,
find_latest: bool,
) -> CargoResult {
let package_id = workspace.find_direct_dependency(name, dependent_package_name)?;
let version = package_id.version();
let source_id = package_id.source_id().with_precise(None);
let mut source = source_id.load(&self.config, &HashSet::new())?;
if !source_id.is_default_registry() {
let _lock = self.config.acquire_package_cache_lock()?;
source.update()?;
}
let dependency = Dependency::parse_no_deprecated(name, None, source_id)?;
let query_result = {
let _lock = self.config.acquire_package_cache_lock()?;
let mut query_result = source.query_vec(&dependency)?;
query_result.sort_by(|a, b| b.version().cmp(a.version()));
query_result
};
let version_req = match requirement {
Some(requirement) => Some(VersionReq::parse(requirement)?),
None => None,
};
let latest_result = query_result
.iter()
.find(|summary| {
if summary.version() < version {
false
} else if version_req.is_none() {
true
} else if find_latest {
self.options.flag_aggressive
|| valid_latest_version(requirement.unwrap(), summary.version())
} else {
version_req.as_ref().unwrap().matches(summary.version())
}
})
.unwrap_or_else(|| {
panic!(
"Cannot find matched versions of package {} from source {}",
name, source_id
)
});
Ok(latest_result.clone())
}
fn feature_includes(&self, name: &str, optional: bool, features_table: &Option) -> bool {
if self.options.all_features() {
return true;
}
if !optional
&& self
.options
.flag_features
.contains(&String::from("default"))
{
return true;
}
let features_table = match *features_table {
Some(Value::Table(ref features_table)) => features_table,
_ => return false,
};
let mut to_resolve: Vec<&str> = self
.options
.flag_features
.iter()
.filter(|f| !f.is_empty())
.map(String::as_str)
.collect();
let mut visited: HashSet<&str> = HashSet::new();
while let Some(feature) = to_resolve.pop() {
if feature == name {
return true;
}
if visited.contains(feature) {
continue;
}
visited.insert(feature);
if features_table.contains_key(feature) {
let specified_features = match features_table.get(feature) {
None => panic!("Feature {} does not exist", feature),
Some(&Value::Array(ref specified_features)) => specified_features,
_ => panic!("Feature {} is not mapped to an array", feature),
};
for spec in specified_features {
if let Value::String(ref spec) = *spec {
to_resolve.push(spec.as_str());
}
}
}
}
false
}
fn update_version_and_feature(
&self,
dependencies: &mut Table,
features: &Option,
workspace: &ElaborateWorkspace<'_>,
package_name: &str,
version_to_latest: bool,
) -> CargoResult<()> {
let dep_keys: Vec<_> = dependencies.keys().cloned().collect();
for dep_key in dep_keys {
let original = dependencies.get(&dep_key).cloned().unwrap();
match original {
Value::String(requirement) => {
let name = dep_key;
if version_to_latest {
match self.find_update(
&name,
package_name,
Some(requirement.as_str()),
workspace,
version_to_latest,
) {
Result::Ok(val) => dependencies
.insert(name.clone(), Value::String(val.version().to_string())),
Result::Err(_err) => {
eprintln!(
"Updates to dependency {} could not be found",
name.clone()
);
None
}
};
}
}
Value::Table(ref t) => {
let name = match t.get("package") {
Some(&Value::String(ref s)) => s,
Some(_) => panic!("'package' of dependency {} is not a string", dep_key),
None => &dep_key,
};
if !(version_to_latest || t.contains_key("features")) {
continue;
}
let optional = t
.get("optional")
.map(|optional| {
if let Value::Boolean(optional) = *optional {
optional
} else {
false
}
})
.unwrap_or(false);
if !self.feature_includes(&name, optional, features) {
continue;
}
let mut replaced = t.clone();
let requirement = match t.get("version") {
Some(&Value::String(ref requirement)) => Some(requirement.as_str()),
Some(_) => panic!("Version of {} is not a string", name),
_ => None,
};
let r_summary = self.find_update(
&name,
package_name,
requirement,
workspace,
version_to_latest,
);
let summary = match r_summary {
Result::Ok(val) => val,
Result::Err(_) => {
eprintln!("Update for {} could not be found!", name.clone());
return Ok(());
}
};
if version_to_latest && t.contains_key("version") {
replaced.insert(
"version".to_owned(),
Value::String(summary.version().to_string()),
);
}
if replaced.contains_key("features") {
let features = match replaced.get("features") {
Some(&Value::Array(ref features)) => features
.iter()
.filter(|&feature| {
let feature = match *feature {
Value::String(ref feature) => feature,
_ => panic!(
"Features section of {} is not an array of strings",
name
),
};
let retained =
features_and_options(&summary).contains(feature.as_str());
if !retained {
self.warn(format!(
"Feature {} of package {} \
has been obsolete in version {}",
feature,
name,
summary.version()
))
.unwrap();
}
retained
})
.cloned()
.collect::>(),
_ => panic!("Features section of {} is not an array", name),
};
replaced.insert("features".to_owned(), Value::Array(features));
}
dependencies.insert(name.clone(), Value::Table(replaced));
}
_ => panic!(
"Dependency spec is neither a string nor a table {}",
dep_key
),
}
}
Ok(())
}
fn replace_path_with_absolute(
dependencies: &mut Table,
orig_root: &Path,
tmp_root: &Path,
tmp_manifest: &Path,
) -> CargoResult<()> {
let dep_names: Vec<_> = dependencies.keys().cloned().collect();
for name in dep_names {
let original = dependencies.get(&name).cloned().unwrap();
match original {
Value::Table(ref t) if t.contains_key("path") => {
if let Value::String(ref orig_path) = t["path"] {
let orig_path = Path::new(orig_path);
if orig_path.is_relative() {
let relative = {
let delimiter: &[_] = &['/', '\\'];
let relative = &tmp_manifest.to_string_lossy()
[tmp_root.to_string_lossy().len()..];
let mut relative =
PathBuf::from(relative.trim_start_matches(delimiter));
relative.pop();
relative.join(orig_path)
};
if !tmp_root.join(&relative).join("Cargo.toml").exists() {
let mut replaced = t.clone();
replaced.insert(
"path".to_owned(),
Value::String(
fs::canonicalize(orig_root.join(relative))?
.to_string_lossy()
.to_string(),
),
);
dependencies.insert(name, Value::Table(replaced));
}
}
}
}
_ => {}
}
}
Ok(())
}
fn warn(&self, message: T) -> CargoResult<()> {
let original_verbosity = self.config.shell().verbosity();
self.config
.shell()
.set_verbosity(if self.options.flag_quiet {
Verbosity::Quiet
} else {
Verbosity::Normal
});
self.config.shell().warn(message)?;
self.config.shell().set_verbosity(original_verbosity);
Ok(())
}
}
/// Features and optional dependencies of a Summary
fn features_and_options(summary: &Summary) -> HashSet<&str> {
let mut result: HashSet<&str> = summary.features().keys().map(|s| s.as_str()).collect();
summary
.dependencies()
.iter()
.filter(|d| d.is_optional())
.map(Dependency::package_name)
.for_each(|d| {
result.insert(d.as_str());
});
result
}
/// Paths of all manifest files in current workspace
fn manifest_paths(elab: &ElaborateWorkspace<'_>) -> CargoResult> {
let mut visited: HashSet = HashSet::new();
let mut manifest_paths = vec![];
fn manifest_paths_recursive(
pkg_id: PackageId,
elab: &ElaborateWorkspace<'_>,
workspace_path: &str,
visited: &mut HashSet,
manifest_paths: &mut Vec,
) -> CargoResult<()> {
if visited.contains(&pkg_id) {
return Ok(());
}
visited.insert(pkg_id);
let pkg = &elab.pkgs[&pkg_id];
let pkg_path = pkg.root().to_string_lossy();
if pkg_path.starts_with(workspace_path) {
manifest_paths.push(pkg.manifest_path().to_owned());
}
for &dep in elab.pkg_deps[&pkg_id].keys() {
manifest_paths_recursive(dep, elab, workspace_path, visited, manifest_paths)?;
}
Ok(())
};
// executed against a virtual manifest
let workspace_path = elab.workspace.root().to_string_lossy();
// if cargo workspace is not explicitly used, the package itself would be a member
for member in elab.workspace.members() {
let root_pkg_id = member.package_id();
manifest_paths_recursive(
root_pkg_id,
elab,
&workspace_path,
&mut visited,
&mut manifest_paths,
)?;
}
Ok(manifest_paths)
}
fn valid_latest_version(requirement: &str, version: &Version) -> bool {
match (requirement.contains('-'), version.is_prerelease()) {
// if user was on a stable channel, it's unlikely for him to update to an unstable one
(false, true) => false,
// both are stable, leave for further filters
// ...or...
// user was on an unstable one, newer stable ones are still candidates
(false, false) | (true, false) => true,
// both are unstable, must be in the same channel
(true, true) => {
let requirement_version = Version::parse(requirement).expect("Error could not parse requirement into a semantic version");
let requirement_channel = requirement_version.pre[0].to_string();
match (requirement_channel.is_empty(), &version.pre[0]) {
(true, &Identifier::Numeric(_)) => true,
(false, &Identifier::AlphaNumeric(_)) => {
Identifier::AlphaNumeric(requirement_channel) == version.pre[0]
}
_ => false,
}
}
}
}
cargo-outdated-0.9.1/src/macros.rs 0100644 0001750 0001750 00000001234 13351660054 0015270 0 ustar 00 0000000 0000000 macro_rules! verbose {
($config:expr, $status:expr, $message:expr) => {
$config
.shell()
.verbose(|sh| -> CargoResult<()> { sh.status($status, $message) })?
};
}
#[cfg(feature = "debug")]
macro_rules! debug {
($config: expr, $message: expr) => (
$config.shell().status_with_color("DEBUG", $message, ::termcolor::Color::White)?
);
($config: expr, $($arg: tt)*) => (
$config.shell().status_with_color("DEBUG", format!($($arg)*), ::termcolor::Color::White)?
);
}
#[cfg(not(feature = "debug"))]
macro_rules! debug {
($config:expr, $message:expr) => {};
($config:expr, $($arg:tt)*) => {};
}
cargo-outdated-0.9.1/src/main.rs 0100644 0001750 0001750 00000020552 13572104650 0014734 0 ustar 00 0000000 0000000 #![deny(bare_trait_objects, anonymous_parameters, elided_lifetimes_in_paths)]
use cargo;
use env_logger;
#[macro_use]
mod macros;
mod cargo_ops;
use crate::cargo_ops::{ElaborateWorkspace, TempProject};
use cargo::core::maybe_allow_nightly_features;
use cargo::core::shell::Verbosity;
use cargo::core::Workspace;
use cargo::util::important_paths::find_root_manifest_for_wd;
use cargo::util::{CargoResult, CliError, Config};
use docopt::Docopt;
pub const USAGE: &str = "
Displays information about project dependency versions
USAGE:
cargo outdated [options]
Options:
-a, --aggressive Ignores channels for latest updates
-h, --help Prints help information
--format FORMAT Output formatting [default: list]
[values: list, json]
-q, --quiet Suppresses warnings
-R, --root-deps-only Only check root dependencies (Equivalent to --depth=1)
-V, --version Prints version information
-v, --verbose ... Use verbose output
-w, --workspace Checks updates for all workspace members rather than
only the root package
--color COLOR Coloring: auto, always, never [default: auto]
[values: auto, always, never]
-d, --depth NUM How deep in the dependency chain to search
(Defaults to all dependencies when omitted)
--exit-code NUM The exit code to return on new versions found [default: 0]
--features FEATURES Space-separated list of features
-m, --manifest-path FILE An absolute path to the Cargo.toml file to use
(Defaults to Cargo.toml in project root)
-p, --packages PKGS Packages to inspect for updates
-r, --root ROOT Package to treat as the root package
";
/// Options from CLI arguments
#[derive(serde_derive::Deserialize, Debug)]
pub struct Options {
flag_format: Option,
flag_color: Option,
flag_features: Vec,
flag_manifest_path: Option,
flag_quiet: bool,
flag_verbose: u32,
flag_exit_code: i32,
flag_packages: Vec,
flag_root: Option,
flag_depth: Option,
flag_root_deps_only: bool,
flag_workspace: bool,
flag_aggressive: bool,
}
impl Options {
fn all_features(&self) -> bool { self.flag_features.is_empty() }
fn no_default_features(&self) -> bool {
!(self.flag_features.is_empty() || self.flag_features.contains(&"default".to_owned()))
}
fn locked(&self) -> bool { false }
fn frozen(&self) -> bool { false }
}
fn main() {
env_logger::init();
let options = {
let mut options: Options = Docopt::new(USAGE)
.and_then(|d| {
d.version(Some(
concat!(env!("CARGO_PKG_NAME"), " v", env!("CARGO_PKG_VERSION")).to_owned(),
))
.deserialize()
})
.unwrap_or_else(|e| e.exit());
fn flat_split(arg: &[String]) -> Vec {
arg.iter()
.flat_map(|s| s.split_whitespace())
.flat_map(|s| s.split(','))
.filter(|s| !s.is_empty())
.map(ToString::to_string)
.collect()
}
options.flag_features = flat_split(&options.flag_features);
options.flag_packages = flat_split(&options.flag_packages);
if options.flag_root_deps_only {
options.flag_depth = Some(1);
}
options
};
let mut config = match Config::default() {
Ok(cfg) => cfg,
Err(e) => {
let mut shell = cargo::core::Shell::new();
cargo::exit_with_error(e.into(), &mut shell)
}
};
let exit_code = options.flag_exit_code;
let result = execute(options, &mut config);
match result {
Err(e) => {
config.shell().set_verbosity(Verbosity::Normal);
let cli_error = CliError::new(e, 1);
cargo::exit_with_error(cli_error, &mut *config.shell())
}
Ok(i) => {
if i > 0 {
std::process::exit(exit_code);
} else {
std::process::exit(0);
}
}
}
}
pub fn execute(options: Options, config: &mut Config) -> CargoResult {
config.configure(
options.flag_verbose,
None,
&options.flag_color,
options.frozen(),
options.locked(),
false,
&None,
&[],
)?;
debug!(config, format!("options: {:?}", options));
// Needed to allow nightly features
maybe_allow_nightly_features();
verbose!(config, "Parsing...", "current workspace");
// the Cargo.toml that we are actually working on
let curr_manifest = if let Some(ref manifest_path) = options.flag_manifest_path {
manifest_path.into()
} else {
find_root_manifest_for_wd(config.cwd())?
};
let curr_workspace = Workspace::new(&curr_manifest, config)?;
verbose!(config, "Resolving...", "current workspace");
if options.flag_verbose == 0 {
config.shell().set_verbosity(Verbosity::Quiet);
}
let ela_curr = ElaborateWorkspace::from_workspace(&curr_workspace, &options)?;
if options.flag_verbose > 0 {
config.shell().set_verbosity(Verbosity::Verbose);
} else {
config.shell().set_verbosity(Verbosity::Normal);
}
verbose!(config, "Parsing...", "compat workspace");
let compat_proj =
TempProject::from_workspace(&ela_curr, &curr_manifest.to_string_lossy(), &options)?;
compat_proj.write_manifest_semver(
curr_workspace.root(),
compat_proj.temp_dir.path(),
&ela_curr,
)?;
verbose!(config, "Updating...", "compat workspace");
compat_proj.cargo_update()?;
verbose!(config, "Resolving...", "compat workspace");
let compat_workspace = compat_proj.workspace.borrow();
let ela_compat =
ElaborateWorkspace::from_workspace(compat_workspace.as_ref().unwrap(), &options)?;
verbose!(config, "Parsing...", "latest workspace");
let latest_proj =
TempProject::from_workspace(&ela_curr, &curr_manifest.to_string_lossy(), &options)?;
latest_proj.write_manifest_latest(
curr_workspace.root(),
compat_proj.temp_dir.path(),
&ela_curr,
)?;
verbose!(config, "Updating...", "latest workspace");
latest_proj.cargo_update()?;
verbose!(config, "Resolving...", "latest workspace");
let latest_workspace = latest_proj.workspace.borrow();
let ela_latest =
ElaborateWorkspace::from_workspace(latest_workspace.as_ref().unwrap(), &options)?;
if ela_curr.workspace_mode {
let mut sum = 0;
if options.flag_format == Some("list".to_string()) {
verbose!(config, "Printing...", "Package status in list format");
} else if options.flag_format == Some("json".to_string()) {
verbose!(config, "Printing...", "Package status in json format");
}
for member in ela_curr.workspace.members() {
ela_curr.resolve_status(
&ela_compat,
&ela_latest,
&options,
config,
member.package_id(),
)?;
if options.flag_format == Some("list".to_string()) {
sum += ela_curr.print_list(&options, member.package_id(), sum > 0)?;
} else if options.flag_format == Some("json".to_string()) {
sum += ela_curr.print_json(&options, member.package_id())?;
}
}
if sum == 0 {
println!("All dependencies are up to date, yay!");
}
Ok(sum)
} else {
verbose!(config, "Resolving...", "package status");
let root = ela_curr.determine_root(&options)?;
ela_curr.resolve_status(&ela_compat, &ela_latest, &options, config, root)?;
verbose!(config, "Printing...", "list format");
let mut count = 0;
if options.flag_format == Some("list".to_string()) {
count = ela_curr.print_list(&options, root, false)?;
} else if options.flag_format == Some("json".to_string()) {
ela_curr.print_json(&options, root)?;
} else {
println!("Error, did not specify list or json output formatting");
std::process::exit(2);
}
Ok(count)
}
}
cargo-outdated-0.9.1/.cargo_vcs_info.json 0000644 00000000112 13573172452 0014046 0 ustar 00 {
"git": {
"sha1": "68590f5fff08ed1aca6ab99448d11cbb3746faa7"
}
}
cargo-outdated-0.9.1/Cargo.lock 0000644 00000165073 13573172452 0012043 0 ustar 00 # This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "adler32"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "aho-corasick"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "atty"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "autocfg"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "backtrace"
version = "0.3.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "backtrace-sys"
version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bstr"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "bytesize"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "c2-chacha"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cargo"
version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"crates-io 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)",
"crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
"crypto-hash 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)",
"curl-sys 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
"fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"fwdansi 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
"git2-curl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"home 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ignore 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
"im-rc 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"jobserver 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
"opener 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustfix 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_ignored 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
"shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"strip-ansi-escapes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cargo-outdated"
version = "0.9.1"
dependencies = [
"cargo 0.40.0 (registry+https://github.com/rust-lang/crates.io-index)",
"docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
"tabwriter 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cc"
version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"jobserver 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "clap"
version = "2.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "commoncrypto"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "commoncrypto-sys"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation-sys"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "crates-io"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crc32fast"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-channel"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-utils"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crypto-hash"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "curl"
version = "0.4.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"curl-sys 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
"schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
"socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "curl-sys"
version = "0.4.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "docopt"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "env_logger"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "env_logger"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "failure"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
"failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "failure_derive"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
"synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "filetime"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "flate2"
version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
"miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "fnv"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "foreign-types"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "foreign-types-shared"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "fs2"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "fwdansi"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "getrandom"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "git2"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "git2-curl"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "glob"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "globset"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
"bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "hermit-abi"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "hex"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "hex"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "home"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "humantime"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "idna"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ignore"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
"globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "im-rc"
version = "13.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"sized-chunks 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "itoa"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "jobserver"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lazycell"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libc"
version = "0.2.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libgit2-sys"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libssh2-sys 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libnghttp2-sys"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libssh2-sys"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libz-sys"
version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "log"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "matches"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "memchr"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "miniz_oxide"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "miow"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num_cpus"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "opener"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "openssl"
version = "0.10.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "openssl-probe"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "openssl-sys"
version = "0.9.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
"vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "percent-encoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "pkg-config"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "ppv-lite86"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "proc-macro2"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "quick-error"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "quote"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand_chacha"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "redox_syscall"
version = "0.1.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "regex"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
"thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex-syntax"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "remove_dir_all"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rustc-demangle"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rustc-workspace-hack"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rustfix"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ryu"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "same-file"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "schannel"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "scopeguard"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "serde"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_derive"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_ignored"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_json"
version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "shell-escape"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "sized-chunks"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "smallvec"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "socket2"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "strip-ansi-escapes"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"vte 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strsim"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "syn"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "synstructure"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tabwriter"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tar"
version = "0.4.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tempfile"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "termcolor"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "thread_local"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "toml"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "typenum"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicode-bidi"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-normalization"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-width"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicode-xid"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "url"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "utf8parse"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "vcpkg"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "vec_map"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "vte"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "walkdir"
version = "2.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "wasi"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-util"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "wincolor"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[metadata]
"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
"checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
"checksum bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "716960a18f978640f25101b5cbf1c6f6b0d3192fab36a2d98ca96f0ecbe41010"
"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
"checksum cargo 0.40.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03504435a39de1303decb9c9a7416e875f16d4b94769d4d0dd5e1bfb21229640"
"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
"checksum commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"
"checksum commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"
"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
"checksum crates-io 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9dc57b7035c84bcaaa14d89221491b624a32977c230ce6bb77ae191e880c48e1"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
"checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa"
"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
"checksum crypto-hash 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8a77162240fd97248d19a564a565eb563a3f592b386e4136fb300909e67dddca"
"checksum curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)" = "06aa71e9208a54def20792d877bc663d6aae0732b9852e612c4a933177c31283"
"checksum curl-sys 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f659f3ffac9582d6177bb86d1d2aa649f4eb9d0d4de9d03ccc08b402832ea340"
"checksum docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969"
"checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
"checksum filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d"
"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
"checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
"checksum fwdansi 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08c1f5787fe85505d1f7777268db5103d80a7a374d2316a7ce262e57baf8f208"
"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
"checksum git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26"
"checksum git2-curl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd6527e480187ce19aaf4fa6acfb7657b25628ce31cb8ffabdfca3bf731524c5"
"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
"checksum globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2"
"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
"checksum hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "023b39be39e3a2da62a94feb433e91e8bcd37676fbc8bea371daf52b7a769a3e"
"checksum home 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a3753954f7bd71f0e671afb8b5a992d1724cf43b7f95a563cd4a0bde94659ca8"
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
"checksum ignore 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ec16832258409d571aaef8273f3c3cc5b060d784e159d1a0f3b0017308f84a7"
"checksum im-rc 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0197597d095c0d11107975d3175173f810ee572c2501ff4de64f4f3f119806"
"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
"checksum jobserver 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b1d42ef453b30b7387e113da1c83ab1605d90c5b4e0eb8e96d016ed3b8c160"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
"checksum libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16"
"checksum libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02254d44f4435dd79e695f2c2b83cd06a47919adea30216ceaf0c57ca0a72463"
"checksum libssh2-sys 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5fcd5a428a31cbbfe059812d74f4b6cd3b9b7426c2bdaec56993c5365da1c328"
"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
"checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625"
"checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226"
"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
"checksum opener 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13117407ca9d0caf3a0e74f97b490a7e64c0ae3aa90a8b7085544d0c37b6f3ae"
"checksum openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585"
"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
"checksum openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)" = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f"
"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
"checksum rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc71d2faa173b74b232dedc235e3ee1696581bb132fc116fa3626d6151a1a8fb"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum rustfix 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7150ac777a2931a53489f5a41eb0937b84e3092a20cd0e73ad436b65b507f607"
"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702"
"checksum serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c6faef9a2e64b0064f48570289b4bf8823b7581f1d6157c1b52152306651d0"
"checksum serde_ignored 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7248fdcbd17d3f2604fc2a02d0ecc844d9a7bf52bf95fc196d9f0a38f6da6a0e"
"checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7"
"checksum shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "170a13e64f2a51b77a45702ba77287f5c6829375b04a69cf2222acd17d0cfab9"
"checksum sized-chunks 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f01db57d7ee89c8e053245deb77040a6cc8508311f381c88749c33d4b9b78785"
"checksum smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86"
"checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
"checksum strip-ansi-escapes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d63676e2abafa709460982ddc02a3bb586b6d15a49b75c212e06edd3933acee"
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
"checksum strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "032c03039aae92b350aad2e3779c352e104d919cb192ba2fabbd7b831ce4f0f6"
"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
"checksum tabwriter 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9128e3a9149e51494cad59712a286e149fcb74e443d2298d69bd6eaa42cc4ebb"
"checksum tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3"
"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf"
"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
"checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf"
"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
"checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61"
"checksum utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8772a4ccbb4e89959023bc5b7cb8623a795caa7092d99f3aa9501b9484d4557d"
"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
"checksum vte 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4f42f536e22f7fcbb407639765c8fd78707a33109301f834a594758bedd6e8cf"
"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"