├── .gitignore ├── scripts ├── script.sh ├── before_deploy.ps1 ├── before_deploy.sh └── install.sh ├── LICENSE ├── Cargo.toml ├── .travis.yml ├── README.md ├── tests └── test.rs ├── src └── main.rs ├── CHANGELOG.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /scripts/script.sh: -------------------------------------------------------------------------------- 1 | # This script takes care of testing the crate. 2 | 3 | set -ex 4 | 5 | main() { 6 | if [ $TRAVIS_OS_NAME = linux ]; then 7 | cargo='cross' 8 | else 9 | cargo='cargo' 10 | fi 11 | 12 | $cargo --version 13 | 14 | $cargo build --target $TARGET 15 | $cargo build --target $TARGET --release 16 | 17 | if [ ! -z $DISABLE_TESTS ]; then 18 | return 19 | fi 20 | 21 | $cargo fmt -- --check 22 | $cargo clippy 23 | 24 | $cargo test --target $TARGET 25 | $cargo test --target $TARGET --release 26 | } 27 | 28 | # we don't run the "test phase" when doing deploys 29 | if [ -z $TRAVIS_TAG ]; then 30 | main 31 | fi 32 | -------------------------------------------------------------------------------- /scripts/before_deploy.ps1: -------------------------------------------------------------------------------- 1 | # This script takes care of packaging the build artifacts that will go in the 2 | # release zipfile. 3 | 4 | $PKG_NAME = "cargo-cmd" 5 | $SRC_DIR = $PWD.Path 6 | $STAGE = [System.Guid]::NewGuid().ToString() 7 | 8 | Set-Location $ENV:Temp 9 | New-Item -Type Directory -Name $STAGE 10 | Set-Location $STAGE 11 | 12 | $ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip" 13 | 14 | Copy-Item "$SRC_DIR\target\$($Env:TARGET)\release\$PKG_NAME.exe" '.\' 15 | 16 | 7z a "$ZIP" * 17 | 18 | Push-AppveyorArtifact "$ZIP" 19 | 20 | Remove-Item *.* -Force 21 | Set-Location .. 22 | Remove-Item $STAGE 23 | Set-Location $SRC_DIR 24 | -------------------------------------------------------------------------------- /scripts/before_deploy.sh: -------------------------------------------------------------------------------- 1 | # This script takes care of building the crate and packaging it for release. 2 | 3 | PKG_NAME="cargo-cmd" 4 | 5 | set -ex 6 | 7 | main() { 8 | local src=$(pwd) \ 9 | stage= 10 | 11 | case $TRAVIS_OS_NAME in 12 | linux) 13 | stage=$(mktemp -d) 14 | ;; 15 | windows) 16 | stage=$(mktemp -d) 17 | ;; 18 | osx) 19 | stage=$(mktemp -d -t tmp) 20 | ;; 21 | esac 22 | 23 | test -f Cargo.lock || cargo generate-lockfile 24 | 25 | local cargo= 26 | if [ $TRAVIS_OS_NAME = linux ]; then 27 | cargo='cross' 28 | else 29 | cargo='cargo' 30 | fi 31 | 32 | $cargo rustc --bin $PKG_NAME --target $TARGET --release -- -C lto 33 | cp target/$TARGET/release/$PKG_NAME $stage/ 34 | 35 | cd $stage 36 | tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * 37 | cd $src 38 | 39 | rm -rf $stage 40 | } 41 | 42 | main 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright 2018 Dan Reeves 4 | 5 | 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: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | 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. 10 | -------------------------------------------------------------------------------- /scripts/install.sh: -------------------------------------------------------------------------------- 1 | set -ex 2 | 3 | main() { 4 | local target= 5 | if [ $TRAVIS_OS_NAME = linux ]; then 6 | target=x86_64-unknown-linux-musl 7 | sort=sort 8 | else 9 | target=x86_64-apple-darwin 10 | sort=gsort # for `sort --sort-version`, from brew's coreutils. 11 | fi 12 | 13 | # Builds for iOS are done on OSX, but require the specific target to be 14 | # installed. 15 | case $TARGET in 16 | aarch64-apple-ios) 17 | rustup target install aarch64-apple-ios 18 | ;; 19 | armv7-apple-ios) 20 | rustup target install armv7-apple-ios 21 | ;; 22 | armv7s-apple-ios) 23 | rustup target install armv7s-apple-ios 24 | ;; 25 | i386-apple-ios) 26 | rustup target install i386-apple-ios 27 | ;; 28 | x86_64-apple-ios) 29 | rustup target install x86_64-apple-ios 30 | ;; 31 | esac 32 | 33 | if [ $TRAVIS_OS_NAME = linux ]; then 34 | cargo install cross --force 35 | fi 36 | 37 | # Install test dependencies 38 | rustup component add rustfmt-preview 39 | rustup component add clippy-preview 40 | } 41 | 42 | main 43 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-cmd" 3 | description = "Alias any shell command in your Cargo.toml. It's like npm scripts, but for cargo." 4 | version = "0.3.1" 5 | authors = ["Dan Reeves "] 6 | repository = "https://github.com/danreeves/cargo-cmd" 7 | license = "MIT" 8 | readme = "README.md" 9 | categories = ["development-tools::cargo-plugins"] 10 | keywords = ["cargo", "cmd", "scripts", "commands", "npm"] 11 | 12 | [package.metadata.commands] 13 | echo = "echo" 14 | greet = "cargo cmd echo 'Hello, planet!'" 15 | dev = "cargo watch -s 'clear; cargo build && cargo cmd greet'" 16 | 17 | pass = "exit 0" 18 | fail = "exit 42" 19 | 20 | prechain = "echo 1" 21 | chain = "echo 2" 22 | postchain = "echo 3" 23 | 24 | prefailchain = "exit 42" 25 | failchain = "echo 2" 26 | 27 | pretest = "echo pre" 28 | test = "cargo test" 29 | posttest = "echo post" 30 | 31 | [dependencies] 32 | toml = "0.5.0" 33 | serde = { version = "1.0.104", features = ["derive"] } 34 | subprocess = "0.2.4" 35 | structopt = "0.3.11" 36 | clap = "2.33.0" 37 | 38 | [dev-dependencies] 39 | assert_cli = "0.6.3" 40 | 41 | [target.'cfg(windows)'.dependencies] 42 | winapi = { version = "0.3.8", features = ["handleapi", "namedpipeapi", "processenv", "synchapi", "winerror"] } 43 | 44 | [badges] 45 | travis-ci = { repository = "danreeves/cargo-cmd", branch = "master" } 46 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | dist: trusty 2 | language: rust 3 | services: docker 4 | sudo: required 5 | 6 | env: 7 | global: 8 | - CRATE_NAME=cargo-cmd 9 | - RUST_BACKTRACE=1 10 | 11 | matrix: 12 | include: 13 | - env: TARGET=armv7-unknown-linux-gnueabihf 14 | rust: stable 15 | - env: TARGET=x86_64-unknown-linux-musl 16 | rust: stable 17 | - env: TARGET=x86_64-unknown-linux-gnu 18 | rust: stable 19 | - env: TARGET=x86_64-apple-darwin 20 | os: osx 21 | rust: stable 22 | - env: TARGET=x86_64-pc-windows-gnu 23 | os: windows 24 | rust: stable 25 | 26 | before_install: 27 | - set -e 28 | 29 | install: 30 | - sh scripts/install.sh 31 | - source ~/.cargo/env || true 32 | 33 | script: 34 | - bash scripts/script.sh 35 | 36 | after_script: set +e 37 | 38 | before_deploy: 39 | - sh scripts/before_deploy.sh 40 | 41 | deploy: 42 | provider: releases 43 | skip_cleanup: true 44 | file_glob: true 45 | file: $CRATE_NAME-$TRAVIS_TAG-$TARGET.* 46 | api_key: 47 | secure: "pyYxlPySMgYlKxwWWyFWLalICnQlXyM3bGV/1FOoSFU8XZtg12L0pYQsi9EgI4E4E8Nro5OEyAoc/Ben6L0TKJ0MpQq98Vphb3wxGW4ob3xK2Dtwkj8SoJEfaZvQsXtsx6oFSUlkUwfFNQn03zxECPr7hOl1SRgxaUBCmB49tsF9qDaMb5DU9ewqgnm3ySyTYfp0ulq8e5ykaK5Ez42xvNQIn6Z9M1hK18yvVJH0eAi1gIMtz+JMkfsFgMZq6SglU3Waufmf6H3C5Gd42Ffl44yQrQA4l49m6m2Sne34/PXDRj2/A9YXgMLi+wMtsHCbob3m4iQQCzFp7iVABjBfYAtEE8Un6724gWUimmGeP/9AESBnSup1Ac4C1/bd8qrGQtzKUIOizIoi5E16yHhtdnQhVAdoVz8jwj/63Xt4B6PBzroR02hxMygjlmCZOeT9e+3R2UwXyp95tO/246Yn/F7UjrlGFMqPo9hGmWUEY4JnXjCjmK07W+mHlKoMVSXhsL0KqwFYF26QOl4DFvl0FTK1LshIOI0vxPkmeF7ptRKJioWVG2wErWyouMisBPqziHLcxVjEwIBTuuhRr3fQAbhPxKmA7lgHNFRXwn6FKCOEpDlwMR72uFX4pVJhb8xaGmYsd5h/7an62oauMT+gznnoCWhQTn8HUuFf1B/CVhs=" 48 | on: 49 | tags: true 50 | 51 | cache: cargo 52 | before_cache: 53 | - chmod -R a+r $HOME/.cargo 54 | 55 | notifications: 56 | email: 57 | on_success: never 58 | on_failure: never 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cargo-cmd 2 | 3 | [![crates.io version][1]][2] 4 | [![build status][3]][4] 5 | [![docs.rs docs][5]][6] 6 | [![license][7]][8] 7 | 8 | Alias any shell command in your `Cargo.toml`. It's like `npm` scripts, but for `cargo`. 9 | 10 | ## Installation 11 | 12 | ```sh 13 | cargo install cargo-cmd 14 | ``` 15 | 16 | ## Usage 17 | 18 | You can define your commands in `Cargo.toml` under the `[package.metadata.commands]` table, like so: 19 | 20 | ```toml 21 | [package.metadata.commands] 22 | greet = "echo 'Hello, planet!'" 23 | ``` 24 | 25 | Now you can run `cargo cmd greet`: 26 | 27 | ```sh 28 | $ cargo cmd greet 29 | > echo 'Hello, planet!' 30 | Hello, planet! 31 | ``` 32 | 33 | ### Advanced use 34 | 35 | #### Passing arguments 36 | 37 | It's possible to pass arguments into your command by passing them directly to `cargo cmd`. 38 | 39 | ```toml 40 | [package.metadata.commands] 41 | echo = "echo" 42 | ``` 43 | 44 | ```sh 45 | $ cargo cmd echo 'Hello, planet!' 46 | > echo 'Hello, planet!' 47 | Hello, planet! 48 | ``` 49 | 50 | #### Pre and Post commands 51 | 52 | You are able to set up commands to run before and after your command by prefixing the name with `pre` or `post` respectively. 53 | 54 | ```toml 55 | [package.metadata.commands] 56 | pretest = "./setup.sh" 57 | test = "cargo test" 58 | posttest = "./teardown.sh" 59 | ``` 60 | 61 | ```sh 62 | $ cargo cmd test 63 | 64 | [pretest] 65 | > ./setup.sh 66 | Setting up DB... 67 | 68 | [test] 69 | > cargo test 70 | ... 71 | 72 | [posttest] 73 | > ./teardown.sh 74 | Tearing down DB... 75 | ``` 76 | 77 | ## License 78 | [MIT © Dan Reeves](./LICENSE) 79 | 80 | 81 | 82 | [1]: https://img.shields.io/crates/v/cargo-cmd.svg?style=flat-square 83 | [2]: https://crates.io/crates/cargo-cmd 84 | [3]: https://img.shields.io/travis/danreeves/cargo-cmd.svg?style=flat-square 85 | [4]: https://travis-ci.org/danreeves/cargo-cmd 86 | [5]: https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square 87 | [6]: https://docs.rs/crate/cargo-cmd 88 | [7]: https://img.shields.io/crates/l/cargo-cmd.svg?style=flat-square 89 | [8]: ./LICENSE 90 | 91 | -------------------------------------------------------------------------------- /tests/test.rs: -------------------------------------------------------------------------------- 1 | extern crate assert_cli; 2 | 3 | #[test] 4 | fn it_shows_help_for_no_args() { 5 | assert_cli::Assert::main_binary() 6 | .fails() 7 | .and() 8 | .stderr() 9 | .contains("USAGE") 10 | .unwrap(); 11 | } 12 | 13 | #[test] 14 | fn it_errors_if_cmd_not_found() { 15 | assert_cli::Assert::main_binary() 16 | .with_args(&["cmd", "notfound"]) 17 | .fails() 18 | .and() 19 | .stderr() 20 | .contains("Command \"notfound\" not found in Cargo.toml") 21 | .unwrap(); 22 | } 23 | 24 | #[test] 25 | fn it_succeeds_when_command_is_found() { 26 | assert_cli::Assert::main_binary() 27 | .with_args(&["cmd", "pass"]) 28 | .succeeds() 29 | .and() 30 | .stdout() 31 | .contains("> exit 0") 32 | .unwrap(); 33 | } 34 | 35 | #[test] 36 | fn it_returns_the_exit_code_of_the_command_when_it_fails() { 37 | assert_cli::Assert::main_binary() 38 | .with_args(&["cmd", "fail"]) 39 | .fails_with(42) 40 | .and() 41 | .stdout() 42 | .contains("> exit 42") 43 | .unwrap(); 44 | } 45 | 46 | #[test] 47 | fn it_passes_extra_arguments_to_the_command() { 48 | assert_cli::Assert::main_binary() 49 | .with_args(&["cmd", "echo", "hello planet"]) 50 | .succeeds() 51 | .and() 52 | .stdout() 53 | .contains("> echo hello planet") 54 | .unwrap(); 55 | } 56 | 57 | #[test] 58 | fn it_runs_the_pre_command() { 59 | assert_cli::Assert::main_binary() 60 | .with_args(&["cmd", "chain"]) 61 | .succeeds() 62 | .and() 63 | .stdout() 64 | .contains("[prechain]") 65 | .unwrap(); 66 | } 67 | 68 | #[test] 69 | fn it_runs_the_post_command() { 70 | assert_cli::Assert::main_binary() 71 | .with_args(&["cmd", "chain"]) 72 | .succeeds() 73 | .and() 74 | .stdout() 75 | .contains("[postchain]") 76 | .unwrap(); 77 | } 78 | 79 | #[test] 80 | fn it_labels_the_command_if_running_multiple() { 81 | assert_cli::Assert::main_binary() 82 | .with_args(&["cmd", "chain"]) 83 | .succeeds() 84 | .and() 85 | .stdout() 86 | .contains("[chain]") 87 | .unwrap(); 88 | } 89 | 90 | #[test] 91 | fn it_stops_the_chain_if_a_command_fails() { 92 | assert_cli::Assert::main_binary() 93 | .with_args(&["cmd", "failchain"]) 94 | .fails() 95 | .and() 96 | .stdout() 97 | .doesnt_contain("[chain]") 98 | .unwrap(); 99 | } 100 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate serde; 3 | extern crate clap; 4 | extern crate structopt; 5 | extern crate subprocess; 6 | extern crate toml; 7 | 8 | use std::collections::HashMap; 9 | use std::fs::File; 10 | use std::io::Read; 11 | use std::process; 12 | use structopt::StructOpt; 13 | use subprocess::{Exec, ExitStatus}; 14 | 15 | #[derive(StructOpt, Debug)] 16 | #[structopt(name = "cargo-cmd", bin_name = "cargo")] 17 | enum Cli { 18 | #[structopt(name = "cmd")] 19 | Cmd { 20 | #[structopt(name = "command", index = 1)] 21 | command: String, 22 | #[structopt(multiple = true)] 23 | rest: Vec, 24 | }, 25 | } 26 | 27 | #[derive(Deserialize, Debug)] 28 | struct Cargotoml { 29 | package: Package, 30 | } 31 | 32 | #[derive(Deserialize, Debug)] 33 | struct Package { 34 | metadata: Metadata, 35 | } 36 | 37 | #[derive(Deserialize, Debug)] 38 | struct Metadata { 39 | commands: HashMap, 40 | } 41 | 42 | fn main() { 43 | let cli = Cli::from_args(); 44 | let (command, rest) = match cli { 45 | Cli::Cmd { command, rest } => (command, rest), 46 | }; 47 | let commands = unwrap_or_exit(get_commands(&command)); 48 | let is_multiple_commands = commands.len() > 1; 49 | 50 | for (index, command) in commands.iter().enumerate() { 51 | if is_multiple_commands { 52 | println!("\n[{}]", &command.0); 53 | } 54 | let command = &command.1; 55 | let exit = execute_command(command, &rest); 56 | 57 | if exit.success() { 58 | if index == commands.len() { 59 | process::exit(0); 60 | } 61 | } else { 62 | match exit { 63 | ExitStatus::Exited(exit_code) => process::exit(exit_code as i32), 64 | _ => process::exit(1), 65 | } 66 | } 67 | } 68 | } 69 | 70 | fn execute_command(command: &str, rest: &Vec) -> ExitStatus { 71 | // This is naughty but Exec::shell doesn't let us do it with .args because 72 | // it ends up as an argument to sh/cmd.exe instead of our user command 73 | // or escaping things weirdly. 74 | let command = format!("{} {}", command, rest.join(" ")); 75 | println!("> {}", command); 76 | let sh = Exec::shell(command); 77 | sh.join().unwrap_or(ExitStatus::Exited(0)) 78 | } 79 | 80 | fn unwrap_or_exit(result: Result) -> T { 81 | match result { 82 | Err(error_msg) => { 83 | clap::Error::with_description(&error_msg[..], clap::ErrorKind::InvalidValue).exit(); 84 | } 85 | Ok(thing) => thing, 86 | } 87 | } 88 | 89 | fn get_commands(command: &str) -> Result, String> { 90 | let mut cargo_toml = File::open("Cargo.toml").or(Err( 91 | "Could not find or open Cargo.toml in the current directory", 92 | ))?; 93 | let mut cargo_str = String::new(); 94 | let mut commands = vec![]; 95 | let names = vec![ 96 | format!("pre{}", command), 97 | command.to_string(), 98 | format!("post{}", command), 99 | ]; 100 | 101 | cargo_toml 102 | .read_to_string(&mut cargo_str) 103 | .or(Err("Could not read the contents of Cargo.toml"))?; 104 | 105 | let cargo_toml: Cargotoml = 106 | toml::from_str(&cargo_str[..]).or(Err("Could not find commands in Cargo.toml"))?; 107 | 108 | let cargo_commands = cargo_toml.package.metadata.commands; 109 | 110 | for name in names { 111 | let command_to_run = &cargo_commands.get(&name); 112 | 113 | if name == command && command_to_run.is_none() { 114 | return Err(format!("Command \"{}\" not found in Cargo.toml", &command)); 115 | } 116 | 117 | if command_to_run.is_some() { 118 | commands.push((name, command_to_run.unwrap().to_string())); 119 | } 120 | } 121 | 122 | Ok(commands) 123 | } 124 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 2018-09-10, Version 0.1.0 2 | ### Commits 3 | - [[`b40679371f`](https://github.com/danreeves/cargo-cmd/commit/b40679371f8cd45ccca6becae9b2079e8ccdeeca)] fix token (Dan Reeves) 4 | - [[`45e1c14c74`](https://github.com/danreeves/cargo-cmd/commit/45e1c14c743d147f9fd65f60f76300ad21657fdd)] crossgen files (Dan Reeves) 5 | - [[`771555ba78`](https://github.com/danreeves/cargo-cmd/commit/771555ba78bab95985dfcecb7bba4211f62023d3)] some nice stuff (Dan Reeves) 6 | - [[`4bd996ec56`](https://github.com/danreeves/cargo-cmd/commit/4bd996ec569675065292717ec76a07252700e828)] intial implementation (Dan Reeves) 7 | 8 | ### Stats 9 | ```diff 10 | .gitignore | 2 +- 11 | .travis.yml | 55 ++++++++++++++++++++++- 12 | Cargo.lock | 118 +++++++++++++++++++++++++++++++++++++++++++++++- 13 | Cargo.toml | 16 ++++++- 14 | LICENSE | 9 ++++- 15 | README.md | 29 ++++++++++++- 16 | scripts/before_deploy.ps1 | 23 +++++++++- 17 | scripts/before_deploy.sh | 32 +++++++++++++- 18 | scripts/install.sh | 51 ++++++++++++++++++++- 19 | scripts/script.sh | 23 +++++++++- 20 | src/main.rs | 93 +++++++++++++++++++++++++++++++++++++- 21 | 11 files changed, 451 insertions(+) 22 | ``` 23 | ## 2018-10-05, Version 0.2.0 24 | ### Commits 25 | - [[`c4765a6794`](https://github.com/danreeves/cargo-cmd/commit/c4765a6794c1cef58e909c67c67b05d26525485b)] bump version (Dan Reeves) 26 | - [[`4ba48eaf34`](https://github.com/danreeves/cargo-cmd/commit/4ba48eaf34916238aed256e269354a965e37b2e1)] Passing extra args + clap refactor (#7) (Dan Reeves) 27 | - [[`07a2d7cfbb`](https://github.com/danreeves/cargo-cmd/commit/07a2d7cfbb2b6247e566def6dc10c0bc71256082)] bump version (Dan Reeves) 28 | - [[`c6214aceee`](https://github.com/danreeves/cargo-cmd/commit/c6214aceee35a9f54dd0e632faa4fb79fc75a9be)] Add winapi dependency to fix compilation Windows (Dan Reeves) 29 | - [[`1582f1bedd`](https://github.com/danreeves/cargo-cmd/commit/1582f1bedd79439624e3fdf4fe6f778350e171af)] Add badges and Cargo.toml meta fields (#6) (Dan Reeves) 30 | - [[`3ed647b767`](https://github.com/danreeves/cargo-cmd/commit/3ed647b76731d41d9b63baf17e8daf7dfe594433)] add changelog (Dan Reeves) 31 | - [[`386acb30d0`](https://github.com/danreeves/cargo-cmd/commit/386acb30d0e59ddd2ff312487211d8be26bc298c)] add description (Dan Reeves) 32 | 33 | ### Stats 34 | ```diff 35 | CHANGELOG.md | 22 ++++++- 36 | Cargo.lock | 205 ++++++++++++++++++++++++++++++++++++++++++++++++------------ 37 | Cargo.toml | 26 +++++--- 38 | README.md | 19 ++++++- 39 | src/main.rs | 66 +++++++++++-------- 40 | 5 files changed, 264 insertions(+), 74 deletions(-) 41 | ``` 42 | ## 2018-10-12, Version 0.2.1 43 | ### Commits 44 | - [[`af985e4098`](https://github.com/danreeves/cargo-cmd/commit/af985e40982d5176406b7f1cb4618119c40b3ff9)] 0.2.1 (Dan Reeves) 45 | - [[`ba0b6f7a1c`](https://github.com/danreeves/cargo-cmd/commit/ba0b6f7a1ce7ea54302bd133ca598c4ede2088aa)] CI in Windows (#8) (Dan Reeves) 46 | - [[`b7b4db96a5`](https://github.com/danreeves/cargo-cmd/commit/b7b4db96a535c8314fba418a7d57f37828aed154)] disable tests on linux because assert_cli uses backtrace and backtrace needs extra deps (Dan Reeves) 47 | - [[`7dce324ddd`](https://github.com/danreeves/cargo-cmd/commit/7dce324ddd32a85681d89871046f22bc7a4e5cea)] another test (Dan Reeves) 48 | - [[`51942aad9b`](https://github.com/danreeves/cargo-cmd/commit/51942aad9becda01c78de05cc157757103cd4622)] tests and fix an issue (Dan Reeves) 49 | - [[`6e80fe42b9`](https://github.com/danreeves/cargo-cmd/commit/6e80fe42b9bd8c37ecdebbb5013cf389a93604b7)] update changelog (Dan Reeves) 50 | 51 | ### Stats 52 | ```diff 53 | .travis.yml | 7 ++- 54 | CHANGELOG.md | 19 +++++++- 55 | Cargo.lock | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 56 | Cargo.toml | 10 +++- 57 | scripts/install.sh | 19 ++----- 58 | scripts/script.sh | 20 ++++--- 59 | src/main.rs | 4 +- 60 | tests/test.rs | 57 ++++++++++++++++++++- 61 | 8 files changed, 262 insertions(+), 25 deletions(-) 62 | ``` 63 | ## 2018-11-16, Version 0.3.0 64 | ### Commits 65 | - [[`c69fdd1c68`](https://github.com/danreeves/cargo-cmd/commit/c69fdd1c68573f26d71349d845c4af94e30dfb6c)] bump version (Dan Reeves) 66 | - [[`e5f6a8ddfe`](https://github.com/danreeves/cargo-cmd/commit/e5f6a8ddfecb73a338807eaec8107db8f4282909)] Pre- & Post- commands (#14) (Dan Reeves) 67 | - [[`52f4b24378`](https://github.com/danreeves/cargo-cmd/commit/52f4b24378d856d85f34fece008583327ea12003)] Windows releases (#9) (Dan Reeves) 68 | - [[`40a032a13e`](https://github.com/danreeves/cargo-cmd/commit/40a032a13ebbffa54de4061713f5a8da99d0537e)] nightly → stable (#12) (Dan Reeves) 69 | - [[`03132c1352`](https://github.com/danreeves/cargo-cmd/commit/03132c1352861cc30398ecb74bb46b1f56e0dde6)] fix docs.rs link (#10) (Dan Reeves) 70 | - [[`50b49f162c`](https://github.com/danreeves/cargo-cmd/commit/50b49f162c49c6263c08798a5197ab835ffa7507)] update lockfile (Dan Reeves) 71 | - [[`22706b59cd`](https://github.com/danreeves/cargo-cmd/commit/22706b59cda965507af684aa7ebe1a295a29520b)] upadte changelog (Dan Reeves) 72 | 73 | ### Stats 74 | ```diff 75 | .travis.yml | 10 ++++---- 76 | CHANGELOG.md | 21 +++++++++++++++++- 77 | Cargo.lock | 17 +++++++------- 78 | Cargo.toml | 18 +++++++++++++-- 79 | README.md | 50 +++++++++++++++++++++++++++++++++++++---- 80 | scripts/before_deploy.sh | 12 +++++++++- 81 | scripts/install.sh | 4 +--- 82 | scripts/script.sh | 2 +- 83 | src/main.rs | 60 +++++++++++++++++++++++++++++++------------------ 84 | tests/test.rs | 52 +++++++++++++++++++++++++++++++++++++----- 85 | 10 files changed, 195 insertions(+), 51 deletions(-) 86 | ``` 87 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "ansi_term" 5 | version = "0.11.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 9 | ] 10 | 11 | [[package]] 12 | name = "assert_cli" 13 | version = "0.6.3" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | dependencies = [ 16 | "colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 17 | "difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 18 | "environment 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 19 | "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 21 | "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "atty" 26 | version = "0.2.14" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | dependencies = [ 29 | "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 30 | "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", 31 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 32 | ] 33 | 34 | [[package]] 35 | name = "backtrace" 36 | version = "0.3.45" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | dependencies = [ 39 | "backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 43 | ] 44 | 45 | [[package]] 46 | name = "backtrace-sys" 47 | version = "0.1.34" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | dependencies = [ 50 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 51 | "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", 52 | ] 53 | 54 | [[package]] 55 | name = "bitflags" 56 | version = "1.2.1" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | 59 | [[package]] 60 | name = "cargo-cmd" 61 | version = "0.3.1" 62 | dependencies = [ 63 | "assert_cli 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)", 66 | "structopt 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "subprocess 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 70 | ] 71 | 72 | [[package]] 73 | name = "cc" 74 | version = "1.0.50" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | 77 | [[package]] 78 | name = "cfg-if" 79 | version = "0.1.10" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | 82 | [[package]] 83 | name = "clap" 84 | version = "2.33.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | dependencies = [ 87 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 89 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 92 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 93 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 94 | ] 95 | 96 | [[package]] 97 | name = "colored" 98 | version = "1.9.3" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | dependencies = [ 101 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 102 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 103 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 104 | ] 105 | 106 | [[package]] 107 | name = "difference" 108 | version = "2.0.0" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | 111 | [[package]] 112 | name = "environment" 113 | version = "0.1.1" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | 116 | [[package]] 117 | name = "failure" 118 | version = "0.1.7" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | dependencies = [ 121 | "backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)", 122 | "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 123 | ] 124 | 125 | [[package]] 126 | name = "failure_derive" 127 | version = "0.1.7" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | dependencies = [ 130 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 131 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 132 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 133 | "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", 134 | ] 135 | 136 | [[package]] 137 | name = "heck" 138 | version = "0.3.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | dependencies = [ 141 | "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 142 | ] 143 | 144 | [[package]] 145 | name = "hermit-abi" 146 | version = "0.1.8" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | dependencies = [ 149 | "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", 150 | ] 151 | 152 | [[package]] 153 | name = "itoa" 154 | version = "0.4.5" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | 157 | [[package]] 158 | name = "lazy_static" 159 | version = "1.4.0" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | 162 | [[package]] 163 | name = "libc" 164 | version = "0.2.68" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | 167 | [[package]] 168 | name = "proc-macro-error" 169 | version = "0.4.11" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | dependencies = [ 172 | "proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 173 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 174 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 176 | "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 177 | ] 178 | 179 | [[package]] 180 | name = "proc-macro-error-attr" 181 | version = "0.4.11" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | dependencies = [ 184 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 185 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 186 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 189 | ] 190 | 191 | [[package]] 192 | name = "proc-macro2" 193 | version = "1.0.9" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | dependencies = [ 196 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 197 | ] 198 | 199 | [[package]] 200 | name = "quote" 201 | version = "1.0.3" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | dependencies = [ 204 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 205 | ] 206 | 207 | [[package]] 208 | name = "rustc-demangle" 209 | version = "0.1.16" 210 | source = "registry+https://github.com/rust-lang/crates.io-index" 211 | 212 | [[package]] 213 | name = "ryu" 214 | version = "1.0.3" 215 | source = "registry+https://github.com/rust-lang/crates.io-index" 216 | 217 | [[package]] 218 | name = "serde" 219 | version = "1.0.105" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | dependencies = [ 222 | "serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)", 223 | ] 224 | 225 | [[package]] 226 | name = "serde_derive" 227 | version = "1.0.105" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | dependencies = [ 230 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 231 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 232 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 233 | ] 234 | 235 | [[package]] 236 | name = "serde_json" 237 | version = "1.0.48" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | dependencies = [ 240 | "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 241 | "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 242 | "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)", 243 | ] 244 | 245 | [[package]] 246 | name = "strsim" 247 | version = "0.8.0" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | 250 | [[package]] 251 | name = "structopt" 252 | version = "0.3.12" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | dependencies = [ 255 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 256 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 257 | "structopt-derive 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 258 | ] 259 | 260 | [[package]] 261 | name = "structopt-derive" 262 | version = "0.4.5" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | dependencies = [ 265 | "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 266 | "proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 267 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 268 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 269 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 270 | ] 271 | 272 | [[package]] 273 | name = "subprocess" 274 | version = "0.2.4" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | dependencies = [ 277 | "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", 278 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 279 | ] 280 | 281 | [[package]] 282 | name = "syn" 283 | version = "1.0.16" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | dependencies = [ 286 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 287 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 288 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 289 | ] 290 | 291 | [[package]] 292 | name = "syn-mid" 293 | version = "0.5.0" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | dependencies = [ 296 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 297 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 298 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 299 | ] 300 | 301 | [[package]] 302 | name = "synstructure" 303 | version = "0.12.3" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | dependencies = [ 306 | "proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", 307 | "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)", 309 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 310 | ] 311 | 312 | [[package]] 313 | name = "textwrap" 314 | version = "0.11.0" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | dependencies = [ 317 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 318 | ] 319 | 320 | [[package]] 321 | name = "toml" 322 | version = "0.5.6" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | dependencies = [ 325 | "serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)", 326 | ] 327 | 328 | [[package]] 329 | name = "unicode-segmentation" 330 | version = "1.6.0" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | 333 | [[package]] 334 | name = "unicode-width" 335 | version = "0.1.7" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | 338 | [[package]] 339 | name = "unicode-xid" 340 | version = "0.2.0" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | 343 | [[package]] 344 | name = "vec_map" 345 | version = "0.8.1" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | 348 | [[package]] 349 | name = "version_check" 350 | version = "0.9.1" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | 353 | [[package]] 354 | name = "winapi" 355 | version = "0.3.8" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | dependencies = [ 358 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 359 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 360 | ] 361 | 362 | [[package]] 363 | name = "winapi-i686-pc-windows-gnu" 364 | version = "0.4.0" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | 367 | [[package]] 368 | name = "winapi-x86_64-pc-windows-gnu" 369 | version = "0.4.0" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | 372 | [metadata] 373 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 374 | "checksum assert_cli 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a29ab7c0ed62970beb0534d637a8688842506d0ff9157de83286dacd065c8149" 375 | "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 376 | "checksum backtrace 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "ad235dabf00f36301792cfe82499880ba54c6486be094d1047b02bacb67c14e8" 377 | "checksum backtrace-sys 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ca797db0057bae1a7aa2eef3283a874695455cecf08a43bfb8507ee0ebc1ed69" 378 | "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 379 | "checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 380 | "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 381 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 382 | "checksum colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" 383 | "checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" 384 | "checksum environment 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f4b14e20978669064c33b4c1e0fb4083412e40fe56cbea2eae80fd7591503ee" 385 | "checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" 386 | "checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" 387 | "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" 388 | "checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" 389 | "checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" 390 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 391 | "checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" 392 | "checksum proc-macro-error 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e7959c6467d962050d639361f7703b2051c43036d03493c36f01d440fdd3138a" 393 | "checksum proc-macro-error-attr 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e4002d9f55991d5e019fb940a90e1a95eb80c24e77cb2462dd4dc869604d543a" 394 | "checksum proc-macro2 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" 395 | "checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" 396 | "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 397 | "checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" 398 | "checksum serde 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff" 399 | "checksum serde_derive 1.0.105 (registry+https://github.com/rust-lang/crates.io-index)" = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8" 400 | "checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25" 401 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 402 | "checksum structopt 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "c8faa2719539bbe9d77869bfb15d4ee769f99525e707931452c97b693b3f159d" 403 | "checksum structopt-derive 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f88b8e18c69496aad6f9ddf4630dd7d585bcaf765786cb415b9aec2fe5a0430" 404 | "checksum subprocess 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5109e3c3215ce5339ca9766a6db7f39144ccc7d9bad53b96d65cfb14ae6c2985" 405 | "checksum syn 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)" = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" 406 | "checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" 407 | "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" 408 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 409 | "checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" 410 | "checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" 411 | "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 412 | "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 413 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 414 | "checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" 415 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 416 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 417 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 418 | --------------------------------------------------------------------------------