cargo-outdated-0.9.1/.clog.toml010064400017500001750000000003511314433065000145410ustar0000000000000000[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/.gitignore010064400017500001750000000002351314433065000146330ustar0000000000000000# 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.yml010064400017500001750000000006261357210465000147640ustar0000000000000000language: 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.md010064400017500001750000000257041357210465000144700ustar0000000000000000 ## 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.md010064400017500001750000000033621314433065000151000ustar0000000000000000# 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.md010064400017500001750000000065071335166632500151450ustar0000000000000000the following is a list of contributors: [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) | :---: |:---: |:---: |:---: |:---: |:---: | [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) | [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) | :---: |:---: |:---: |:---: |:---: |:---: | [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) | [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) | :---: |:---: |:---: |:---: |:---: |:---: | [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.orig010064400017500001750000000017751357232454700155610ustar0000000000000000[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.toml0000644000000033161357317245200120550ustar00# 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-MIT010064400017500001750000000020641314433065000143010ustar0000000000000000The 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.md010064400017500001750000000143601357210465000141320ustar0000000000000000# cargo-outdated [![Join the chat at https://gitter.im/kbknapp/cargo-outdated](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kbknapp/cargo-outdated?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![crates.io](https://img.shields.io/crates/v/cargo-outdated.svg)](https://crates.io/crates/cargo-outdated) Linux: [![Build Status](https://travis-ci.org/kbknapp/cargo-outdated.svg?branch=master)](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/justfile010064400017500001750000000021161320131522700144100ustar0000000000000000@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.toml010064400017500001750000000000551324045215500152460ustar0000000000000000format_strings = false fn_single_line = true cargo-outdated-0.9.1/src/cargo_ops/elaborate_workspace.rs010064400017500001750000000364571357232454700220240ustar0000000000000000use 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.rs010064400017500001750000000034601357210465000165420ustar0000000000000000use 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.rs010066600017500001750000000017471316015504100201520ustar0000000000000000use 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.rs010064400017500001750000000620541357232457600204750ustar0000000000000000use 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.rs010064400017500001750000000012341335166005400152700ustar0000000000000000macro_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.rs010064400017500001750000000205521357210465000147340ustar0000000000000000#![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.json0000644000000001121357317245200140460ustar00{ "git": { "sha1": "68590f5fff08ed1aca6ab99448d11cbb3746faa7" } } cargo-outdated-0.9.1/Cargo.lock0000644000001650731357317245200120430ustar00# 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"