├── .gitignore ├── .travis.yml ├── Cargo.toml ├── LICENSE ├── README.md ├── src ├── logging.rs ├── main.rs └── args.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | 3 | os: 4 | - linux 5 | rust: 6 | - stable 7 | - beta 8 | - nightly 9 | 10 | matrix: 11 | # Test on nightly Rust, but failures there won't break the build. 12 | allow_failures: 13 | - rust: nightly 14 | 15 | 16 | # 17 | # Test script 18 | # 19 | 20 | script: 21 | - cargo build 22 | - cargo test --no-fail-fast 23 | 24 | 25 | # 26 | # Meta 27 | # 28 | 29 | branches: 30 | only: 31 | # Run CI on pushes and PRs to master 32 | - master 33 | # TODO: run also on tags when/if we have some deployment code 34 | # (This regex matches semantic versions like v1.2.3-rc4+2016.02.22) 35 | # - /^\d+\.\d+\.\d+.*$/ 36 | 37 | git: 38 | # Don't set this to 1 39 | # (see note at https://docs.travis-ci.com/user/customizing-the-build#Git-Clone-Depth) 40 | depth: 5 41 | 42 | cache: 43 | - cargo 44 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-download" 3 | version = "0.1.2" 4 | description = "Cargo subcommand for downloading crate sources" 5 | authors = ["Karol Kuczmarski "] 6 | keywords = ["cargo", "subcommand", "download", "fetch"] 7 | license = "MIT" 8 | readme = "README.md" 9 | categories = ["development-tools", "development-tools::cargo-plugins"] 10 | documentation = "https://docs.rs/cargo-download" 11 | homepage = "https://github.com/Xion/cargo-download" 12 | repository = "https://github.com/Xion/cargo-download.git" 13 | 14 | [[bin]] 15 | name = "cargo-download" 16 | 17 | [dependencies] 18 | ansi_term = "0.9" 19 | clap = "2.26.0" 20 | conv = "0.3" 21 | derive-error = "0.0.3" 22 | exitcode = "1.0" 23 | flate2 = "0.2" 24 | isatty = "0.1.1" 25 | itertools = "0.6" 26 | lazy_static = "0.2" 27 | log = "0.3" 28 | maplit = "0.1" 29 | reqwest = "0.9.5" 30 | semver = "0.9" 31 | serde_json = "1.0" 32 | slog = "1.5.2" 33 | slog-envlogger = "0.5" 34 | slog-stdlog = "1.1" 35 | slog-stream = "1.2" 36 | tar = "0.4" 37 | time = "0.1" 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2017 Karol Kuczmarski 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 20 | OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cargo-download 2 | 3 | [![crates.io](https://img.shields.io/crates/v/cargo-download.svg)](https://crates.io/crates/cargo-download) 4 | [![Build Status](https://travis-ci.org/Xion/cargo-download.svg?branch=master)](https://travis-ci.org/Xion/cargo-download) 5 | 6 | A cargo subcommand for downloading crates from _crates.io_ 7 | 8 | ## About 9 | 10 | `cargo-download` can be used to download a gzipped archive of given crate, 11 | in the exact form that it was uploaded to _crates.io_. 12 | 13 | This can be useful for a variety of things, such as: 14 | 15 | * checking in your dependencies in source control (if your team/organization follows this practice) 16 | * mirroring _crates.io_ for reproducible CI/CD pipelines 17 | * security auditing of crates (esp. when a crate repository is missing) 18 | * reproducing a bug that only occurs in uploaded versions of your crate 19 | 20 | ## Installation 21 | 22 | `cargo-download` can be installed with `cargo install`: 23 | 24 | $ cargo install cargo-download 25 | 26 | This shall put the `cargo-download` executable in your Cargo binary directory 27 | (e.g. `~/.cargo/bin`), which hopefully is in your `$PATH`. 28 | 29 | ## Usage 30 | 31 | To download the newest version of `foo` crate, do this: 32 | 33 | $ cargo download foo >foo.gz 34 | 35 | You can also use the standard _Cargo.toml_ notation to specify a particular version: 36 | 37 | $ cargo download foo==0.9 >foo-0.9.gz 38 | 39 | For more detailed usage instructions, run `cargo download --help`. 40 | 41 | ## License 42 | 43 | `cargo-download` is licensed under the terms of the MIT license. 44 | -------------------------------------------------------------------------------- /src/logging.rs: -------------------------------------------------------------------------------- 1 | //! Module implementing logging for the application. 2 | //! 3 | //! This includes setting up log filtering given a verbosity value, 4 | //! as well as defining how the logs are being formatted to stderr. 5 | 6 | use std::borrow::Cow; 7 | use std::collections::HashMap; 8 | use std::env; 9 | use std::io; 10 | 11 | use ansi_term::{Colour, Style}; 12 | use isatty; 13 | use log::SetLoggerError; 14 | use slog::{self, DrainExt, FilterLevel, Level}; 15 | use slog_envlogger::LogBuilder; 16 | use slog_stdlog; 17 | use slog_stream; 18 | use time; 19 | 20 | 21 | // Default logging level defined using the two enums used by slog. 22 | // Both values must correspond to the same level. (This is checked by a test). 23 | const DEFAULT_LEVEL: Level = Level::Info; 24 | const DEFAULT_FILTER_LEVEL: FilterLevel = FilterLevel::Info; 25 | 26 | // Arrays of log levels, indexed by verbosity. 27 | const POSITIVE_VERBOSITY_LEVELS: &'static [FilterLevel] = &[ 28 | DEFAULT_FILTER_LEVEL, 29 | FilterLevel::Debug, 30 | FilterLevel::Trace, 31 | ]; 32 | const NEGATIVE_VERBOSITY_LEVELS: &'static [FilterLevel] = &[ 33 | DEFAULT_FILTER_LEVEL, 34 | FilterLevel::Warning, 35 | FilterLevel::Error, 36 | FilterLevel::Critical, 37 | FilterLevel::Off, 38 | ]; 39 | 40 | 41 | /// Initialize logging with given verbosity. 42 | /// The verbosity value has the same meaning as in args::Options::verbosity. 43 | pub fn init(verbosity: isize) -> Result<(), SetLoggerError> { 44 | let istty = cfg!(unix) && isatty::stderr_isatty(); 45 | let stderr = slog_stream::stream(io::stderr(), LogFormat{tty: istty}); 46 | 47 | // Determine the log filtering level based on verbosity. 48 | // If the argument is excessive, log that but clamp to the highest/lowest log level. 49 | let mut verbosity = verbosity; 50 | let mut excessive = false; 51 | let level = if verbosity >= 0 { 52 | if verbosity >= POSITIVE_VERBOSITY_LEVELS.len() as isize { 53 | excessive = true; 54 | verbosity = POSITIVE_VERBOSITY_LEVELS.len() as isize - 1; 55 | } 56 | POSITIVE_VERBOSITY_LEVELS[verbosity as usize] 57 | } else { 58 | verbosity = -verbosity; 59 | if verbosity >= NEGATIVE_VERBOSITY_LEVELS.len() as isize { 60 | excessive = true; 61 | verbosity = NEGATIVE_VERBOSITY_LEVELS.len() as isize - 1; 62 | } 63 | NEGATIVE_VERBOSITY_LEVELS[verbosity as usize] 64 | }; 65 | 66 | // Include universal logger options, like the level. 67 | let mut builder = LogBuilder::new(stderr); 68 | builder = builder.filter(None, level); 69 | 70 | // Make some of the libraries less chatty 71 | // by raising the minimum logging level for them 72 | // (e.g. Info means that Debug and Trace level logs are filtered). 73 | builder = builder 74 | .filter(Some("hyper"), FilterLevel::Info) 75 | .filter(Some("tokio"), FilterLevel::Info); 76 | 77 | // Include any additional config from environmental variables. 78 | // This will override the options above if necessary, 79 | // so e.g. it is still possible to get full debug output from hyper/tokio. 80 | if let Ok(ref conf) = env::var("RUST_LOG") { 81 | builder = builder.parse(conf); 82 | } 83 | 84 | // Initialize the logger, possibly logging the excessive verbosity option. 85 | let env_logger_drain = builder.build(); 86 | let logger = slog::Logger::root(env_logger_drain.fuse(), o!()); 87 | try!(slog_stdlog::set_logger(logger)); 88 | if excessive { 89 | warn!("-v/-q flag passed too many times, logging level {:?} assumed", level); 90 | } 91 | Ok(()) 92 | } 93 | 94 | 95 | // Log formatting 96 | 97 | /// Token type that's only uses to tell slog-stream how to format our log entries. 98 | struct LogFormat { 99 | pub tty: bool, 100 | } 101 | 102 | impl slog_stream::Format for LogFormat { 103 | /// Format a single log Record and write it to given output. 104 | fn format(&self, output: &mut io::Write, 105 | record: &slog::Record, 106 | _logger_kvp: &slog::OwnedKeyValueList) -> io::Result<()> { 107 | // Format the higher level (more fine-grained) messages with greater detail, 108 | // as they are only visible when user explicitly enables verbose logging. 109 | let msg = if record.level() > DEFAULT_LEVEL { 110 | let logtime = format_log_time(); 111 | let level: String = { 112 | let first_char = record.level().as_str().chars().next().unwrap(); 113 | first_char.to_uppercase().collect() 114 | }; 115 | let module = { 116 | let module = record.module(); 117 | match module.find("::") { 118 | Some(idx) => Cow::Borrowed(&module[idx + 2..]), 119 | None => "main".into(), 120 | } 121 | }; 122 | // Dim the prefix (everything that's not a message) if we're outputting to a TTY. 123 | let prefix_style = if self.tty { *TTY_FINE_PREFIX_STYLE } else { Style::default() }; 124 | let prefix = format!("{}{} {}#{}]", level, logtime, module, record.line()); 125 | format!("{} {}\n", prefix_style.paint(prefix), record.msg()) 126 | } else { 127 | // Colorize the level label if we're outputting to a TTY. 128 | let level: Cow = if self.tty { 129 | let style = TTY_LEVEL_STYLES.get(&record.level().as_usize()) 130 | .cloned() 131 | .unwrap_or_else(Style::default); 132 | format!("{}", style.paint(record.level().as_str())).into() 133 | } else { 134 | record.level().as_str().into() 135 | }; 136 | format!("{}: {}\n", level, record.msg()) 137 | }; 138 | 139 | try!(output.write_all(msg.as_bytes())); 140 | Ok(()) 141 | } 142 | } 143 | 144 | /// Format the timestamp part of a detailed log entry. 145 | fn format_log_time() -> String { 146 | let utc_now = time::now().to_utc(); 147 | let mut logtime = format!("{}", utc_now.rfc3339()); // E.g.: 2012-02-22T14:53:18Z 148 | 149 | // Insert millisecond count before the Z. 150 | let millis = utc_now.tm_nsec / NANOS_IN_MILLISEC; 151 | logtime.pop(); 152 | format!("{}.{:04}Z", logtime, millis) 153 | } 154 | 155 | const NANOS_IN_MILLISEC: i32 = 1000000; 156 | 157 | lazy_static! { 158 | /// Map of log levels to their ANSI terminal styles. 159 | // (Level doesn't implement Hash so it has to be usize). 160 | static ref TTY_LEVEL_STYLES: HashMap = hashmap!{ 161 | Level::Info.as_usize() => Colour::Green.normal(), 162 | Level::Warning.as_usize() => Colour::Yellow.normal(), 163 | Level::Error.as_usize() => Colour::Red.normal(), 164 | Level::Critical.as_usize() => Colour::Purple.normal(), 165 | }; 166 | 167 | /// ANSI terminal style for the prefix (timestamp etc.) of a fine log message. 168 | static ref TTY_FINE_PREFIX_STYLE: Style = Style::new().dimmed(); 169 | } 170 | 171 | 172 | #[cfg(test)] 173 | mod tests { 174 | use slog::FilterLevel; 175 | use super::{DEFAULT_LEVEL, DEFAULT_FILTER_LEVEL, 176 | NEGATIVE_VERBOSITY_LEVELS, POSITIVE_VERBOSITY_LEVELS}; 177 | 178 | /// Check that default logging level is defined consistently. 179 | #[test] 180 | fn default_level() { 181 | let level = DEFAULT_LEVEL.as_usize(); 182 | let filter_level = DEFAULT_FILTER_LEVEL.as_usize(); 183 | assert_eq!(level, filter_level, 184 | "Default logging level is defined inconsistently: Level::{:?} vs. FilterLevel::{:?}", 185 | DEFAULT_LEVEL, DEFAULT_FILTER_LEVEL); 186 | } 187 | 188 | #[test] 189 | fn verbosity_levels() { 190 | assert_eq!(NEGATIVE_VERBOSITY_LEVELS[0], POSITIVE_VERBOSITY_LEVELS[0]); 191 | assert!(NEGATIVE_VERBOSITY_LEVELS.contains(&FilterLevel::Off), 192 | "Verbosity levels don't allow to turn logging off completely"); 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | //! 2 | //! cargo-download 3 | //! 4 | 5 | extern crate ansi_term; 6 | #[macro_use] extern crate clap; 7 | extern crate conv; 8 | #[macro_use] extern crate derive_error; 9 | extern crate exitcode; 10 | extern crate flate2; 11 | extern crate isatty; 12 | #[macro_use] extern crate lazy_static; 13 | #[macro_use] extern crate maplit; 14 | extern crate reqwest; 15 | extern crate semver; 16 | extern crate serde_json; 17 | extern crate slog_envlogger; 18 | extern crate slog_stdlog; 19 | extern crate slog_stream; 20 | extern crate time; 21 | extern crate tar; 22 | 23 | // `slog` must precede `log` in declarations here, because we want to simultaneously: 24 | // * use the standard `log` macros 25 | // * be able to initialize the slog logger using slog macros like o!() 26 | #[macro_use] extern crate slog; 27 | #[macro_use] extern crate log; 28 | 29 | 30 | mod args; 31 | mod logging; 32 | 33 | 34 | use std::borrow::Cow; 35 | use std::fs; 36 | use std::io::{self, Read, Write}; 37 | use std::error::Error; 38 | use std::path::PathBuf; 39 | use std::process::exit; 40 | 41 | use log::LogLevel::*; 42 | use reqwest::header::CONTENT_LENGTH; 43 | use semver::Version; 44 | use serde_json::Value as Json; 45 | 46 | use args::{ArgsError, Crate, Output}; 47 | 48 | 49 | lazy_static! { 50 | /// Application / package name, as filled out by Cargo. 51 | static ref NAME: &'static str = option_env!("CARGO_PKG_NAME") 52 | .unwrap_or("cargo-download"); 53 | 54 | /// Application version, as filled out by Cargo. 55 | static ref VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION"); 56 | } 57 | 58 | 59 | fn main() { 60 | let opts = args::parse().unwrap_or_else(|e| { 61 | print_args_error(e).unwrap(); 62 | exit(exitcode::USAGE); 63 | }); 64 | 65 | logging::init(opts.verbosity).unwrap(); 66 | log_signature(); 67 | 68 | let version = match opts.crate_.exact_version() { 69 | Some(v) => { 70 | debug!("Exact crate version given in arguments, not querying crates.io"); 71 | Cow::Borrowed(v) 72 | } 73 | None => Cow::Owned(get_newest_version(&opts.crate_).unwrap_or_else(|e| { 74 | error!("Failed to get the newest version of crate {}: {}", opts.crate_, e); 75 | exit(exitcode::TEMPFAIL); 76 | })), 77 | }; 78 | let crate_bytes = download_crate(&opts.crate_.name(), &version).unwrap_or_else(|e| { 79 | error!("Failed to download crate `{}=={}`: {}", opts.crate_.name(), version, e); 80 | exit(exitcode::TEMPFAIL); 81 | }); 82 | 83 | if opts.extract { 84 | // Extract to a directory named $CRATE-$VERSION 85 | // Due to how crate archives are structured (they contain 86 | // single top-level directory) this is done automatically 87 | // if you simply extract them in $CWD. 88 | let dir: PathBuf = format!("./{}-{}", opts.crate_.name(), version).into(); 89 | debug!("Extracting crate archive to {}/", dir.display()); 90 | let gzip = flate2::read::GzDecoder::new(&crate_bytes[..]).unwrap(); 91 | let mut archive = tar::Archive::new(gzip); 92 | match archive.unpack(".") { 93 | Ok(_) => { 94 | // If -x option was passed, we need to move the extracted directory 95 | // to wherever the user wanted. 96 | let mut dir = dir; 97 | if let Some(&Output::Path(ref p)) = opts.output.as_ref() { 98 | fs::rename(&dir, p).unwrap_or_else(|e| { 99 | error!("Failed to move extracted archive from {} to {}: {}", 100 | dir.display(), p.display(), e); 101 | exit(exitcode::IOERR) 102 | }); 103 | dir = p.clone(); 104 | } 105 | info!("Crate content extracted to {}/", dir.display()); 106 | } 107 | Err(e) => { 108 | error!("Couldn't extract crate to {}/: {}", dir.display(), e); 109 | exit(exitcode::TEMPFAIL) 110 | } 111 | } 112 | } else { 113 | let output = opts.output.as_ref().unwrap_or(&Output::Stdout); 114 | match output { 115 | &Output::Stdout => { io::stdout().write(&crate_bytes).unwrap(); } 116 | &Output::Path(ref p) => { 117 | let mut file = fs::OpenOptions::new() 118 | .write(true).create(true) 119 | .open(p).unwrap_or_else(|e| { 120 | error!("Failed to open output file {}: {}", p.display(), e); 121 | exit(exitcode::IOERR) 122 | }); 123 | file.write(&crate_bytes).unwrap(); 124 | info!("Crate's archive written to {}", p.display()); 125 | } 126 | } 127 | } 128 | } 129 | 130 | // Print an error that may occur while parsing arguments. 131 | fn print_args_error(e: ArgsError) -> io::Result<()> { 132 | match e { 133 | ArgsError::Parse(ref e) => 134 | // In case of generic parse error, 135 | // message provided by the clap library will be the usage string. 136 | writeln!(&mut io::stderr(), "{}", e.message), 137 | e => { 138 | writeln!(&mut io::stderr(), "Failed to parse arguments: {}", e) 139 | } 140 | } 141 | } 142 | 143 | /// Log the program name, version, and other metadata. 144 | #[inline] 145 | fn log_signature() { 146 | if log_enabled!(Info) { 147 | let version = VERSION.map(|v| format!("v{}", v)) 148 | .unwrap_or_else(|| "".into()); 149 | info!("{} {}", *NAME, version); 150 | } 151 | } 152 | 153 | 154 | const CRATES_API_ROOT: &'static str = "https://crates.io/api/v1/crates"; 155 | 156 | /// Talk to crates.io to get the newest version of given crate 157 | /// that matches specified version requirements. 158 | fn get_newest_version(crate_: &Crate) -> Result> { 159 | let versions_url = format!("{}/{}/versions", CRATES_API_ROOT, crate_.name()); 160 | debug!("Fetching latest matching version of crate `{}` from {}", crate_, versions_url); 161 | let response: Json = reqwest::get(&versions_url)?.json()?; 162 | 163 | // TODO: rather that silently skipping over incorrect versions, 164 | // report them as malformed response from crates.io 165 | let mut versions = response.pointer("/versions").and_then(|vs| vs.as_array()).map(|vs| { 166 | vs.iter().filter_map(|v| { 167 | v.as_object().and_then(|v| v.get("num")).and_then(|n| n.as_str()) 168 | }) 169 | .filter_map(|v| Version::parse(v).ok()) 170 | .collect::>() 171 | }).ok_or_else(|| format!("malformed response from {}", versions_url))?; 172 | 173 | if versions.is_empty() { 174 | return Err("no valid versions found".into()); 175 | } 176 | 177 | let version_req = crate_.version_requirement(); 178 | versions.sort_by(|a, b| b.cmp(a)); 179 | versions.into_iter().find(|v| version_req.matches(v)) 180 | .map(|v| { info!("Latest version of crate {} is {}", crate_, v); v.to_owned() }) 181 | .ok_or_else(|| "no matching version found".into()) 182 | } 183 | 184 | /// Download given crate and return it as a vector of gzipped bytes. 185 | fn download_crate(name: &str, version: &Version) -> Result, Box> { 186 | let download_url = format!("{}/{}/{}/download", CRATES_API_ROOT, name, version); 187 | debug!("Downloading crate `{}=={}` from {}", name, version, download_url); 188 | let mut response = reqwest::get(&download_url)?; 189 | 190 | let content_length: Option = response.headers().get(CONTENT_LENGTH) 191 | .and_then(|ct_len| ct_len.to_str().ok()) 192 | .and_then(|ct_len| ct_len.parse().ok()); 193 | trace!("Download size: {}", content_length.map_or("".into(), |cl| format!("{} bytes", cl))); 194 | let mut bytes = match content_length { 195 | Some(cl) => Vec::with_capacity(cl), 196 | None => Vec::new(), 197 | }; 198 | response.read_to_end(&mut bytes)?; 199 | 200 | info!("Crate `{}=={}` downloaded successfully", name, version); 201 | Ok(bytes) 202 | } 203 | -------------------------------------------------------------------------------- /src/args.rs: -------------------------------------------------------------------------------- 1 | //! Module for handling command line arguments. 2 | 3 | use std::borrow::Cow; 4 | use std::env; 5 | use std::error::Error; 6 | use std::fmt; 7 | use std::ffi::OsString; 8 | use std::iter::IntoIterator; 9 | use std::path::PathBuf; 10 | use std::str::FromStr; 11 | 12 | use clap::{self, AppSettings, Arg, ArgMatches}; 13 | use conv::TryFrom; 14 | use conv::errors::NoError; 15 | use semver::{Version, VersionReq, ReqParseError, SemVerError}; 16 | 17 | use super::{NAME, VERSION}; 18 | 19 | 20 | // Parse command line arguments and return `Options` object. 21 | #[inline] 22 | pub fn parse() -> Result { 23 | parse_from_argv(env::args_os()) 24 | } 25 | 26 | /// Parse application options from given array of arguments 27 | /// (*all* arguments, including binary name). 28 | #[inline] 29 | pub fn parse_from_argv(argv: I) -> Result 30 | where I: IntoIterator, T: Clone + Into + PartialEq 31 | { 32 | // Detect `cargo download` invocation, and remove the subcommand name. 33 | let mut argv: Vec<_> = argv.into_iter().collect(); 34 | if argv.len() >= 2 && &argv[1] == "download" { 35 | argv.remove(1); 36 | } 37 | 38 | let parser = create_parser(); 39 | let matches = try!(parser.get_matches_from_safe(argv)); 40 | Options::try_from(matches) 41 | } 42 | 43 | 44 | /// Structure to hold options received from the command line. 45 | #[derive(Clone, Debug, PartialEq, Eq)] 46 | pub struct Options { 47 | /// Verbosity of the logging output. 48 | /// 49 | /// Corresponds to the number of times the -v flag has been passed. 50 | /// If -q has been used instead, this will be negative. 51 | pub verbosity: isize, 52 | /// Crate to download. 53 | pub crate_: Crate, 54 | /// Whether to extract the crate's archive. 55 | pub extract: bool, 56 | /// Where to output the crate's archive. 57 | pub output: Option, 58 | } 59 | 60 | #[allow(dead_code)] 61 | impl Options { 62 | #[inline] 63 | pub fn verbose(&self) -> bool { self.verbosity > 0 } 64 | #[inline] 65 | pub fn quiet(&self) -> bool { self.verbosity < 0 } 66 | } 67 | 68 | impl<'a> TryFrom> for Options { 69 | type Err = ArgsError; 70 | 71 | fn try_from(matches: ArgMatches<'a>) -> Result { 72 | let verbose_count = matches.occurrences_of(OPT_VERBOSE) as isize; 73 | let quiet_count = matches.occurrences_of(OPT_QUIET) as isize; 74 | let verbosity = verbose_count - quiet_count; 75 | 76 | let crate_ = Crate::from_str(matches.value_of(ARG_CRATE).unwrap())?; 77 | let extract = matches.is_present(OPT_EXTRACT); 78 | let output = matches.value_of(OPT_OUTPUT).map(Output::from); 79 | 80 | // TODO: sanity check Output::Path that it doesn't exist, 81 | // because fs::rename behaves oddly (i.e. fails) on Windows 82 | // if a directory target exists 83 | if extract && output == Some(Output::Stdout) { 84 | return Err(ArgsError::CantExtractToStdout); 85 | } 86 | 87 | Ok(Options{verbosity, crate_, extract, output}) 88 | } 89 | } 90 | 91 | 92 | /// Specification of a crate to download. 93 | #[derive(Debug, Clone, Eq, PartialEq)] 94 | pub struct Crate { 95 | name: String, 96 | version: CrateVersion, 97 | } 98 | impl FromStr for Crate { 99 | type Err = CrateError; 100 | 101 | fn from_str(s: &str) -> Result { 102 | let parts: Vec<_> = s.splitn(2, "=").map(|p| p.trim()).collect(); 103 | let name = parts[0].to_owned(); 104 | if parts.len() < 2 { 105 | let valid_name = 106 | name.chars().all(|c| c.is_alphanumeric() || c == '-' || c == '_'); 107 | if valid_name { 108 | Ok(Crate{ 109 | name, 110 | version: CrateVersion::Other(VersionReq::any()), 111 | }) 112 | } else { 113 | Err(CrateError::Name(name)) 114 | } 115 | } else { 116 | let version = CrateVersion::from_str(parts[1])?; 117 | Ok(Crate{name, version}) 118 | } 119 | } 120 | } 121 | impl Crate { 122 | #[inline] 123 | pub fn name(&self) -> &str { 124 | &self.name 125 | } 126 | 127 | pub fn exact_version(&self) -> Option<&Version> { 128 | match self.version { 129 | CrateVersion::Exact(ref v) => Some(v), 130 | _ => None, 131 | } 132 | } 133 | 134 | pub fn version_requirement(&self) -> Cow { 135 | match self.version { 136 | CrateVersion::Exact(ref v) => Cow::Owned(VersionReq::exact(v)), 137 | CrateVersion::Other(ref r) => Cow::Borrowed(r), 138 | } 139 | } 140 | } 141 | impl fmt::Display for Crate { 142 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 143 | write!(fmt, "{}={}", self.name, self.version) 144 | } 145 | } 146 | 147 | /// Crate version. 148 | #[derive(Debug, Clone, Eq, PartialEq)] 149 | enum CrateVersion { 150 | /// Exact version, like =1.0.0. 151 | Exact(Version), 152 | /// Non-exact version, like ^1.0.0. 153 | Other(VersionReq) 154 | } 155 | impl FromStr for CrateVersion { 156 | type Err = CrateVersionError; 157 | 158 | fn from_str(s: &str) -> Result { 159 | if s.starts_with("=") { 160 | let version = Version::from_str(&s[1..])?; 161 | Ok(CrateVersion::Exact(version)) 162 | } else { 163 | let version_req = VersionReq::from_str(s)?; 164 | Ok(CrateVersion::Other(version_req)) 165 | } 166 | } 167 | } 168 | impl fmt::Display for CrateVersion { 169 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 170 | match self { 171 | &CrateVersion::Exact(ref v) => write!(fmt, "={}", v), 172 | &CrateVersion::Other(ref r) => write!(fmt, "{}", r), 173 | } 174 | } 175 | } 176 | 177 | /// Defines where the program's output should ho. 178 | #[derive(Debug, Clone, Eq, PartialEq)] 179 | pub enum Output { 180 | /// Output should go to a file or directory of given path. 181 | Path(PathBuf), 182 | /// Output should be on standard output. 183 | Stdout, 184 | } 185 | impl<'s> From<&'s str> for Output { 186 | fn from(s: &'s str) -> Output { 187 | if s == "-" { 188 | Output::Stdout 189 | } else { 190 | Output::Path(s.into()) 191 | } 192 | } 193 | } 194 | impl FromStr for Output { 195 | type Err = NoError; 196 | 197 | fn from_str(s: &str) -> Result { 198 | Ok(s.into()) 199 | } 200 | } 201 | impl fmt::Display for Output { 202 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 203 | match self { 204 | &Output::Path(ref p) => write!(fmt, "{}", p.display()), 205 | &Output::Stdout => write!(fmt, "-"), 206 | } 207 | } 208 | } 209 | 210 | 211 | /// Error that can occur while parsing of command line arguments. 212 | #[derive(Debug)] 213 | pub enum ArgsError { 214 | /// General when parsing the arguments. 215 | Parse(clap::Error), 216 | /// Error when parsing crate version. 217 | Crate(CrateError), 218 | /// Cannot pass -x alpng with an explicit --output "-" (stdout). 219 | CantExtractToStdout, 220 | } 221 | impl From for ArgsError { 222 | fn from(input: clap::Error) -> Self { 223 | ArgsError::Parse(input) 224 | } 225 | } 226 | impl From for ArgsError { 227 | fn from(input: CrateError) -> Self { 228 | ArgsError::Crate(input) 229 | } 230 | } 231 | impl Error for ArgsError { 232 | fn description(&self) -> &str { "failed to parse argv" } 233 | fn cause(&self) -> Option<&Error> { 234 | match self { 235 | &ArgsError::Parse(ref e) => Some(e), 236 | &ArgsError::Crate(ref e) => Some(e), 237 | _ => None, 238 | } 239 | } 240 | } 241 | impl fmt::Display for ArgsError { 242 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 243 | match self { 244 | &ArgsError::Parse(ref e) => write!(fmt, "parse error: {}", e), 245 | &ArgsError::Crate(ref e) => write!(fmt, "invalid crate spec: {}", e), 246 | &ArgsError::CantExtractToStdout => 247 | write!(fmt, "cannot extract a crate to standard output"), 248 | } 249 | } 250 | } 251 | 252 | /// Error that can occur while parsing CRATE argument. 253 | #[derive(Debug)] 254 | pub enum CrateError { 255 | /// General syntax error of the crate specification. 256 | Name(String), 257 | /// Error parsing the semver spec of the crate. 258 | Version(CrateVersionError), 259 | } 260 | impl From for CrateError { 261 | fn from(input: CrateVersionError) -> Self { 262 | CrateError::Version(input) 263 | } 264 | } 265 | impl Error for CrateError { 266 | fn description(&self) -> &str { "invalid crate specification" } 267 | fn cause(&self) -> Option<&Error> { 268 | match self { 269 | &CrateError::Version(ref e) => Some(e), 270 | _ => None, 271 | } 272 | } 273 | } 274 | impl fmt::Display for CrateError { 275 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 276 | match self { 277 | &CrateError::Name(ref n) => write!(fmt, "invalid crate name `{}`", n), 278 | &CrateError::Version(ref e) => write!(fmt, "invalid crate version: {}", e), 279 | } 280 | } 281 | } 282 | 283 | /// Error that can occur while parsing crate version. 284 | #[derive(Debug, Error)] 285 | pub enum CrateVersionError { 286 | Syntax(SemVerError), 287 | Semantics(ReqParseError), 288 | } 289 | 290 | 291 | // Parser configuration 292 | 293 | /// Type of the argument parser object 294 | /// (which is called an "App" in clap's silly nomenclature). 295 | type Parser<'p> = clap::App<'p, 'p>; 296 | 297 | 298 | lazy_static! { 299 | static ref ABOUT: &'static str = option_env!("CARGO_PKG_DESCRIPTION").unwrap_or(""); 300 | } 301 | 302 | const ARG_CRATE: &'static str = "crate"; 303 | const OPT_EXTRACT: &'static str = "extract"; 304 | const OPT_OUTPUT: &'static str = "output"; 305 | const OPT_VERBOSE: &'static str = "verbose"; 306 | const OPT_QUIET: &'static str = "quiet"; 307 | 308 | /// Create the parser for application's command line. 309 | fn create_parser<'p>() -> Parser<'p> { 310 | let mut parser = Parser::new(*NAME); 311 | if let Some(version) = *VERSION { 312 | parser = parser.version(version); 313 | } 314 | parser 315 | .bin_name("cargo download") 316 | .about(*ABOUT) 317 | .author(crate_authors!(", ")) 318 | 319 | .setting(AppSettings::StrictUtf8) 320 | 321 | .setting(AppSettings::UnifiedHelpMessage) 322 | .setting(AppSettings::DontCollapseArgsInUsage) 323 | .setting(AppSettings::DeriveDisplayOrder) 324 | .setting(AppSettings::ColorNever) 325 | 326 | .arg(Arg::with_name(ARG_CRATE) 327 | .value_name("CRATE[=VERSION]") 328 | .required(true) 329 | .help("Crate to download") 330 | .long_help(concat!( 331 | "The crate to download.\n\n", 332 | "This can be just a crate name (like \"foo\"), in which case ", 333 | "the newest version of the crate is fetched. ", 334 | "Alternatively, the VERSION requirement can be given after ", 335 | "the equal sign (=) in the usual Cargo.toml format ", 336 | "(e.g. \"foo==0.9\" for the exact version)."))) 337 | 338 | .arg(Arg::with_name(OPT_EXTRACT) 339 | .long("extract").short("x") 340 | .required(false) 341 | .multiple(false) 342 | .takes_value(false) 343 | .help("Whether to automatically extract the crate's archive") 344 | .long_help(concat!( 345 | "Specify this flag to have the crate extracted automatically.", 346 | "\n\nNote that unless changed via the --output flag, ", 347 | "this will extract the files to a new subdirectory ", 348 | "bearing the name of the downloaded crate archive."))) 349 | 350 | .arg(Arg::with_name(OPT_OUTPUT) 351 | .long("output").short("o") 352 | .required(false) 353 | .multiple(false) 354 | .takes_value(true) 355 | .help("Where to output the downloaded crate") 356 | .long_help(concat!( 357 | "Normally, the compressed crate is dumped to standard output, ", 358 | "while the extract one (-x flag) is placed in a directory corresponding ", 359 | "to crate's name.\n", 360 | "This flag allows to change that by providing an explicit ", 361 | "file or directory path."))) 362 | 363 | // Verbosity flags. 364 | .arg(Arg::with_name(OPT_VERBOSE) 365 | .long("verbose").short("v") 366 | .multiple(true) 367 | .conflicts_with(OPT_QUIET) 368 | .help("Increase logging verbosity")) 369 | .arg(Arg::with_name(OPT_QUIET) 370 | .long("quiet").short("q") 371 | .multiple(true) 372 | .conflicts_with(OPT_VERBOSE) 373 | .help("Decrease logging verbosity")) 374 | 375 | .help_short("H") 376 | .version_short("V") 377 | } 378 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "adler32" 3 | version = "1.0.2" 4 | source = "registry+https://github.com/rust-lang/crates.io-index" 5 | 6 | [[package]] 7 | name = "aho-corasick" 8 | version = "0.5.3" 9 | source = "registry+https://github.com/rust-lang/crates.io-index" 10 | dependencies = [ 11 | "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 12 | ] 13 | 14 | [[package]] 15 | name = "ansi_term" 16 | version = "0.9.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | 19 | [[package]] 20 | name = "arrayvec" 21 | version = "0.4.8" 22 | source = "registry+https://github.com/rust-lang/crates.io-index" 23 | dependencies = [ 24 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 25 | ] 26 | 27 | [[package]] 28 | name = "atty" 29 | version = "0.2.3" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | dependencies = [ 32 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 33 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 34 | "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 35 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 36 | ] 37 | 38 | [[package]] 39 | name = "base64" 40 | version = "0.9.3" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | dependencies = [ 43 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 44 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 45 | ] 46 | 47 | [[package]] 48 | name = "bitflags" 49 | version = "0.7.0" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | 52 | [[package]] 53 | name = "bitflags" 54 | version = "0.9.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | 57 | [[package]] 58 | name = "bitflags" 59 | version = "1.0.4" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | 62 | [[package]] 63 | name = "byteorder" 64 | version = "1.1.0" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | 67 | [[package]] 68 | name = "bytes" 69 | version = "0.4.11" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | dependencies = [ 72 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 73 | "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 74 | ] 75 | 76 | [[package]] 77 | name = "cargo-download" 78 | version = "0.1.2" 79 | dependencies = [ 80 | "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 81 | "clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)", 82 | "conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 83 | "derive-error 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 84 | "exitcode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 86 | "isatty 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", 89 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "maplit 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "reqwest 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", 92 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 93 | "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 94 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 95 | "slog-envlogger 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 96 | "slog-stdlog 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "slog-stream 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 98 | "tar 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 100 | ] 101 | 102 | [[package]] 103 | name = "case" 104 | version = "0.1.0" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | 107 | [[package]] 108 | name = "cc" 109 | version = "1.0.3" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | 112 | [[package]] 113 | name = "cfg-if" 114 | version = "0.1.2" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | 117 | [[package]] 118 | name = "chrono" 119 | version = "0.2.25" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | dependencies = [ 122 | "num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 123 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 124 | ] 125 | 126 | [[package]] 127 | name = "clap" 128 | version = "2.27.1" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | dependencies = [ 131 | "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 132 | "atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 133 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", 134 | "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 135 | "textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 136 | "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 137 | "vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 138 | ] 139 | 140 | [[package]] 141 | name = "cloudabi" 142 | version = "0.0.3" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | dependencies = [ 145 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 146 | ] 147 | 148 | [[package]] 149 | name = "conv" 150 | version = "0.3.3" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | dependencies = [ 153 | "custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 154 | ] 155 | 156 | [[package]] 157 | name = "core-foundation" 158 | version = "0.5.1" 159 | source = "registry+https://github.com/rust-lang/crates.io-index" 160 | dependencies = [ 161 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 162 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 163 | ] 164 | 165 | [[package]] 166 | name = "core-foundation-sys" 167 | version = "0.5.1" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | dependencies = [ 170 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 171 | ] 172 | 173 | [[package]] 174 | name = "crc32fast" 175 | version = "1.1.1" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | 178 | [[package]] 179 | name = "crossbeam" 180 | version = "0.2.10" 181 | source = "registry+https://github.com/rust-lang/crates.io-index" 182 | 183 | [[package]] 184 | name = "crossbeam-deque" 185 | version = "0.6.2" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | dependencies = [ 188 | "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 190 | ] 191 | 192 | [[package]] 193 | name = "crossbeam-epoch" 194 | version = "0.6.1" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | dependencies = [ 197 | "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 198 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 199 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 200 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 201 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 203 | ] 204 | 205 | [[package]] 206 | name = "crossbeam-utils" 207 | version = "0.6.1" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | dependencies = [ 210 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 211 | ] 212 | 213 | [[package]] 214 | name = "custom_derive" 215 | version = "0.1.7" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | 218 | [[package]] 219 | name = "derive-error" 220 | version = "0.0.3" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | dependencies = [ 223 | "case 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 224 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 226 | ] 227 | 228 | [[package]] 229 | name = "dtoa" 230 | version = "0.4.2" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | 233 | [[package]] 234 | name = "either" 235 | version = "1.4.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | 238 | [[package]] 239 | name = "encoding_rs" 240 | version = "0.8.13" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | dependencies = [ 243 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 244 | ] 245 | 246 | [[package]] 247 | name = "exitcode" 248 | version = "1.1.2" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | 251 | [[package]] 252 | name = "filetime" 253 | version = "0.1.14" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | dependencies = [ 256 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 257 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 258 | "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 259 | ] 260 | 261 | [[package]] 262 | name = "flate2" 263 | version = "0.2.20" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | dependencies = [ 266 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 267 | "miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 268 | ] 269 | 270 | [[package]] 271 | name = "fnv" 272 | version = "1.0.6" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | 275 | [[package]] 276 | name = "foreign-types" 277 | version = "0.3.2" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | dependencies = [ 280 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 281 | ] 282 | 283 | [[package]] 284 | name = "foreign-types-shared" 285 | version = "0.1.1" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | 288 | [[package]] 289 | name = "fuchsia-zircon" 290 | version = "0.2.1" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | dependencies = [ 293 | "fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 294 | ] 295 | 296 | [[package]] 297 | name = "fuchsia-zircon" 298 | version = "0.3.3" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | dependencies = [ 301 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 302 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 303 | ] 304 | 305 | [[package]] 306 | name = "fuchsia-zircon-sys" 307 | version = "0.2.0" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | dependencies = [ 310 | "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 311 | ] 312 | 313 | [[package]] 314 | name = "fuchsia-zircon-sys" 315 | version = "0.3.3" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | 318 | [[package]] 319 | name = "futures" 320 | version = "0.1.25" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | 323 | [[package]] 324 | name = "futures-cpupool" 325 | version = "0.1.7" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | dependencies = [ 328 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 329 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 330 | ] 331 | 332 | [[package]] 333 | name = "h2" 334 | version = "0.1.13" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | dependencies = [ 337 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 338 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 339 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 340 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 341 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 342 | "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 343 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 344 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 345 | "string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 346 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 347 | ] 348 | 349 | [[package]] 350 | name = "http" 351 | version = "0.1.14" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | dependencies = [ 354 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 355 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 356 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 357 | ] 358 | 359 | [[package]] 360 | name = "httparse" 361 | version = "1.2.3" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | 364 | [[package]] 365 | name = "hyper" 366 | version = "0.12.16" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | dependencies = [ 369 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 370 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 371 | "futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 372 | "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 373 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 374 | "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 375 | "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 376 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 377 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 379 | "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", 380 | "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 381 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 382 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 383 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 384 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 385 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 386 | "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 387 | "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 388 | ] 389 | 390 | [[package]] 391 | name = "hyper-tls" 392 | version = "0.3.1" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | dependencies = [ 395 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 396 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 397 | "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", 398 | "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 399 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 400 | ] 401 | 402 | [[package]] 403 | name = "idna" 404 | version = "0.1.4" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | dependencies = [ 407 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 408 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 409 | "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 410 | ] 411 | 412 | [[package]] 413 | name = "indexmap" 414 | version = "1.0.2" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | 417 | [[package]] 418 | name = "iovec" 419 | version = "0.1.1" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | dependencies = [ 422 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 423 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 424 | ] 425 | 426 | [[package]] 427 | name = "isatty" 428 | version = "0.1.5" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | dependencies = [ 431 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 432 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 433 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 434 | ] 435 | 436 | [[package]] 437 | name = "itertools" 438 | version = "0.6.5" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | dependencies = [ 441 | "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 442 | ] 443 | 444 | [[package]] 445 | name = "itoa" 446 | version = "0.3.4" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | 449 | [[package]] 450 | name = "itoa" 451 | version = "0.4.3" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | 454 | [[package]] 455 | name = "kernel32-sys" 456 | version = "0.2.2" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | dependencies = [ 459 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 460 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 461 | ] 462 | 463 | [[package]] 464 | name = "lazy_static" 465 | version = "0.2.10" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | 468 | [[package]] 469 | name = "lazy_static" 470 | version = "1.2.0" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | 473 | [[package]] 474 | name = "lazycell" 475 | version = "1.2.0" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | 478 | [[package]] 479 | name = "libc" 480 | version = "0.2.44" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | 483 | [[package]] 484 | name = "libflate" 485 | version = "0.1.19" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | dependencies = [ 488 | "adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 489 | "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 490 | "crc32fast 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 491 | ] 492 | 493 | [[package]] 494 | name = "lock_api" 495 | version = "0.1.5" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | dependencies = [ 498 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 499 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 500 | ] 501 | 502 | [[package]] 503 | name = "log" 504 | version = "0.3.8" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | 507 | [[package]] 508 | name = "log" 509 | version = "0.4.6" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | dependencies = [ 512 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 513 | ] 514 | 515 | [[package]] 516 | name = "maplit" 517 | version = "0.1.6" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | 520 | [[package]] 521 | name = "matches" 522 | version = "0.1.6" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | 525 | [[package]] 526 | name = "memchr" 527 | version = "0.1.11" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | dependencies = [ 530 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 531 | ] 532 | 533 | [[package]] 534 | name = "memoffset" 535 | version = "0.2.1" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | 538 | [[package]] 539 | name = "mime" 540 | version = "0.3.12" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | dependencies = [ 543 | "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 544 | ] 545 | 546 | [[package]] 547 | name = "mime_guess" 548 | version = "2.0.0-alpha.6" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | dependencies = [ 551 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 552 | "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 553 | "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 554 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 555 | ] 556 | 557 | [[package]] 558 | name = "miniz-sys" 559 | version = "0.1.10" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | dependencies = [ 562 | "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 563 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 564 | ] 565 | 566 | [[package]] 567 | name = "mio" 568 | version = "0.6.16" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | dependencies = [ 571 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 573 | "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 574 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 575 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 576 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 577 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 581 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 582 | ] 583 | 584 | [[package]] 585 | name = "miow" 586 | version = "0.2.1" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | dependencies = [ 589 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 590 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 591 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 592 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 593 | ] 594 | 595 | [[package]] 596 | name = "native-tls" 597 | version = "0.2.2" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | dependencies = [ 600 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 601 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 602 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 603 | "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", 604 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 605 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 606 | "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 607 | "security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 608 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 609 | "tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 610 | ] 611 | 612 | [[package]] 613 | name = "net2" 614 | version = "0.2.33" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | dependencies = [ 617 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 618 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 620 | ] 621 | 622 | [[package]] 623 | name = "nodrop" 624 | version = "0.1.13" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | 627 | [[package]] 628 | name = "num" 629 | version = "0.1.40" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | dependencies = [ 632 | "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", 633 | "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", 634 | "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 635 | ] 636 | 637 | [[package]] 638 | name = "num-integer" 639 | version = "0.1.35" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | dependencies = [ 642 | "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 643 | ] 644 | 645 | [[package]] 646 | name = "num-iter" 647 | version = "0.1.34" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | dependencies = [ 650 | "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 652 | ] 653 | 654 | [[package]] 655 | name = "num-traits" 656 | version = "0.1.40" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | 659 | [[package]] 660 | name = "num_cpus" 661 | version = "1.8.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | dependencies = [ 664 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 665 | ] 666 | 667 | [[package]] 668 | name = "openssl" 669 | version = "0.10.15" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | dependencies = [ 672 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 673 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 674 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 675 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 676 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 677 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 678 | ] 679 | 680 | [[package]] 681 | name = "openssl-probe" 682 | version = "0.1.2" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | 685 | [[package]] 686 | name = "openssl-sys" 687 | version = "0.9.39" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | dependencies = [ 690 | "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 691 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 692 | "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 693 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 694 | ] 695 | 696 | [[package]] 697 | name = "owning_ref" 698 | version = "0.4.0" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | dependencies = [ 701 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 702 | ] 703 | 704 | [[package]] 705 | name = "parking_lot" 706 | version = "0.6.4" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | dependencies = [ 709 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 710 | "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 711 | ] 712 | 713 | [[package]] 714 | name = "parking_lot_core" 715 | version = "0.3.1" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | dependencies = [ 718 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 719 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 720 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 721 | "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 722 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 723 | ] 724 | 725 | [[package]] 726 | name = "percent-encoding" 727 | version = "1.0.1" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | 730 | [[package]] 731 | name = "phf" 732 | version = "0.7.21" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | dependencies = [ 735 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 736 | ] 737 | 738 | [[package]] 739 | name = "phf_codegen" 740 | version = "0.7.21" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | dependencies = [ 743 | "phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 744 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 745 | ] 746 | 747 | [[package]] 748 | name = "phf_generator" 749 | version = "0.7.21" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | dependencies = [ 752 | "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", 753 | "rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)", 754 | ] 755 | 756 | [[package]] 757 | name = "phf_shared" 758 | version = "0.7.21" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | dependencies = [ 761 | "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 762 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 763 | ] 764 | 765 | [[package]] 766 | name = "pkg-config" 767 | version = "0.3.9" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | 770 | [[package]] 771 | name = "quote" 772 | version = "0.3.15" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | 775 | [[package]] 776 | name = "rand" 777 | version = "0.3.18" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | dependencies = [ 780 | "fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 781 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 782 | ] 783 | 784 | [[package]] 785 | name = "rand" 786 | version = "0.5.5" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | dependencies = [ 789 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 790 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 791 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 793 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 794 | ] 795 | 796 | [[package]] 797 | name = "rand" 798 | version = "0.6.1" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | dependencies = [ 801 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 805 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 806 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 807 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 808 | "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 809 | "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 810 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 811 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 812 | ] 813 | 814 | [[package]] 815 | name = "rand_chacha" 816 | version = "0.1.0" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | dependencies = [ 819 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 820 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 821 | ] 822 | 823 | [[package]] 824 | name = "rand_core" 825 | version = "0.2.2" 826 | source = "registry+https://github.com/rust-lang/crates.io-index" 827 | dependencies = [ 828 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 829 | ] 830 | 831 | [[package]] 832 | name = "rand_core" 833 | version = "0.3.0" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | 836 | [[package]] 837 | name = "rand_hc" 838 | version = "0.1.0" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | dependencies = [ 841 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 842 | ] 843 | 844 | [[package]] 845 | name = "rand_isaac" 846 | version = "0.1.1" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | dependencies = [ 849 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 850 | ] 851 | 852 | [[package]] 853 | name = "rand_pcg" 854 | version = "0.1.1" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | dependencies = [ 857 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 858 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 859 | ] 860 | 861 | [[package]] 862 | name = "rand_xorshift" 863 | version = "0.1.0" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | dependencies = [ 866 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 867 | ] 868 | 869 | [[package]] 870 | name = "redox_syscall" 871 | version = "0.1.31" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | 874 | [[package]] 875 | name = "redox_termios" 876 | version = "0.1.1" 877 | source = "registry+https://github.com/rust-lang/crates.io-index" 878 | dependencies = [ 879 | "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 880 | ] 881 | 882 | [[package]] 883 | name = "regex" 884 | version = "0.1.80" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | dependencies = [ 887 | "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 888 | "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 889 | "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 890 | "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 891 | "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 892 | ] 893 | 894 | [[package]] 895 | name = "regex-syntax" 896 | version = "0.3.9" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | 899 | [[package]] 900 | name = "remove_dir_all" 901 | version = "0.5.1" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | dependencies = [ 904 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 905 | ] 906 | 907 | [[package]] 908 | name = "reqwest" 909 | version = "0.9.5" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | dependencies = [ 912 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 913 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 914 | "encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", 915 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 916 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 917 | "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", 918 | "hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 919 | "libflate 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", 920 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 921 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 922 | "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", 923 | "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 924 | "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 925 | "serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 926 | "serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 927 | "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 928 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 929 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 930 | "uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 931 | ] 932 | 933 | [[package]] 934 | name = "rustc_version" 935 | version = "0.2.3" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | dependencies = [ 938 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 939 | ] 940 | 941 | [[package]] 942 | name = "safemem" 943 | version = "0.3.0" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | 946 | [[package]] 947 | name = "schannel" 948 | version = "0.1.14" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | dependencies = [ 951 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 952 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 953 | ] 954 | 955 | [[package]] 956 | name = "scopeguard" 957 | version = "0.3.3" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | 960 | [[package]] 961 | name = "security-framework" 962 | version = "0.2.1" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | dependencies = [ 965 | "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 966 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 967 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 968 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 969 | ] 970 | 971 | [[package]] 972 | name = "security-framework-sys" 973 | version = "0.2.1" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | dependencies = [ 976 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 977 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 978 | ] 979 | 980 | [[package]] 981 | name = "semver" 982 | version = "0.9.0" 983 | source = "registry+https://github.com/rust-lang/crates.io-index" 984 | dependencies = [ 985 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 986 | ] 987 | 988 | [[package]] 989 | name = "semver-parser" 990 | version = "0.7.0" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | 993 | [[package]] 994 | name = "serde" 995 | version = "1.0.21" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | 998 | [[package]] 999 | name = "serde_json" 1000 | version = "1.0.6" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | dependencies = [ 1003 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1004 | "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1005 | "num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1006 | "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "serde_urlencoded" 1011 | version = "0.5.1" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | dependencies = [ 1014 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1015 | "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1016 | "serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 1017 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "siphasher" 1022 | version = "0.2.2" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | 1025 | [[package]] 1026 | name = "slab" 1027 | version = "0.4.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | 1030 | [[package]] 1031 | name = "slog" 1032 | version = "1.7.1" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | 1035 | [[package]] 1036 | name = "slog-envlogger" 1037 | version = "0.5.0" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | dependencies = [ 1040 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1041 | "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", 1042 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1043 | "slog-stdlog 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1044 | "slog-term 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "slog-extra" 1049 | version = "0.1.2" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | dependencies = [ 1052 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1053 | "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "slog-stdlog" 1058 | version = "1.1.0" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | dependencies = [ 1061 | "crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", 1062 | "lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", 1063 | "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1064 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1065 | "slog-term 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "slog-stream" 1070 | version = "1.2.1" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | dependencies = [ 1073 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1074 | "slog-extra 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1075 | "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "slog-term" 1080 | version = "1.5.0" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | dependencies = [ 1083 | "chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)", 1084 | "isatty 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1085 | "slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 1086 | "slog-stream 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1087 | "thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1088 | ] 1089 | 1090 | [[package]] 1091 | name = "smallvec" 1092 | version = "0.6.7" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | dependencies = [ 1095 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1096 | ] 1097 | 1098 | [[package]] 1099 | name = "stable_deref_trait" 1100 | version = "1.1.1" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | 1103 | [[package]] 1104 | name = "string" 1105 | version = "0.1.2" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | 1108 | [[package]] 1109 | name = "strsim" 1110 | version = "0.6.0" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | 1113 | [[package]] 1114 | name = "syn" 1115 | version = "0.11.11" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | dependencies = [ 1118 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1119 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 1120 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "synom" 1125 | version = "0.11.3" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | dependencies = [ 1128 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "tar" 1133 | version = "0.4.13" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | dependencies = [ 1136 | "filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1137 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1138 | "xattr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "tempfile" 1143 | version = "3.0.5" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | dependencies = [ 1146 | "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1147 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1148 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1149 | "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 1150 | "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "termion" 1156 | version = "1.5.1" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | dependencies = [ 1159 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1160 | "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 1161 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "textwrap" 1166 | version = "0.9.0" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | dependencies = [ 1169 | "unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "thread-id" 1174 | version = "2.0.0" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | dependencies = [ 1177 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1178 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1179 | ] 1180 | 1181 | [[package]] 1182 | name = "thread_local" 1183 | version = "0.2.7" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | dependencies = [ 1186 | "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "thread_local" 1191 | version = "0.3.4" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | dependencies = [ 1194 | "lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", 1195 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "time" 1200 | version = "0.1.38" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | dependencies = [ 1203 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1205 | "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", 1206 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1207 | ] 1208 | 1209 | [[package]] 1210 | name = "tokio" 1211 | version = "0.1.7" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | dependencies = [ 1214 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1219 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1220 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1221 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1222 | "tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 1223 | "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1224 | ] 1225 | 1226 | [[package]] 1227 | name = "tokio-codec" 1228 | version = "0.1.1" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | dependencies = [ 1231 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1232 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1233 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1234 | ] 1235 | 1236 | [[package]] 1237 | name = "tokio-executor" 1238 | version = "0.1.5" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | dependencies = [ 1241 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "tokio-fs" 1246 | version = "0.1.4" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | dependencies = [ 1249 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1250 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1251 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "tokio-io" 1256 | version = "0.1.10" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | dependencies = [ 1259 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1260 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1261 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "tokio-reactor" 1266 | version = "0.1.7" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | dependencies = [ 1269 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1274 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1275 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1276 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1277 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1278 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "tokio-tcp" 1283 | version = "0.1.2" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | dependencies = [ 1286 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1287 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1288 | "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1289 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1290 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1291 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1292 | ] 1293 | 1294 | [[package]] 1295 | name = "tokio-threadpool" 1296 | version = "0.1.9" 1297 | source = "registry+https://github.com/rust-lang/crates.io-index" 1298 | dependencies = [ 1299 | "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1300 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1301 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1302 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1303 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1304 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1305 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1306 | ] 1307 | 1308 | [[package]] 1309 | name = "tokio-timer" 1310 | version = "0.2.5" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | dependencies = [ 1313 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1314 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1315 | ] 1316 | 1317 | [[package]] 1318 | name = "tokio-udp" 1319 | version = "0.1.3" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | dependencies = [ 1322 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1323 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1324 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1325 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1326 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1327 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1328 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "try-lock" 1333 | version = "0.2.2" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | 1336 | [[package]] 1337 | name = "unicase" 1338 | version = "1.4.2" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | dependencies = [ 1341 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "unicase" 1346 | version = "2.1.0" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | dependencies = [ 1349 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "unicode-bidi" 1354 | version = "0.3.4" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | dependencies = [ 1357 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1358 | ] 1359 | 1360 | [[package]] 1361 | name = "unicode-normalization" 1362 | version = "0.1.5" 1363 | source = "registry+https://github.com/rust-lang/crates.io-index" 1364 | 1365 | [[package]] 1366 | name = "unicode-width" 1367 | version = "0.1.4" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | 1370 | [[package]] 1371 | name = "unicode-xid" 1372 | version = "0.0.4" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | 1375 | [[package]] 1376 | name = "unreachable" 1377 | version = "1.0.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | dependencies = [ 1380 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1381 | ] 1382 | 1383 | [[package]] 1384 | name = "url" 1385 | version = "1.6.0" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | dependencies = [ 1388 | "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1389 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1390 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "utf8-ranges" 1395 | version = "0.1.3" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | 1398 | [[package]] 1399 | name = "uuid" 1400 | version = "0.7.1" 1401 | source = "registry+https://github.com/rust-lang/crates.io-index" 1402 | dependencies = [ 1403 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "vcpkg" 1408 | version = "0.2.2" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | 1411 | [[package]] 1412 | name = "vec_map" 1413 | version = "0.8.0" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | 1416 | [[package]] 1417 | name = "version_check" 1418 | version = "0.1.3" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | 1421 | [[package]] 1422 | name = "void" 1423 | version = "1.0.2" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | 1426 | [[package]] 1427 | name = "want" 1428 | version = "0.0.6" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | dependencies = [ 1431 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1432 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1433 | "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "winapi" 1438 | version = "0.2.8" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | 1441 | [[package]] 1442 | name = "winapi" 1443 | version = "0.3.6" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | dependencies = [ 1446 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1447 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "winapi-build" 1452 | version = "0.1.1" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | 1455 | [[package]] 1456 | name = "winapi-i686-pc-windows-gnu" 1457 | version = "0.4.0" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | 1460 | [[package]] 1461 | name = "winapi-x86_64-pc-windows-gnu" 1462 | version = "0.4.0" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | 1465 | [[package]] 1466 | name = "ws2_32-sys" 1467 | version = "0.2.1" 1468 | source = "registry+https://github.com/rust-lang/crates.io-index" 1469 | dependencies = [ 1470 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1471 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1472 | ] 1473 | 1474 | [[package]] 1475 | name = "xattr" 1476 | version = "0.1.11" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | dependencies = [ 1479 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1480 | ] 1481 | 1482 | [metadata] 1483 | "checksum adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6cbd0b9af8587c72beadc9f72d35b9fbb070982c9e6203e46e93f10df25f8f45" 1484 | "checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" 1485 | "checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" 1486 | "checksum arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f405cc4c21cd8b784f6c8fc2adf9bc00f59558f0049b5ec21517f875963040cc" 1487 | "checksum atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860" 1488 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 1489 | "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" 1490 | "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" 1491 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" 1492 | "checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" 1493 | "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" 1494 | "checksum case 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e88b166b48e29667f5443df64df3c61dc07dc2b1a0b0d231800e07f09a33ecc1" 1495 | "checksum cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b13a57efd6b30ecd6598ebdb302cca617930b5470647570468a65d12ef9719" 1496 | "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" 1497 | "checksum chrono 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "9213f7cd7c27e95c2b57c49f0e69b1ea65b27138da84a170133fd21b07659c00" 1498 | "checksum clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b8c532887f1a292d17de05ae858a8fe50a301e196f9ef0ddb7ccd0d1d00f180" 1499 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1500 | "checksum conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" 1501 | "checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980" 1502 | "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" 1503 | "checksum crc32fast 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e0e685559fa8bccfa46afd0f876047ee5d87c536d71d0c2b3a08cc9e880f73eb" 1504 | "checksum crossbeam 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97" 1505 | "checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" 1506 | "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" 1507 | "checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" 1508 | "checksum custom_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" 1509 | "checksum derive-error 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "629f1bb3abce791912ca85a24676fff54464f7deb122906adabc90fb96e876d3" 1510 | "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" 1511 | "checksum either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740178ddf48b1a9e878e6d6509a1442a2d42fd2928aae8e7a6f8a36fb01981b3" 1512 | "checksum encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1a8fa54e6689eb2549c4efed8d00d7f3b2b994a064555b0e8df4ae3764bcc4be" 1513 | "checksum exitcode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193" 1514 | "checksum filetime 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "aa75ec8f7927063335a9583e7fa87b0110bb888cf766dc01b54c0ff70d760c8e" 1515 | "checksum flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423" 1516 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1517 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1518 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1519 | "checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159" 1520 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1521 | "checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82" 1522 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1523 | "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" 1524 | "checksum futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e86f49cc0d92fe1b97a5980ec32d56208272cbb00f15044ea9e2799dde766fdf" 1525 | "checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" 1526 | "checksum http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "02096a6d2c55e63f7fcb800690e4f889a25f6ec342e3adb4594e293b625215ab" 1527 | "checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07" 1528 | "checksum hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0aeedb8ca5f0f96be00f84073c6d0d5f962ecad020ef543dff99a7c12717a60e" 1529 | "checksum hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "32cd73f14ad370d3b4d4b7dce08f69b81536c82e39fcc89731930fe5788cd661" 1530 | "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" 1531 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" 1532 | "checksum iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6e8b9c2247fcf6c6a1151f1156932be5606c9fd6f55a2d7f9fc1cb29386b2f7" 1533 | "checksum isatty 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "00c9301a947a2eaee7ce2556b80285dcc89558d07088962e6e8b9c25730f9dc6" 1534 | "checksum itertools 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3f2be4da1690a039e9ae5fd575f706a63ad5a2120f161b1d653c9da3930dd21" 1535 | "checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c" 1536 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" 1537 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1538 | "checksum lazy_static 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "236eb37a62591d4a41a89b7763d7de3e06ca02d5ab2815446a8bae5d2f8c2d57" 1539 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" 1540 | "checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0" 1541 | "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311" 1542 | "checksum libflate 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "bff3ac7d6f23730d3b533c35ed75eef638167634476a499feef16c428d74b57b" 1543 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1544 | "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b" 1545 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1546 | "checksum maplit 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "22593015b8df7747861c69c28acd32589fb96c1686369f3b661d12e409d4cf65" 1547 | "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" 1548 | "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" 1549 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1550 | "checksum mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0a907b83e7b9e987032439a387e187119cddafc92d5c2aaeb1d92580a793f630" 1551 | "checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed" 1552 | "checksum miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4" 1553 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" 1554 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1555 | "checksum native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8e08de0070bbf4c31f452ea2a70db092f36f6f2e4d897adf5674477d488fb2" 1556 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1557 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1558 | "checksum num 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525" 1559 | "checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba" 1560 | "checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01" 1561 | "checksum num-traits 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0" 1562 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1563 | "checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" 1564 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1565 | "checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" 1566 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1567 | "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" 1568 | "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" 1569 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1570 | "checksum phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "cb325642290f28ee14d8c6201159949a872f220c62af6e110a56ea914fbe42fc" 1571 | "checksum phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d62594c0bb54c464f633175d502038177e90309daf2e0158be42ed5f023ce88f" 1572 | "checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03" 1573 | "checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2" 1574 | "checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" 1575 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" 1576 | "checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd" 1577 | "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" 1578 | "checksum rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae9d223d52ae411a33cf7e54ec6034ec165df296ccd23533d671a28252b6f66a" 1579 | "checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a" 1580 | "checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372" 1581 | "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" 1582 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1583 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1584 | "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" 1585 | "checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" 1586 | "checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509" 1587 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1588 | "checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" 1589 | "checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" 1590 | "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" 1591 | "checksum reqwest 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ab52e462d1e15891441aeefadff68bdea005174328ce3da0a314f2ad313ec837" 1592 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1593 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" 1594 | "checksum schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0e1a231dc10abf6749cfa5d7767f25888d484201accbd919b66ab5413c502d56" 1595 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1596 | "checksum security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "697d3f3c23a618272ead9e1fb259c1411102b31c6af8b93f1d64cca9c3b0e8e0" 1597 | "checksum security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab01dfbe5756785b5b4d46e0289e5a18071dfa9a7c2b24213ea00b9ef9b665bf" 1598 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1599 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1600 | "checksum serde 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6eda663e865517ee783b0891a3f6eb3a253e0b0dabb46418969ee9635beadd9e" 1601 | "checksum serde_json 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e4586746d1974a030c48919731ecffd0ed28d0c40749d0d18d43b3a7d6c9b20e" 1602 | "checksum serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce0fd303af908732989354c6f02e05e2e6d597152870f2c6990efb0577137480" 1603 | "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" 1604 | "checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" 1605 | "checksum slog 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "07aa15818e194222ef5b814aec86d47da20d93360c068b2c5f5ef64d9347fbdf" 1606 | "checksum slog-envlogger 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfea715bb310c33c8f90e659bce5b95e39851348b9a7e2a77495a069662def78" 1607 | "checksum slog-extra 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "511581f4dd1dc90e4eca99b60be8a692d9c975e8757558aa774f16007d27492a" 1608 | "checksum slog-stdlog 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "56cc08f40c45e0ab41dcfde0a19a22c5b7176d3827fc7d078450ebfdc080a37c" 1609 | "checksum slog-stream 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3fac4af71007ddb7338f771e059a46051f18d1454d8ac556f234a0573e719daa" 1610 | "checksum slog-term 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cb53c0bae0745898fd5a7b75b1c389507333470ac4c645ae431890c0f828b6ca" 1611 | "checksum smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b73ea3738b47563803ef814925e69be00799a8c07420be8b996f8e98fb2336db" 1612 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1613 | "checksum string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98998cced76115b1da46f63388b909d118a37ae0be0f82ad35773d4a4bc9d18d" 1614 | "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" 1615 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" 1616 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" 1617 | "checksum tar 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "281285b717926caa919ad905ef89c63d75805c7d89437fb873100925a53f2b1b" 1618 | "checksum tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7e91405c14320e5c79b3d148e1c86f40749a36e490642202a31689cb1a3452b2" 1619 | "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" 1620 | "checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693" 1621 | "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" 1622 | "checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" 1623 | "checksum thread_local 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14" 1624 | "checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" 1625 | "checksum tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee337e5f4e501fc32966fec6fe0ca0cc1c237b0b1b14a335f8bfe3c5f06e286" 1626 | "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" 1627 | "checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" 1628 | "checksum tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae25f6b17d25116d2cba342083abe5255d3c2c79cb21ea11aa049c53bf7c75" 1629 | "checksum tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7392fe0a70d5ce0c882c4778116c519bd5dbaa8a7c3ae3d04578b3afafdcda21" 1630 | "checksum tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "502b625acb4ee13cbb3b90b8ca80e0addd263ddacf6931666ef751e610b07fb5" 1631 | "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" 1632 | "checksum tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "56c5556262383032878afad66943926a1d1f0967f17e94bd7764ceceb3b70e7f" 1633 | "checksum tokio-timer 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1c76b4e97a4f61030edff8bd272364e4f731b9f54c7307eb4eb733c3926eb96a" 1634 | "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" 1635 | "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" 1636 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 1637 | "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" 1638 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1639 | "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" 1640 | "checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f" 1641 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" 1642 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1643 | "checksum url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa35e768d4daf1d85733418a49fb42e10d7f633e394fccab4ab7aba897053fe2" 1644 | "checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" 1645 | "checksum uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dab5c5526c5caa3d106653401a267fed923e7046f35895ffcb5ca42db64942e6" 1646 | "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b" 1647 | "checksum vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c" 1648 | "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" 1649 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1650 | "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" 1651 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1652 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" 1653 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1654 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1655 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1656 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1657 | "checksum xattr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "5f04de8a1346489a2f9e9bd8526b73d135ec554227b17568456e86aa35b6f3fc" 1658 | --------------------------------------------------------------------------------