├── .gitignore ├── .travis.yml ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── bin ├── cargo-coverage.rs ├── cargo-coveralls.rs └── cargo-doc-upload.rs └── lib.rs /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | kcov/ 3 | master.zip 4 | .tramp_history 5 | .vscode/ 6 | .cargo/ 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: rust 3 | # Dependencies of kcov, used by coverage 4 | addons: 5 | apt: 6 | packages: 7 | - libcurl4-openssl-dev 8 | - libelf-dev 9 | - libdw-dev 10 | - binutils-dev 11 | - cmake 12 | sources: 13 | - kalakris-cmake 14 | 15 | # run builds for all the trains (and more) 16 | rust: 17 | - nightly 18 | - beta 19 | # check it compiles on the latest stable compiler 20 | - stable 21 | 22 | before_script: 23 | - | 24 | cargo install && 25 | export PATH=$HOME/.cargo/bin:$PATH 26 | 27 | # the main build 28 | script: 29 | - | 30 | cargo build && 31 | cargo test && 32 | cargo bench && 33 | cargo doc 34 | after_success: 35 | # measure code coverage and upload to coveralls.io 36 | - cargo coveralls 37 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adler32" 5 | version = "1.0.3" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | 8 | [[package]] 9 | name = "advapi32-sys" 10 | version = "0.2.0" 11 | source = "registry+https://github.com/rust-lang/crates.io-index" 12 | dependencies = [ 13 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 14 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 15 | ] 16 | 17 | [[package]] 18 | name = "aho-corasick" 19 | version = "0.6.9" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | dependencies = [ 22 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 23 | ] 24 | 25 | [[package]] 26 | name = "ansi_term" 27 | version = "0.11.0" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | dependencies = [ 30 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 31 | ] 32 | 33 | [[package]] 34 | name = "arrayvec" 35 | version = "0.4.10" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | dependencies = [ 38 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 39 | ] 40 | 41 | [[package]] 42 | name = "atty" 43 | version = "0.2.6" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | dependencies = [ 46 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 48 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 49 | ] 50 | 51 | [[package]] 52 | name = "autocfg" 53 | version = "0.1.1" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | 56 | [[package]] 57 | name = "backtrace" 58 | version = "0.3.4" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | dependencies = [ 61 | "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 62 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 63 | "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 66 | "rustc-demangle 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 68 | ] 69 | 70 | [[package]] 71 | name = "backtrace-sys" 72 | version = "0.1.16" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | dependencies = [ 75 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 76 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 77 | ] 78 | 79 | [[package]] 80 | name = "badge" 81 | version = "0.2.0" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | dependencies = [ 84 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "rusttype 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 86 | ] 87 | 88 | [[package]] 89 | name = "base64" 90 | version = "0.9.3" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | dependencies = [ 93 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 94 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 95 | ] 96 | 97 | [[package]] 98 | name = "bitflags" 99 | version = "1.0.1" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | 102 | [[package]] 103 | name = "build_const" 104 | version = "0.2.1" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | 107 | [[package]] 108 | name = "byteorder" 109 | version = "1.2.7" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | 112 | [[package]] 113 | name = "bytesize" 114 | version = "1.0.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | 117 | [[package]] 118 | name = "cargo" 119 | version = "0.32.0" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | dependencies = [ 122 | "atty 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 123 | "bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 124 | "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", 125 | "core-foundation 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 126 | "crates-io 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", 127 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 128 | "crypto-hash 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 129 | "curl 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", 130 | "curl-sys 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", 131 | "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)", 132 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 133 | "filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 134 | "flate2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 135 | "fs2 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 136 | "fwdansi 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 137 | "git2 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 138 | "git2-curl 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 139 | "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 140 | "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 141 | "home 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 142 | "ignore 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 143 | "jobserver 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 144 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 145 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 146 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 147 | "libgit2-sys 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", 148 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 149 | "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 150 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 151 | "opener 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 152 | "rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 153 | "rustfix 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 154 | "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 156 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 157 | "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 158 | "serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 161 | "tar 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", 162 | "tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 163 | "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", 165 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 166 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 167 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 168 | ] 169 | 170 | [[package]] 171 | name = "cargo-travis" 172 | version = "0.0.11" 173 | dependencies = [ 174 | "badge 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "cargo 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)", 176 | "docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 177 | "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 179 | "fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 182 | "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 183 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 184 | ] 185 | 186 | [[package]] 187 | name = "cc" 188 | version = "1.0.28" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | 191 | [[package]] 192 | name = "cfg-if" 193 | version = "0.1.6" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | 196 | [[package]] 197 | name = "clap" 198 | version = "2.32.0" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | dependencies = [ 201 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "atty 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 203 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 204 | "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 206 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 207 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 208 | ] 209 | 210 | [[package]] 211 | name = "cloudabi" 212 | version = "0.0.3" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | dependencies = [ 215 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 216 | ] 217 | 218 | [[package]] 219 | name = "commoncrypto" 220 | version = "0.2.0" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | dependencies = [ 223 | "commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 224 | ] 225 | 226 | [[package]] 227 | name = "commoncrypto-sys" 228 | version = "0.2.0" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | dependencies = [ 231 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 232 | ] 233 | 234 | [[package]] 235 | name = "core-foundation" 236 | version = "0.6.3" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | dependencies = [ 239 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 240 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 241 | ] 242 | 243 | [[package]] 244 | name = "core-foundation-sys" 245 | version = "0.6.2" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | 248 | [[package]] 249 | name = "crates-io" 250 | version = "0.20.0" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | dependencies = [ 253 | "curl 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", 254 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 255 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 256 | "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 257 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 258 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 259 | ] 260 | 261 | [[package]] 262 | name = "crc" 263 | version = "1.8.1" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | dependencies = [ 266 | "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 267 | ] 268 | 269 | [[package]] 270 | name = "crc32fast" 271 | version = "1.1.2" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | dependencies = [ 274 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 275 | ] 276 | 277 | [[package]] 278 | name = "crossbeam" 279 | version = "0.3.2" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | 282 | [[package]] 283 | name = "crossbeam-utils" 284 | version = "0.5.0" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | 287 | [[package]] 288 | name = "crypto-hash" 289 | version = "0.3.3" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | dependencies = [ 292 | "commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 293 | "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", 295 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 296 | ] 297 | 298 | [[package]] 299 | name = "curl" 300 | version = "0.4.19" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | dependencies = [ 303 | "curl-sys 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", 304 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 305 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 306 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 307 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 309 | "socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 311 | ] 312 | 313 | [[package]] 314 | name = "curl-sys" 315 | version = "0.4.16" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | dependencies = [ 318 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 319 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 320 | "libnghttp2-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 321 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 322 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 323 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 326 | ] 327 | 328 | [[package]] 329 | name = "dbghelp-sys" 330 | version = "0.2.0" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | dependencies = [ 333 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 334 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 335 | ] 336 | 337 | [[package]] 338 | name = "docopt" 339 | version = "1.0.2" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | dependencies = [ 342 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 343 | "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 344 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 345 | "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 346 | "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 347 | ] 348 | 349 | [[package]] 350 | name = "env_logger" 351 | version = "0.4.3" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | dependencies = [ 354 | "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 355 | "regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 356 | ] 357 | 358 | [[package]] 359 | name = "env_logger" 360 | version = "0.5.13" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | dependencies = [ 363 | "atty 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 364 | "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 365 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 366 | "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 367 | "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 368 | ] 369 | 370 | [[package]] 371 | name = "failure" 372 | version = "0.1.5" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | dependencies = [ 375 | "backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 376 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 377 | ] 378 | 379 | [[package]] 380 | name = "failure_derive" 381 | version = "0.1.5" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | dependencies = [ 384 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 385 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 386 | "syn 0.15.24 (registry+https://github.com/rust-lang/crates.io-index)", 387 | "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 388 | ] 389 | 390 | [[package]] 391 | name = "filetime" 392 | version = "0.2.4" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | dependencies = [ 395 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 396 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 397 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 398 | ] 399 | 400 | [[package]] 401 | name = "flate2" 402 | version = "1.0.6" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | dependencies = [ 405 | "crc32fast 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 406 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 407 | "miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 408 | "miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 409 | ] 410 | 411 | [[package]] 412 | name = "fnv" 413 | version = "1.0.6" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | 416 | [[package]] 417 | name = "foreign-types" 418 | version = "0.3.2" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | dependencies = [ 421 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 422 | ] 423 | 424 | [[package]] 425 | name = "foreign-types-shared" 426 | version = "0.1.1" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | 429 | [[package]] 430 | name = "fs2" 431 | version = "0.4.2" 432 | source = "registry+https://github.com/rust-lang/crates.io-index" 433 | dependencies = [ 434 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 435 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 436 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 437 | ] 438 | 439 | [[package]] 440 | name = "fs_extra" 441 | version = "1.1.0" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | 444 | [[package]] 445 | name = "fuchsia-zircon" 446 | version = "0.3.2" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | dependencies = [ 449 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 450 | "fuchsia-zircon-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 451 | ] 452 | 453 | [[package]] 454 | name = "fuchsia-zircon-sys" 455 | version = "0.3.2" 456 | source = "registry+https://github.com/rust-lang/crates.io-index" 457 | 458 | [[package]] 459 | name = "fwdansi" 460 | version = "1.0.1" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | dependencies = [ 463 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 464 | "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 465 | ] 466 | 467 | [[package]] 468 | name = "git2" 469 | version = "0.7.5" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | dependencies = [ 472 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "libgit2-sys 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)", 475 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 476 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 477 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 478 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 479 | ] 480 | 481 | [[package]] 482 | name = "git2-curl" 483 | version = "0.8.2" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | dependencies = [ 486 | "curl 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", 487 | "git2 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 488 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 489 | "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 490 | ] 491 | 492 | [[package]] 493 | name = "glob" 494 | version = "0.2.11" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | 497 | [[package]] 498 | name = "globset" 499 | version = "0.4.1" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | dependencies = [ 502 | "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 503 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 504 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 505 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 506 | "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 507 | ] 508 | 509 | [[package]] 510 | name = "hex" 511 | version = "0.3.2" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | 514 | [[package]] 515 | name = "home" 516 | version = "0.3.0" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | dependencies = [ 519 | "advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 520 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 521 | "scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 522 | "userenv-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 523 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 524 | ] 525 | 526 | [[package]] 527 | name = "humantime" 528 | version = "1.2.0" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | dependencies = [ 531 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 532 | ] 533 | 534 | [[package]] 535 | name = "idna" 536 | version = "0.1.4" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | dependencies = [ 539 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 540 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 541 | "unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 542 | ] 543 | 544 | [[package]] 545 | name = "ignore" 546 | version = "0.4.3" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | dependencies = [ 549 | "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 550 | "globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 551 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 552 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 553 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 554 | "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 555 | "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 556 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 557 | "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 558 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 559 | ] 560 | 561 | [[package]] 562 | name = "itoa" 563 | version = "0.4.3" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | 566 | [[package]] 567 | name = "jobserver" 568 | version = "0.1.12" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | dependencies = [ 571 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 573 | "rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 574 | ] 575 | 576 | [[package]] 577 | name = "kernel32-sys" 578 | version = "0.2.2" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | dependencies = [ 581 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 583 | ] 584 | 585 | [[package]] 586 | name = "lazy_static" 587 | version = "1.0.0" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | 590 | [[package]] 591 | name = "lazycell" 592 | version = "1.2.1" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | 595 | [[package]] 596 | name = "libc" 597 | version = "0.2.46" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | 600 | [[package]] 601 | name = "libgit2-sys" 602 | version = "0.7.11" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | dependencies = [ 605 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 606 | "curl-sys 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", 607 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 608 | "libssh2-sys 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 609 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 610 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 611 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 612 | ] 613 | 614 | [[package]] 615 | name = "libnghttp2-sys" 616 | version = "0.1.1" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | dependencies = [ 619 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 621 | ] 622 | 623 | [[package]] 624 | name = "libssh2-sys" 625 | version = "0.2.11" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | dependencies = [ 628 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 629 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 630 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 631 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 632 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 633 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 634 | ] 635 | 636 | [[package]] 637 | name = "libz-sys" 638 | version = "1.0.25" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | dependencies = [ 641 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 642 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 643 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 644 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 645 | ] 646 | 647 | [[package]] 648 | name = "log" 649 | version = "0.3.9" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | dependencies = [ 652 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 653 | ] 654 | 655 | [[package]] 656 | name = "log" 657 | version = "0.4.1" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | dependencies = [ 660 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 661 | ] 662 | 663 | [[package]] 664 | name = "matches" 665 | version = "0.1.6" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | 668 | [[package]] 669 | name = "memchr" 670 | version = "2.1.2" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | dependencies = [ 673 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 674 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 675 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 676 | ] 677 | 678 | [[package]] 679 | name = "miniz-sys" 680 | version = "0.1.11" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | dependencies = [ 683 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 684 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 685 | ] 686 | 687 | [[package]] 688 | name = "miniz_oxide" 689 | version = "0.2.0" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | dependencies = [ 692 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 693 | ] 694 | 695 | [[package]] 696 | name = "miniz_oxide_c_api" 697 | version = "0.2.0" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | dependencies = [ 700 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 701 | "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 702 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 703 | "miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 704 | ] 705 | 706 | [[package]] 707 | name = "miow" 708 | version = "0.3.3" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | dependencies = [ 711 | "socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 712 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 713 | ] 714 | 715 | [[package]] 716 | name = "nodrop" 717 | version = "0.1.13" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | 720 | [[package]] 721 | name = "num-traits" 722 | version = "0.1.41" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | 725 | [[package]] 726 | name = "num_cpus" 727 | version = "1.8.0" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | dependencies = [ 730 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 731 | ] 732 | 733 | [[package]] 734 | name = "opener" 735 | version = "0.3.2" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | dependencies = [ 738 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 739 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 740 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 741 | ] 742 | 743 | [[package]] 744 | name = "openssl" 745 | version = "0.10.16" 746 | source = "registry+https://github.com/rust-lang/crates.io-index" 747 | dependencies = [ 748 | "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 749 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 750 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 751 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 752 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 753 | "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", 754 | ] 755 | 756 | [[package]] 757 | name = "openssl-probe" 758 | version = "0.1.2" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | 761 | [[package]] 762 | name = "openssl-sys" 763 | version = "0.9.40" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | dependencies = [ 766 | "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", 767 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 768 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 769 | "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 770 | ] 771 | 772 | [[package]] 773 | name = "ordered-float" 774 | version = "0.5.2" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | dependencies = [ 777 | "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 778 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 779 | ] 780 | 781 | [[package]] 782 | name = "percent-encoding" 783 | version = "1.0.1" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | 786 | [[package]] 787 | name = "pkg-config" 788 | version = "0.3.14" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | 791 | [[package]] 792 | name = "proc-macro2" 793 | version = "0.4.24" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | dependencies = [ 796 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 797 | ] 798 | 799 | [[package]] 800 | name = "quick-error" 801 | version = "1.2.2" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | 804 | [[package]] 805 | name = "quote" 806 | version = "0.3.15" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | 809 | [[package]] 810 | name = "quote" 811 | version = "0.6.10" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | dependencies = [ 814 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 815 | ] 816 | 817 | [[package]] 818 | name = "rand" 819 | version = "0.6.4" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | dependencies = [ 822 | "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 823 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 824 | "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 825 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 826 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 827 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 828 | "rand_os 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 829 | "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 830 | "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 831 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 832 | ] 833 | 834 | [[package]] 835 | name = "rand_chacha" 836 | version = "0.1.1" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | dependencies = [ 839 | "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 840 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 841 | ] 842 | 843 | [[package]] 844 | name = "rand_core" 845 | version = "0.3.0" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | 848 | [[package]] 849 | name = "rand_hc" 850 | version = "0.1.0" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | dependencies = [ 853 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 854 | ] 855 | 856 | [[package]] 857 | name = "rand_isaac" 858 | version = "0.1.1" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | dependencies = [ 861 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 862 | ] 863 | 864 | [[package]] 865 | name = "rand_os" 866 | version = "0.1.1" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | dependencies = [ 869 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 870 | "fuchsia-zircon 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 871 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 872 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 873 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 874 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 875 | ] 876 | 877 | [[package]] 878 | name = "rand_pcg" 879 | version = "0.1.1" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | dependencies = [ 882 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 883 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 884 | ] 885 | 886 | [[package]] 887 | name = "rand_xorshift" 888 | version = "0.1.1" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | dependencies = [ 891 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 892 | ] 893 | 894 | [[package]] 895 | name = "rdrand" 896 | version = "0.4.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | dependencies = [ 899 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 900 | ] 901 | 902 | [[package]] 903 | name = "redox_syscall" 904 | version = "0.1.50" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | 907 | [[package]] 908 | name = "redox_termios" 909 | version = "0.1.1" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | dependencies = [ 912 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 913 | ] 914 | 915 | [[package]] 916 | name = "regex" 917 | version = "0.2.5" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | dependencies = [ 920 | "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 921 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 922 | "regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 923 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 924 | "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 925 | ] 926 | 927 | [[package]] 928 | name = "regex" 929 | version = "1.1.0" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | dependencies = [ 932 | "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 933 | "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 934 | "regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 935 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 936 | "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 937 | ] 938 | 939 | [[package]] 940 | name = "regex-syntax" 941 | version = "0.4.2" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | 944 | [[package]] 945 | name = "regex-syntax" 946 | version = "0.6.4" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | dependencies = [ 949 | "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 950 | ] 951 | 952 | [[package]] 953 | name = "remove_dir_all" 954 | version = "0.5.1" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | dependencies = [ 957 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 958 | ] 959 | 960 | [[package]] 961 | name = "rustc-demangle" 962 | version = "0.1.5" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | 965 | [[package]] 966 | name = "rustc-workspace-hack" 967 | version = "1.0.0" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | 970 | [[package]] 971 | name = "rustc_version" 972 | version = "0.2.3" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | dependencies = [ 975 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 976 | ] 977 | 978 | [[package]] 979 | name = "rustfix" 980 | version = "0.4.4" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | dependencies = [ 983 | "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 984 | "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 985 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 986 | "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 987 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 988 | ] 989 | 990 | [[package]] 991 | name = "rusttype" 992 | version = "0.4.3" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | dependencies = [ 995 | "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "ordered-float 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 997 | "stb_truetype 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 998 | ] 999 | 1000 | [[package]] 1001 | name = "ryu" 1002 | version = "0.2.7" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | 1005 | [[package]] 1006 | name = "safemem" 1007 | version = "0.3.0" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | 1010 | [[package]] 1011 | name = "same-file" 1012 | version = "1.0.4" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | dependencies = [ 1015 | "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "schannel" 1020 | version = "0.1.14" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | dependencies = [ 1023 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1024 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "scopeguard" 1029 | version = "0.1.2" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | 1032 | [[package]] 1033 | name = "semver" 1034 | version = "0.9.0" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | dependencies = [ 1037 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1038 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "semver-parser" 1043 | version = "0.7.0" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | 1046 | [[package]] 1047 | name = "serde" 1048 | version = "1.0.82" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | 1051 | [[package]] 1052 | name = "serde_derive" 1053 | version = "1.0.27" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | dependencies = [ 1056 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1057 | "serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", 1058 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 1059 | ] 1060 | 1061 | [[package]] 1062 | name = "serde_derive_internals" 1063 | version = "0.19.0" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | dependencies = [ 1066 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 1067 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 1068 | ] 1069 | 1070 | [[package]] 1071 | name = "serde_ignored" 1072 | version = "0.0.4" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | dependencies = [ 1075 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "serde_json" 1080 | version = "1.0.33" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | dependencies = [ 1083 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1084 | "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1085 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "shell-escape" 1090 | version = "0.1.4" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | 1093 | [[package]] 1094 | name = "socket2" 1095 | version = "0.3.8" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | dependencies = [ 1098 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1099 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "stb_truetype" 1106 | version = "0.2.5" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | dependencies = [ 1109 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "strsim" 1114 | version = "0.7.0" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | 1117 | [[package]] 1118 | name = "syn" 1119 | version = "0.11.11" 1120 | source = "registry+https://github.com/rust-lang/crates.io-index" 1121 | dependencies = [ 1122 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1123 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 1124 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1125 | ] 1126 | 1127 | [[package]] 1128 | name = "syn" 1129 | version = "0.15.24" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | dependencies = [ 1132 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1133 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1134 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "synom" 1139 | version = "0.11.3" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | dependencies = [ 1142 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "synstructure" 1147 | version = "0.10.1" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | dependencies = [ 1150 | "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", 1152 | "syn 0.15.24 (registry+https://github.com/rust-lang/crates.io-index)", 1153 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "tar" 1158 | version = "0.4.20" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | dependencies = [ 1161 | "filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1162 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 1163 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "tempfile" 1168 | version = "3.0.5" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | dependencies = [ 1171 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1172 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 1173 | "rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1174 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 1175 | "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1176 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "termcolor" 1181 | version = "1.0.4" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | dependencies = [ 1184 | "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "termion" 1189 | version = "1.5.1" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | dependencies = [ 1192 | "libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)", 1193 | "redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1195 | ] 1196 | 1197 | [[package]] 1198 | name = "textwrap" 1199 | version = "0.10.0" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | dependencies = [ 1202 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "thread_local" 1207 | version = "0.3.6" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | dependencies = [ 1210 | "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "toml" 1215 | version = "0.4.5" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | dependencies = [ 1218 | "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", 1219 | ] 1220 | 1221 | [[package]] 1222 | name = "ucd-util" 1223 | version = "0.1.3" 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" 1225 | 1226 | [[package]] 1227 | name = "unicode-bidi" 1228 | version = "0.3.4" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | dependencies = [ 1231 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "unicode-normalization" 1236 | version = "0.1.5" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | 1239 | [[package]] 1240 | name = "unicode-width" 1241 | version = "0.1.5" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | 1244 | [[package]] 1245 | name = "unicode-xid" 1246 | version = "0.0.4" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | 1249 | [[package]] 1250 | name = "unicode-xid" 1251 | version = "0.1.0" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | 1254 | [[package]] 1255 | name = "unreachable" 1256 | version = "1.0.0" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | dependencies = [ 1259 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "url" 1264 | version = "1.6.0" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | dependencies = [ 1267 | "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1268 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | ] 1271 | 1272 | [[package]] 1273 | name = "userenv-sys" 1274 | version = "0.2.0" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | dependencies = [ 1277 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1278 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "utf8-ranges" 1283 | version = "1.0.2" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | 1286 | [[package]] 1287 | name = "vcpkg" 1288 | version = "0.2.2" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | 1291 | [[package]] 1292 | name = "vec_map" 1293 | version = "0.8.1" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | 1296 | [[package]] 1297 | name = "version_check" 1298 | version = "0.1.5" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | 1301 | [[package]] 1302 | name = "void" 1303 | version = "1.0.2" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | 1306 | [[package]] 1307 | name = "walkdir" 1308 | version = "2.2.7" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | dependencies = [ 1311 | "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1312 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1313 | "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "winapi" 1318 | version = "0.2.8" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | 1321 | [[package]] 1322 | name = "winapi" 1323 | version = "0.3.6" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | dependencies = [ 1326 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1327 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1328 | ] 1329 | 1330 | [[package]] 1331 | name = "winapi-build" 1332 | version = "0.1.1" 1333 | source = "registry+https://github.com/rust-lang/crates.io-index" 1334 | 1335 | [[package]] 1336 | name = "winapi-i686-pc-windows-gnu" 1337 | version = "0.4.0" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | 1340 | [[package]] 1341 | name = "winapi-util" 1342 | version = "0.1.1" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | dependencies = [ 1345 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1346 | ] 1347 | 1348 | [[package]] 1349 | name = "winapi-x86_64-pc-windows-gnu" 1350 | version = "0.4.0" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | 1353 | [[package]] 1354 | name = "wincolor" 1355 | version = "1.0.1" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | dependencies = [ 1358 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1359 | "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1360 | ] 1361 | 1362 | [metadata] 1363 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" 1364 | "checksum advapi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a" 1365 | "checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e" 1366 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1367 | "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" 1368 | "checksum atty 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8352656fd42c30a0c3c89d26dea01e3b77c0ab2af18230835c15e2e13cd51859" 1369 | "checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727" 1370 | "checksum backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8709cc7ec06f6f0ae6c2c7e12f6ed41540781f72b488d83734978295ceae182e" 1371 | "checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" 1372 | "checksum badge 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "86b8a2fe627436b90f6a027fa33300a55f88fce4426ea57bf954912a6db99604" 1373 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 1374 | "checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" 1375 | "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" 1376 | "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" 1377 | "checksum bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "716960a18f978640f25101b5cbf1c6f6b0d3192fab36a2d98ca96f0ecbe41010" 1378 | "checksum cargo 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "399c966265f89b62ed12f662f51e7402c58820c86f9f1d3a9ee59a689c787d76" 1379 | "checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749" 1380 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" 1381 | "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" 1382 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1383 | "checksum commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007" 1384 | "checksum commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2" 1385 | "checksum core-foundation 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e2640d6d0bf22e82bed1b73c6aef8d5dd31e5abe6666c57e6d45e2649f4f887" 1386 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1387 | "checksum crates-io 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fe7a6ac23bd61c0d741650a064d243bffed8c2dce3d51df28b9b64740ed1ea88" 1388 | "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" 1389 | "checksum crc32fast 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e91d5240c6975ef33aeb5f148f35275c25eda8e8a5f95abe421978b05b8bf192" 1390 | "checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19" 1391 | "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" 1392 | "checksum crypto-hash 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "20ff87d28defc77c9980a5b81cae1a33c791dd0ead8af0cee0833eb98c8305b9" 1393 | "checksum curl 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = "c7c9d851c825e0c033979d4516c9173bc19a78a96eb4d6ae51d4045440eafa16" 1394 | "checksum curl-sys 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ca79238a79fb294be6173b4057c95b22a718c94c4e38475d5faa82b8383f3502" 1395 | "checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" 1396 | "checksum docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db2906c2579b5b7207fc1e328796a9a8835dc44e22dbe8e460b1d636f9a7b225" 1397 | "checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b" 1398 | "checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38" 1399 | "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" 1400 | "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" 1401 | "checksum filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a2df5c1a8c4be27e7707789dc42ae65976e60b394afd293d1419ab915833e646" 1402 | "checksum flate2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2291c165c8e703ee54ef3055ad6188e3d51108e2ded18e9f2476e774fc5ad3d4" 1403 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1404 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1405 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1406 | "checksum fs2 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866" 1407 | "checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674" 1408 | "checksum fuchsia-zircon 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bd510087c325af53ba24f3be8f1c081b0982319adcb8b03cad764512923ccc19" 1409 | "checksum fuchsia-zircon-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "08b3a6f13ad6b96572b53ce7af74543132f1a7055ccceb6d073dd36c54481859" 1410 | "checksum fwdansi 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "34dd4c507af68d37ffef962063dfa1944ce0dd4d5b82043dbab1dabe088610c3" 1411 | "checksum git2 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "591f8be1674b421644b6c030969520bc3fa12114d2eb467471982ed3e9584e71" 1412 | "checksum git2-curl 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0173e317f8ba21f3fff0f71549fead5e42e67961dbd402bf69f42775f3cc78b4" 1413 | "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" 1414 | "checksum globset 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8e49edbcc9c7fc5beb8c0a54e7319ff8bed353a2b55e85811c6281188c2a6c84" 1415 | "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" 1416 | "checksum home 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f25ae61099d8f3fee8b483df0bd4ecccf4b2731897aad40d50eca1b641fe6db" 1417 | "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" 1418 | "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" 1419 | "checksum ignore 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3e9faa7c84064f07b40da27044af629f578bc7994b650d3e458d0c29183c1d91" 1420 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" 1421 | "checksum jobserver 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "dd80e58f77e0cdea53ba96acc5e04479e5ffc5d869626a6beafe50fed867eace" 1422 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1423 | "checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" 1424 | "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" 1425 | "checksum libc 0.2.46 (registry+https://github.com/rust-lang/crates.io-index)" = "023a4cd09b2ff695f9734c1934145a315594b7986398496841c7031a5a1bbdbd" 1426 | "checksum libgit2-sys 0.7.11 (registry+https://github.com/rust-lang/crates.io-index)" = "48441cb35dc255da8ae72825689a95368bf510659ae1ad55dc4aa88cb1789bf1" 1427 | "checksum libnghttp2-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d75d7966bda4730b722d1eab8e668df445368a24394bae9fc1e8dc0ab3dbe4f4" 1428 | "checksum libssh2-sys 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "126a1f4078368b163bfdee65fbab072af08a1b374a5551b21e87ade27b1fbf9d" 1429 | "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" 1430 | "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" 1431 | "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" 1432 | "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" 1433 | "checksum memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db4c41318937f6e76648f42826b1d9ade5c09cafb5aef7e351240a70f39206e9" 1434 | "checksum miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0300eafb20369952951699b68243ab4334f4b10a88f411c221d444b36c40e649" 1435 | "checksum miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c" 1436 | "checksum miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e" 1437 | "checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226" 1438 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1439 | "checksum num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cacfcab5eb48250ee7d0c7896b51a2c5eec99c1feea5f32025635f5ae4b00070" 1440 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1441 | "checksum opener 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "04b1d6b086d9b3009550f9b6f81b10ad9428cf14f404b8e1a3a06f6f012c8ec9" 1442 | "checksum openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ec7bd7ca4cce6dbdc77e7c1230682740d307d1218a87fb0349a571272be749f9" 1443 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1444 | "checksum openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)" = "1bb974e77de925ef426b6bc82fce15fd45bdcbeb5728bffcfc7cdeeb7ce1c2d6" 1445 | "checksum ordered-float 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7eb5259643245d3f292c7a146b2df53bba24d7eab159410e648eb73dc164669d" 1446 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1447 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" 1448 | "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" 1449 | "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" 1450 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" 1451 | "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" 1452 | "checksum rand 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3906503e80ac6cbcacb2c2973fa8e473f24d7e2747c8c92bb230c2441cad96b5" 1453 | "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1454 | "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" 1455 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1456 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1457 | "checksum rand_os 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f46fbd5550acf75b0c2730f5dd1873751daf9beb8f11b44027778fae50d7feca" 1458 | "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" 1459 | "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1460 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1461 | "checksum redox_syscall 0.1.50 (registry+https://github.com/rust-lang/crates.io-index)" = "52ee9a534dc1301776eff45b4fa92d2c39b1d8c3d3357e6eb593e0d795506fc2" 1462 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1463 | "checksum regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "744554e01ccbd98fff8c457c3b092cd67af62a555a43bfe97ae8a0451f7799fa" 1464 | "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" 1465 | "checksum regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" 1466 | "checksum regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4e47a2ed29da7a9e1960e1639e7a982e6edc6d49be308a3b02daf511504a16d1" 1467 | "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" 1468 | "checksum rustc-demangle 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "aee45432acc62f7b9a108cc054142dac51f979e69e71ddce7d6fc7adf29e817e" 1469 | "checksum rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc71d2faa173b74b232dedc235e3ee1696581bb132fc116fa3626d6151a1a8fb" 1470 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1471 | "checksum rustfix 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "af7c21531a91512a4a51b490be6ba1c8eff34fdda0dc5bf87dc28d86748aac56" 1472 | "checksum rusttype 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "11ff03da02f6d340bbee5ec55eed03ff9abd6ea013b93bc7c35973cc28f65999" 1473 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" 1474 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" 1475 | "checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" 1476 | "checksum schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0e1a231dc10abf6749cfa5d7767f25888d484201accbd919b66ab5413c502d56" 1477 | "checksum scopeguard 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57" 1478 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1479 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1480 | "checksum serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)" = "6fa52f19aee12441d5ad11c9a00459122bd8f98707cadf9778c540674f1935b6" 1481 | "checksum serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ba7591cfe93755e89eeecdbcc668885624829b020050e6aec99c2a03bd3fd0" 1482 | "checksum serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6e03f1c9530c3fb0a0a5c9b826bdd9246a5921ae995d75f512ac917fc4dd55b5" 1483 | "checksum serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142" 1484 | "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811" 1485 | "checksum shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "170a13e64f2a51b77a45702ba77287f5c6829375b04a69cf2222acd17d0cfab9" 1486 | "checksum socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c4d11a52082057d87cb5caa31ad812f4504b97ab44732cd8359df2e9ff9f48e7" 1487 | "checksum stb_truetype 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "71a7d260b43b6129a22dc341be18a231044ca67a48b7e32625f380cc5ec9ad70" 1488 | "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" 1489 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" 1490 | "checksum syn 0.15.24 (registry+https://github.com/rust-lang/crates.io-index)" = "734ecc29cd36e8123850d9bf21dfd62ef8300aaa8f879aabaa899721808be37c" 1491 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" 1492 | "checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" 1493 | "checksum tar 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "a303ba60a099fcd2aaa646b14d2724591a96a75283e4b7ed3d1a1658909d9ae2" 1494 | "checksum tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7e91405c14320e5c79b3d148e1c86f40749a36e490642202a31689cb1a3452b2" 1495 | "checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" 1496 | "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" 1497 | "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" 1498 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1499 | "checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e" 1500 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" 1501 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1502 | "checksum unicode-normalization 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f" 1503 | "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" 1504 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" 1505 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1506 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1507 | "checksum url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa35e768d4daf1d85733418a49fb42e10d7f633e394fccab4ab7aba897053fe2" 1508 | "checksum userenv-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d28ea36bbd9192d75bd9fa9b39f96ddb986eaee824adae5d53b6e51919b2f3" 1509 | "checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" 1510 | "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b" 1511 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1512 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1513 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1514 | "checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1" 1515 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1516 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" 1517 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1518 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1519 | "checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" 1520 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1521 | "checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" 1522 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-travis" 3 | version = "0.0.11" 4 | authors = ["roblabla "] 5 | description = "Run coverage, upload docs, and more on travis." 6 | license = "MIT" 7 | 8 | repository = "https://github.com/roblabla/cargo-travis" 9 | readme = "README.md" 10 | 11 | keywords = ["cargo", "cargo-subcommand", "travis", "coverage", "coveralls"] 12 | 13 | 14 | [dependencies] 15 | badge = "0.2" 16 | cargo = "0.32" 17 | docopt = "1.0" 18 | env_logger = "0.4" 19 | failure = "0.1" 20 | fs_extra = "1.1" 21 | log = "0.3" 22 | serde = "1.0" 23 | serde_derive = "1.0" 24 | serde_json = "1.0.33" 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cargo Travis 2 | 3 | Record total test coverage across in-crate and external tests, and upload to [coveralls.io](https://coveralls.io). 4 | 5 | The goal is to eventually have feature parity with the assumed-dead [travis-cargo](https://github.com/huonw/travis-cargo) 6 | 7 | To avoid problems like [this one](https://github.com/huonw/travis-cargo/pull/55), we link against the cargo crate directly and use its low-level operations. This should be much more reliable than the stdout capture approach. On the other hand, the cargo crate isn't stable, leading to things like [this](https://github.com/roblabla/cargo-travis/issues/1). 8 | 9 | ## Installation 10 | 11 | ``` 12 | cargo install cargo-travis 13 | export PATH=$HOME/.cargo/bin:$PATH 14 | ``` 15 | 16 | ## Example 17 | 18 | A possible `travis.yml` configuration is: 19 | 20 | ```yaml 21 | sudo: required 22 | language: rust 23 | 24 | # Cache cargo symbols for faster build 25 | cache: cargo 26 | 27 | # Dependencies of kcov, used by coverage 28 | addons: 29 | apt: 30 | packages: 31 | - libcurl4-openssl-dev 32 | - libelf-dev 33 | - libdw-dev 34 | - binutils-dev 35 | - cmake # also required for cargo-update 36 | sources: 37 | - kalakris-cmake 38 | 39 | # run builds for all the trains (and more) 40 | rust: 41 | - nightly 42 | - beta 43 | # check it compiles on the latest stable compiler 44 | - stable 45 | # and the first stable one (this should be bumped as the minimum 46 | # Rust version required changes) 47 | - 1.0.0 48 | 49 | before_script: 50 | - export PATH=$HOME/.cargo/bin:$PATH 51 | - cargo install cargo-update || echo "cargo-update already installed" 52 | - cargo install cargo-travis || echo "cargo-travis already installed" 53 | - cargo install-update -a # update outdated cached binaries 54 | 55 | # the main build 56 | script: 57 | - | 58 | cargo build && 59 | cargo test && 60 | cargo bench && 61 | cargo doc 62 | 63 | after_success: 64 | # measure code coverage and upload to coveralls.io 65 | - cargo coveralls 66 | # upload documentation to github.io (gh-pages branch) 67 | - cargo doc-upload 68 | ``` 69 | 70 | See the [cargo-update repository](https://github.com/nabijaczleweli/cargo-update) for details on `cargo-update`. 71 | 72 | Note that `sudo: required` is necessary to use kcov. See [this issue](https://github.com/travis-ci/travis-ci/issues/9061) for more information. 73 | 74 | ## Help 75 | 76 | ### `coverage` 77 | 78 | ``` 79 | Record coverage of `cargo test`, this runs all binaries that `cargo test` runs 80 | but not doc tests. The results of all tests are merged into a single directory 81 | 82 | Usage: 83 | cargo coverage [options] [--] [...] 84 | 85 | Coverage Options: 86 | -V, --version Print version info and exit 87 | -m PATH, --merge-into PATH Path to the directory to put the final merged 88 | kcov result into [default: target/kcov] 89 | --exclude-pattern PATTERN Comma-separated path patterns to exclude from the report 90 | --kcov-build-location PATH Path to the directory in which to build kcov (into a new folder) 91 | [default: target] -- kcov ends up in target/kcov-master 92 | 93 | Test Options: 94 | -h, --help Print this message 95 | --lib Test only this package's library 96 | --bin NAME Test only the specified binary 97 | --bins Test all binaries 98 | --test NAME Test only the specified integration test target 99 | --tests Test all tests 100 | --bench NAME ... Test only the specified bench target 101 | --benches Test all benches 102 | --all-targets Test all targets (default) 103 | -p SPEC, --package SPEC ... Package to run tests for 104 | --all Test all packages in the workspace 105 | --exclude SPEC ... Exclude packages from the test 106 | -j N, --jobs N Number of parallel jobs, defaults to # of CPUs 107 | --release Build artifacts in release mode, with optimizations 108 | --features FEATURES Space-separated list of features to also build 109 | --all-features Build all available features 110 | --no-default-features Do not build the `default` feature 111 | --target TRIPLE Build for the target triple 112 | --manifest-path PATH Path to the manifest to build tests for 113 | -v, --verbose ... Use verbose output 114 | -q, --quiet No output printed to stdout 115 | --color WHEN Coloring: auto, always, never 116 | --no-fail-fast Run all tests regardless of failure 117 | --frozen Require Cargo.lock and cache are up to date 118 | --locked Require Cargo.lock is up to date 119 | -Z FLAG ... Unstable (nightly-only) flags to Cargo 120 | ``` 121 | 122 | ### `coveralls` 123 | 124 | ``` 125 | Record coverage of `cargo test`, this runs all binaries that `cargo test` runs 126 | but not doc tests. The results of all tests are sent to coveralls.io 127 | 128 | Usage: 129 | cargo coveralls [options] [--] [...] 130 | 131 | Coveralls Options: 132 | -V, --version Print version info and exit 133 | --exclude-pattern PATTERN Comma-separated path patterns to exclude from the report 134 | --kcov-build-location PATH Path to the directory in which to build kcov (into a new folder) 135 | [default: target] -- kcov ends up in target/kcov-master 136 | 137 | Test Options: 138 | -h, --help Print this message 139 | --lib Test only this package's library 140 | --bin NAME Test only the specified binary 141 | --bins Test all binaries 142 | --test NAME Test only the specified integration test target 143 | --tests Test all tests 144 | --bench NAME ... Test only the specified bench target 145 | --benches Test all benches 146 | --all-targets Test all targets (default) 147 | -p SPEC, --package SPEC ... Package to run tests for 148 | --all Test all packages in the workspace 149 | --exclude SPEC ... Exclude packages from the test 150 | -j N, --jobs N Number of parallel jobs, defaults to # of CPUs 151 | --release Build artifacts in release mode, with optimizations 152 | --features FEATURES Space-separated list of features to also build 153 | --all-features Build all available features 154 | --no-default-features Do not build the `default` feature 155 | --target TRIPLE Build for the target triple 156 | --manifest-path PATH Path to the manifest to build tests for 157 | -v, --verbose ... Use verbose output 158 | -q, --quiet No output printed to stdout 159 | --color WHEN Coloring: auto, always, never 160 | --no-fail-fast Run all tests regardless of failure 161 | --frozen Require Cargo.lock and cache are up to date 162 | --locked Require Cargo.lock is up to date 163 | -Z FLAG ... Unstable (nightly-only) flags to Cargo 164 | ``` 165 | 166 | ### `doc-upload` 167 | 168 | ``` 169 | Upload built rustdoc documentation to GitHub pages. 170 | 171 | Usage: 172 | cargo doc-upload [options] [--] [...] 173 | 174 | Options: 175 | -V, --version Print version info and exit 176 | --branch NAME ... Only publish documentation for these branches 177 | Defaults to only the `master` branch 178 | --token TOKEN Use the specified GitHub token to publish documentation 179 | If unspecified, checks $GH_TOKEN then attempts to use SSH endpoint 180 | --message MESSAGE The message to include in the commit 181 | --deploy BRANCH Deploy to the given branch [default: gh-pages] 182 | --path PATH Upload the documentation to the specified remote path [default: /$TRAVIS_BRANCH/] 183 | --clobber-index Delete `index.html` from repo 184 | --target TRIPLE Fetch the documentation for the target triple 185 | ``` 186 | 187 | The branch used for doc pushes _may_ be protected, as force-push is not used. Documentation is maintained per-branch 188 | in subdirectories, so `user.github.io/repo/PATH` is where the master branch's documentation lives. `PATH` is by 189 | default the name of the branch, you can overwrite that behavior by passing a custom path into `--path`. A badge is generated 190 | too, like [docs.rs](https://docs.rs/about), that is located at `user.github.io/repo/master/badge.svg`. Additionally a 191 | `badge.json` is generated, that corresponds to [shields.io's endpoint](https://shields.io/endpoint). By default only 192 | master has documentation built, but you can build other branches' docs by passing any number of `--branch NAME` 193 | arguments (the presence of which _will_ disable the default master branch build). Documentation is deployed from 194 | `target/doc`, the default target for `rustdoc`, so make sure to run `cargo doc` before `cargo doc-upload`, and you can 195 | build up whatever directory structure you want in there if you want to document with alternate configurations. If you need 196 | the documentation from a non-default target, you can pass the target triple into `--target`, which will then fetch it from 197 | `target/TRIPLE/doc` instead. 198 | 199 | We suggest setting up a `index.html` in the root directory of documentation to redirect to the actual content. 200 | For this purpose we don't touch the root of the `gh-pages` branch (except to create the branch folders) and purposefully 201 | ignore `index.html` in the branch folders. You can opt out of this behaviour by passing `--clobber-index`. An `index.html` 202 | file might be created by using `cargo rustdoc -- -Z unstable-options --enable-index-page` (works only in rust nightly) or 203 | look like this: 204 | 205 | ```html 206 | 207 | Redirect 208 | ``` 209 | 210 | This requires Travis to have write-access to your repository. The simplest (and reasonably secure) way to achieve this 211 | is to create a [Personal API Access Token](https://github.com/blog/1509-personal-api-tokens) with `public_repo` scope. 212 | Then on travis, [define the secure environment variable][Travis envvar] `GH_TOKEN` with the value being the new token. 213 | 214 | [Travis envvar]: 215 | [Travis Pro deploy]: 216 | [Travis encrypt-file]: 217 | 218 | This gives any script running on Travis permission to read/write public repositories that you can if they use it 219 | (on non-PR builds only, though keep in mind that bors staging/trying is not a PR build), so be aware of that. 220 | This _does_ work for organization repositories as well, so long as the user's token has permission to write to it. 221 | 222 | If you want more security, you can use a [deploy key](https://github.com/blog/2024-read-only-deploy-keys) for 223 | repo-specific access. If you do not provide a token, the script will use SSH to clone from/write to the repository. 224 | [Travis Pro handles the deploy key automatically][Travis Pro deploy], and regular users can use [Travis encrypt-file] 225 | plus a script to move the private key to the correct location. 226 | -------------------------------------------------------------------------------- /src/bin/cargo-coverage.rs: -------------------------------------------------------------------------------- 1 | extern crate cargo; 2 | extern crate cargo_travis; 3 | extern crate docopt; 4 | extern crate env_logger; 5 | #[macro_use] 6 | extern crate failure; 7 | #[macro_use] 8 | extern crate serde_derive; 9 | #[macro_use] 10 | extern crate log; 11 | 12 | use std::env; 13 | use std::path::Path; 14 | use cargo_travis::{CoverageOptions, build_kcov}; 15 | use cargo::core::{compiler::BuildConfig, Workspace}; 16 | use cargo::util::{Config, CliResult, CliError}; 17 | use cargo::ops::{Packages}; 18 | use docopt::Docopt; 19 | use failure::err_msg; 20 | 21 | pub const USAGE: &'static str = " 22 | Record coverage of `cargo test`, this runs all binaries that `cargo test` runs 23 | but not doc tests. The results of all tests are merged into a single directory 24 | 25 | Usage: 26 | cargo coverage [options] [--] [...] 27 | 28 | Coverage Options: 29 | -V, --version Print version info and exit 30 | -m PATH, --merge-into PATH Path to the directory to put the final merged 31 | kcov result into [default: target/kcov] 32 | --exclude-pattern PATTERN Comma-separated path patterns to exclude from the report 33 | --kcov-build-location PATH Path to the directory in which to build kcov (into a new folder) 34 | [default: target] -- kcov ends up in target/kcov-master 35 | 36 | Test Options: 37 | -h, --help Print this message 38 | --lib Test only this package's library 39 | --bin NAME Test only the specified binary 40 | --bins Test all binaries 41 | --test NAME Test only the specified integration test target 42 | --tests Test all tests 43 | --bench NAME ... Test only the specified bench target 44 | --benches Test all benches 45 | --all-targets Test all targets (default) 46 | -p SPEC, --package SPEC ... Package to run tests for 47 | --all Test all packages in the workspace 48 | --exclude SPEC ... Exclude packages from the test 49 | -j N, --jobs N Number of parallel jobs, defaults to # of CPUs 50 | --release Build artifacts in release mode, with optimizations 51 | --features FEATURES Space-separated list of features to also build 52 | --all-features Build all available features 53 | --no-default-features Do not build the `default` feature 54 | --target TRIPLE Build for the target triple 55 | --manifest-path PATH Path to the manifest to build tests for 56 | -v, --verbose ... Use verbose output 57 | -q, --quiet No output printed to stdout 58 | --color WHEN Coloring: auto, always, never 59 | --no-fail-fast Run all tests regardless of failure 60 | --frozen Require Cargo.lock and cache are up to date 61 | --locked Require Cargo.lock is up to date 62 | -Z FLAG ... Unstable (nightly-only) flags to Cargo 63 | "; 64 | 65 | 66 | #[derive(Deserialize)] 67 | pub struct Options { 68 | arg_args: Vec, 69 | flag_version: bool, 70 | flag_features: Vec, 71 | flag_all_features: bool, 72 | flag_jobs: Option, 73 | flag_manifest_path: Option, 74 | flag_no_default_features: bool, 75 | flag_package: Vec, 76 | flag_target: Option, 77 | flag_lib: bool, 78 | flag_bin: Vec, 79 | flag_bins: bool, 80 | flag_test: Vec, 81 | flag_tests: bool, 82 | flag_bench: Vec, 83 | flag_benches: bool, 84 | flag_all_targets: bool, 85 | flag_verbose: u32, 86 | flag_quiet: Option, 87 | flag_color: Option, 88 | flag_release: bool, 89 | flag_no_fail_fast: bool, 90 | flag_frozen: bool, 91 | flag_locked: bool, 92 | flag_all: bool, 93 | flag_exclude: Vec, 94 | #[serde(rename = "flag_Z")] 95 | flag_z: Vec, 96 | 97 | // cargo-coverage flags 98 | flag_exclude_pattern: Option, 99 | flag_merge_into: String, 100 | flag_kcov_build_location: String, 101 | } 102 | 103 | fn execute(options: Options, config: &mut Config) -> CliResult { 104 | debug!("executing; cmd=cargo-coverage; args={:?}", 105 | env::args().collect::>()); 106 | 107 | if options.flag_version { 108 | println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")); 109 | return Ok(()); 110 | } 111 | 112 | let kcov_path = build_kcov(options.flag_kcov_build_location); 113 | // TODO: build_kcov() - Might be a good idea to consider linking kcov as a 114 | // lib instead ? 115 | try!(config.configure(options.flag_verbose, 116 | options.flag_quiet, 117 | &options.flag_color, 118 | options.flag_frozen, 119 | options.flag_locked, 120 | &None, 121 | &options.flag_z)); 122 | 123 | let ws = if let Some(path) = options.flag_manifest_path { 124 | try!(Workspace::new(&Path::new(&path), config)) 125 | } else { 126 | let root = try!(cargo::util::important_paths::find_root_manifest_for_wd(config.cwd())); 127 | try!(Workspace::new(&root, config)) 128 | }; 129 | 130 | let empty = vec![]; 131 | let (mode, filter) = (cargo::core::compiler::CompileMode::Test, cargo::ops::CompileFilter::new( 132 | options.flag_lib, 133 | options.flag_bin, 134 | options.flag_bins, 135 | options.flag_test, 136 | options.flag_tests, 137 | empty, 138 | false, 139 | options.flag_bench, 140 | options.flag_benches, 141 | options.flag_all_targets 142 | )); 143 | 144 | let spec = try!(Packages::from_flags(options.flag_all, options.flag_exclude, options.flag_package)); 145 | 146 | // TODO: Force compilation target == host, kcov 147 | let mut build_config = try!(BuildConfig::new(config, options.flag_jobs, &options.flag_target, mode)); 148 | build_config.release = options.flag_release; 149 | 150 | let ops = CoverageOptions { 151 | merge_dir: Path::new(&options.flag_merge_into), 152 | merge_args: vec![], 153 | no_fail_fast: options.flag_no_fail_fast, 154 | kcov_path: &kcov_path, 155 | exclude_pattern: options.flag_exclude_pattern, 156 | compile_opts: cargo::ops::CompileOptions { 157 | config: config, 158 | build_config: build_config, 159 | all_features: options.flag_all_features, 160 | features: options.flag_features, 161 | no_default_features: options.flag_no_default_features, 162 | spec: spec, 163 | filter: filter, 164 | target_rustdoc_args: None, 165 | target_rustc_args: None, 166 | local_rustdoc_args: None, 167 | export_dir: None, 168 | }, 169 | }; 170 | 171 | let err = try!(cargo_travis::run_coverage(&ws, &ops, &options.arg_args)); 172 | 173 | match err { 174 | None => Ok(()), 175 | Some(err) => { 176 | Err(match err.exit.as_ref().and_then(|e| e.code()) { 177 | Some(i) => CliError::new(err_msg("test failed"), i), 178 | None => CliError::new(err.into(), 101) 179 | }) 180 | } 181 | } 182 | } 183 | 184 | fn main() { 185 | env_logger::init().unwrap(); 186 | let mut config = match Config::default() { 187 | Ok(cfg) => cfg, 188 | Err(e) => { 189 | let mut shell = cargo::core::Shell::new(); 190 | cargo::exit_with_error(e.into(), &mut shell) 191 | } 192 | }; 193 | let result = (|| { 194 | let args: Vec<_> = try!(env::args_os() 195 | .map(|s| { 196 | s.into_string().map_err(|s| { 197 | format_err!("invalid unicode in argument: {:?}", s) 198 | }) 199 | }) 200 | .collect()); 201 | 202 | let docopt = Docopt::new(USAGE).unwrap() 203 | .argv(args.iter().map(|s| &s[..])) 204 | .help(true); 205 | 206 | let flags = docopt.deserialize().map_err(|e| { 207 | let code = if e.fatal() {1} else {0}; 208 | CliError::new(e.into(), code) 209 | })?; 210 | 211 | execute(flags, &mut config) 212 | })(); 213 | match result { 214 | Err(e) => cargo::exit_with_error(e, &mut *config.shell()), 215 | Ok(()) => {} 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /src/bin/cargo-coveralls.rs: -------------------------------------------------------------------------------- 1 | extern crate cargo; 2 | extern crate cargo_travis; 3 | extern crate docopt; 4 | extern crate env_logger; 5 | #[macro_use] 6 | extern crate failure; 7 | #[macro_use] 8 | extern crate serde_derive; 9 | #[macro_use] 10 | extern crate log; 11 | 12 | use std::env; 13 | use std::path::Path; 14 | use cargo_travis::{CoverageOptions, build_kcov}; 15 | use cargo::core::{compiler::BuildConfig, Workspace}; 16 | use cargo::util::{Config, CliResult, CliError}; 17 | use cargo::ops::{Packages}; 18 | use docopt::Docopt; 19 | use failure::err_msg; 20 | 21 | pub const USAGE: &'static str = " 22 | Record coverage of `cargo test`, this runs all binaries that `cargo test` runs 23 | but not doc tests. The results of all tests are sent to coveralls.io 24 | 25 | Usage: 26 | cargo coveralls [options] [--] [...] 27 | 28 | Coveralls Options: 29 | -V, --version Print version info and exit 30 | --exclude-pattern PATTERN Comma-separated path patterns to exclude from the report 31 | --kcov-build-location PATH Path to the directory in which to build kcov (into a new folder) 32 | [default: target] -- kcov ends up in target/kcov-master 33 | 34 | Test Options: 35 | -h, --help Print this message 36 | --lib Test only this package's library 37 | --bin NAME Test only the specified binary 38 | --bins Test all binaries 39 | --test NAME Test only the specified integration test target 40 | --tests Test all tests 41 | --bench NAME ... Test only the specified bench target 42 | --benches Test all benches 43 | --all-targets Test all targets (default) 44 | -p SPEC, --package SPEC ... Package to run tests for 45 | --all Test all packages in the workspace 46 | --exclude SPEC ... Exclude packages from the test 47 | -j N, --jobs N Number of parallel jobs, defaults to # of CPUs 48 | --release Build artifacts in release mode, with optimizations 49 | --features FEATURES Space-separated list of features to also build 50 | --all-features Build all available features 51 | --no-default-features Do not build the `default` feature 52 | --target TRIPLE Build for the target triple 53 | --manifest-path PATH Path to the manifest to build tests for 54 | -v, --verbose ... Use verbose output 55 | -q, --quiet No output printed to stdout 56 | --color WHEN Coloring: auto, always, never 57 | --no-fail-fast Run all tests regardless of failure 58 | --frozen Require Cargo.lock and cache are up to date 59 | --locked Require Cargo.lock is up to date 60 | -Z FLAG ... Unstable (nightly-only) flags to Cargo 61 | "; 62 | 63 | 64 | #[derive(Deserialize)] 65 | pub struct Options { 66 | arg_args: Vec, 67 | flag_version: bool, 68 | flag_features: Vec, 69 | flag_all_features: bool, 70 | flag_jobs: Option, 71 | flag_manifest_path: Option, 72 | flag_no_default_features: bool, 73 | flag_package: Vec, 74 | flag_target: Option, 75 | flag_lib: bool, 76 | flag_bin: Vec, 77 | flag_bins: bool, 78 | flag_test: Vec, 79 | flag_tests: bool, 80 | flag_bench: Vec, 81 | flag_benches: bool, 82 | flag_all_targets: bool, 83 | flag_verbose: u32, 84 | flag_quiet: Option, 85 | flag_color: Option, 86 | flag_release: bool, 87 | flag_no_fail_fast: bool, 88 | flag_frozen: bool, 89 | flag_locked: bool, 90 | flag_all: bool, 91 | flag_exclude: Vec, 92 | #[serde(rename = "flag_Z")] 93 | flag_z: Vec, 94 | 95 | // cargo-coveralls flags 96 | flag_exclude_pattern: Option, 97 | flag_kcov_build_location: String, 98 | } 99 | 100 | fn execute(options: Options, config: &mut Config) -> CliResult { 101 | debug!("executing; cmd=cargo-coveralls; args={:?}", 102 | env::args().collect::>()); 103 | 104 | if options.flag_version { 105 | println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")); 106 | return Ok(()); 107 | } 108 | 109 | let kcov_path = build_kcov(options.flag_kcov_build_location); 110 | // TODO: build_kcov() - Might be a good idea to consider linking kcov as a 111 | // lib instead ? 112 | try!(config.configure(options.flag_verbose, 113 | options.flag_quiet, 114 | &options.flag_color, 115 | options.flag_frozen, 116 | options.flag_locked, 117 | &None, 118 | &options.flag_z)); 119 | 120 | let ws = if let Some(path) = options.flag_manifest_path { 121 | try!(Workspace::new(&Path::new(&path), config)) 122 | } else { 123 | let root = try!(cargo::util::important_paths::find_root_manifest_for_wd(config.cwd())); 124 | try!(Workspace::new(&root, config)) 125 | }; 126 | 127 | let empty = vec![]; 128 | let (mode, filter) = (cargo::core::compiler::CompileMode::Test, cargo::ops::CompileFilter::new( 129 | options.flag_lib, 130 | options.flag_bin, 131 | options.flag_bins, 132 | options.flag_test, 133 | options.flag_tests, 134 | empty, 135 | false, 136 | options.flag_bench, 137 | options.flag_benches, 138 | options.flag_all_targets 139 | )); 140 | 141 | let spec = try!(Packages::from_flags(options.flag_all, options.flag_exclude, options.flag_package)); 142 | 143 | // TODO: Force compilation target == host, kcov 144 | let mut build_config = try!(BuildConfig::new(config, options.flag_jobs, &options.flag_target, mode)); 145 | build_config.release = options.flag_release; 146 | 147 | let job_id = std::env::var_os("TRAVIS_JOB_ID") 148 | .expect("Environment variable TRAVIS_JOB_ID not found. This should be run from Travis"); 149 | 150 | let ops = CoverageOptions { 151 | merge_dir: Path::new("target/kcov"), 152 | merge_args: vec!["--coveralls-id".into(), job_id], 153 | no_fail_fast: options.flag_no_fail_fast, 154 | exclude_pattern: options.flag_exclude_pattern, 155 | kcov_path: &kcov_path, 156 | compile_opts: cargo::ops::CompileOptions { 157 | config: config, 158 | build_config: build_config, 159 | all_features: options.flag_all_features, 160 | features: options.flag_features, 161 | no_default_features: options.flag_no_default_features, 162 | spec: spec, 163 | filter: filter, 164 | target_rustdoc_args: None, 165 | target_rustc_args: None, 166 | local_rustdoc_args: None, 167 | export_dir: None, 168 | }, 169 | }; 170 | 171 | let err = try!(cargo_travis::run_coverage(&ws, &ops, &options.arg_args)); 172 | 173 | match err { 174 | None => Ok(()), 175 | Some(err) => { 176 | Err(match err.exit.as_ref().and_then(|e| e.code()) { 177 | Some(i) => CliError::new(err_msg("test failed"), i), 178 | None => CliError::new(err.into(), 101) 179 | }) 180 | } 181 | } 182 | } 183 | 184 | fn main() { 185 | env_logger::init().unwrap(); 186 | let mut config = match Config::default() { 187 | Ok(cfg) => cfg, 188 | Err(e) => { 189 | let mut shell = cargo::core::Shell::new(); 190 | cargo::exit_with_error(e.into(), &mut shell) 191 | } 192 | }; 193 | let result = (|| { 194 | let args: Vec<_> = try!(env::args_os() 195 | .map(|s| { 196 | s.into_string().map_err(|s| { 197 | format_err!("invalid unicode in argument: {:?}", s) 198 | }) 199 | }) 200 | .collect()); 201 | 202 | let docopt = Docopt::new(USAGE).unwrap() 203 | .argv(args.iter().map(|s| &s[..])) 204 | .help(true); 205 | 206 | let flags = docopt.deserialize().map_err(|e| { 207 | let code = if e.fatal() {1} else {0}; 208 | CliError::new(e.into(), code) 209 | })?; 210 | 211 | execute(flags, &mut config) 212 | })(); 213 | match result { 214 | Err(e) => cargo::exit_with_error(e, &mut *config.shell()), 215 | Ok(()) => {} 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /src/bin/cargo-doc-upload.rs: -------------------------------------------------------------------------------- 1 | extern crate cargo; 2 | extern crate cargo_travis; 3 | extern crate docopt; 4 | extern crate env_logger; 5 | #[macro_use] 6 | extern crate failure; 7 | #[macro_use] 8 | extern crate serde_derive; 9 | #[macro_use] 10 | extern crate log; 11 | 12 | use std::env; 13 | use std::path::{Path, PathBuf}; 14 | use cargo::util::{Config, CliResult, CliError}; 15 | use docopt::Docopt; 16 | use failure::err_msg; 17 | 18 | // Note about --path: we don't use the proper default syntax because the default 19 | // value depends on an env variable. 20 | pub const USAGE: &'static str = " 21 | Upload built rustdoc documentation to GitHub pages. 22 | 23 | Usage: 24 | cargo doc-upload [options] 25 | 26 | Options: 27 | -h, --help Print this message 28 | -V, --version Print version info and exit 29 | --branch NAME ... Only publish documentation for these branches 30 | Defaults to only the `master` branch 31 | --token TOKEN Use the specified GitHub token to publish documentation 32 | If unspecified, checks $GH_TOKEN then attempts to use SSH endpoint 33 | --message MESSAGE The message to include in the commit 34 | --deploy BRANCH Deploy to the given branch [default: gh-pages] 35 | --path PATH Upload the documentation to the specified remote path (defaults to $TRAVIS_BRANCH/) 36 | --clobber-index Delete `index.html` from repo 37 | --target TRIPLE Fetch the documentation for the target triple 38 | "; 39 | 40 | #[derive(Deserialize)] 41 | pub struct Options { 42 | flag_version: bool, 43 | flag_branch: Vec, 44 | flag_token: Option, 45 | flag_message: Option, 46 | flag_deploy: Option, 47 | flag_path: Option, 48 | flag_clobber_index: bool, 49 | flag_target: Option, 50 | } 51 | 52 | fn execute(options: Options, _: &Config) -> CliResult { 53 | debug!("executing; cmd=cargo-doc-upload; env={:?}", 54 | env::args().collect::>()); 55 | 56 | if options.flag_version { 57 | println!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")); 58 | return Ok(()); 59 | } 60 | 61 | let branches = if options.flag_branch.is_empty() { 62 | vec!["master".to_string()] 63 | } else { 64 | options.flag_branch 65 | }; 66 | 67 | let branch = env::var("TRAVIS_BRANCH").expect("$TRAVIS_BRANCH not set"); 68 | if !branches.contains(&branch) { 69 | println!("Skipping branch {}", branch); 70 | return Ok(()); 71 | } 72 | 73 | let pull_request = env::var("TRAVIS_PULL_REQUEST").expect("$TRAVIS_PULL_REQUEST not set"); 74 | if pull_request != "false" { 75 | println!("Skipping PR"); 76 | return Ok(()); 77 | } 78 | 79 | let path = options.flag_path.unwrap_or_else(|| branch.clone()); 80 | 81 | // TODO FEAT: Allow passing origin string 82 | let token = options.flag_token.or(env::var("GH_TOKEN").ok()); 83 | let slug = env::var("TRAVIS_REPO_SLUG").expect("$TRAVIS_REPO_SLUG not set"); 84 | let origin = if let Some(token) = token { 85 | format!("https://{}@github.com/{}.git", token, slug) 86 | } else { 87 | eprintln!("GitHub Personal Access Token was not provided in $GH_TOKEN or --token"); 88 | eprintln!("Falling back to using the SSH endpoint"); 89 | format!("git@github.com:{}.git", slug) 90 | }; 91 | 92 | let message = options.flag_message.unwrap_or("Automatic Travis documentation build".to_string()); 93 | let gh_pages = options.flag_deploy.unwrap_or("gh-pages".to_string()); 94 | let clobber_index = options.flag_clobber_index; 95 | 96 | let local_doc_path = options.flag_target 97 | .map(|v| Path::new("target").join(v).join("doc")) 98 | .unwrap_or(PathBuf::from("target/doc")); 99 | 100 | match cargo_travis::doc_upload(&message, &origin, &gh_pages, &path, &local_doc_path, clobber_index) { 101 | Ok(..) => Ok(()), 102 | Err((string, err)) => Err(CliError::new(err_msg(string), err)), 103 | } 104 | } 105 | 106 | fn main() { 107 | env_logger::init().unwrap(); 108 | let config = match Config::default() { 109 | Ok(cfg) => cfg, 110 | Err(e) => { 111 | let mut shell = cargo::core::Shell::new(); 112 | cargo::exit_with_error(e.into(), &mut shell) 113 | } 114 | }; 115 | let result = (|| { 116 | let args: Vec<_> = try!(env::args_os() 117 | .map(|s| { 118 | s.into_string().map_err(|s| { 119 | format_err!("invalid unicode in argument: {:?}", s) 120 | }) 121 | }) 122 | .collect()); 123 | 124 | let docopt = Docopt::new(USAGE).unwrap() 125 | .argv(args.iter().map(|s| &s[..])) 126 | .help(true); 127 | 128 | let flags = docopt.deserialize().map_err(|e| { 129 | let code = if e.fatal() {1} else {0}; 130 | CliError::new(e.into(), code) 131 | })?; 132 | 133 | execute(flags, &config) 134 | })(); 135 | match result { 136 | Err(e) => cargo::exit_with_error(e, &mut *config.shell()), 137 | Ok(()) => {} 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate badge; 2 | extern crate cargo; 3 | extern crate fs_extra; 4 | #[macro_use] 5 | extern crate serde_json; 6 | 7 | use badge::{Badge, BadgeOptions}; 8 | use cargo::core::Workspace; 9 | use cargo::ops::CompileOptions; 10 | use cargo::util::{config::Config, errors::ProcessError, process, CargoTestError, Test}; 11 | use cargo::CargoResult; 12 | use std::env; 13 | use std::ffi::OsString; 14 | use std::fs; 15 | use std::io::Write; 16 | use std::path::{Path, PathBuf}; 17 | use std::process::{self, Command}; 18 | 19 | pub struct CoverageOptions<'a> { 20 | pub compile_opts: CompileOptions<'a>, 21 | pub merge_dir: &'a Path, 22 | pub no_fail_fast: bool, 23 | pub kcov_path: &'a Path, 24 | pub merge_args: Vec, // TODO: Or &[str] ? 25 | pub exclude_pattern: Option 26 | } 27 | 28 | pub fn run_coverage(ws: &Workspace, options: &CoverageOptions, test_args: &[String]) -> CargoResult> { 29 | // TODO: It'd be nice if there was a flag in compile_opts for this. 30 | 31 | // The compiler needs to be told to not remove any code that isn't called or 32 | // it'll be missed in the coverage counts, but the existing user-provided 33 | // RUSTFLAGS should be preserved as well (and should be put last, so that 34 | // they override any earlier repeats). 35 | let mut rustflags: std::ffi::OsString = "-C link-dead-code".into(); 36 | if options.compile_opts.build_config.release { 37 | // In release mode, ensure that there's debuginfo in some form so that 38 | // kcov has something to work with. 39 | rustflags.push(" -C debuginfo=2"); 40 | } 41 | if let Some(existing) = std::env::var_os("RUSTFLAGS") { 42 | rustflags.push(" "); 43 | rustflags.push(existing); 44 | } 45 | std::env::set_var("RUSTFLAGS", rustflags); 46 | 47 | 48 | let mut compilation = try!(cargo::ops::compile(ws, &options.compile_opts)); 49 | compilation.tests.sort_by(|a, b| { 50 | (a.0.package_id(), &a.1).cmp(&(b.0.package_id(), &b.1)) 51 | }); 52 | 53 | let config = options.compile_opts.config; 54 | let cwd = options.compile_opts.config.cwd(); 55 | 56 | let mut errors = vec![]; 57 | 58 | let v : Vec = test_args.iter().cloned().map::(|val| val.into()).collect(); 59 | 60 | //let x = &compilation.tests.map(run_single_coverage); 61 | 62 | for &(ref pkg, ref kind, ref test, ref exe) in &compilation.tests { 63 | let to_display = match cargo::util::without_prefix(exe, &cwd) { 64 | Some(path) => path, 65 | None => &**exe 66 | }; 67 | 68 | // DLYB trick on OSX is here v 69 | let mut cmd = try!(compilation.target_process(options.kcov_path, pkg)); 70 | // TODO: Make all that more configurable 71 | //TODO: The unwraps shouldn't cause problems... right ? 72 | let target = ws.target_dir().join("kcov-".to_string() + to_display.file_name().unwrap().to_str().unwrap()).into_path_unlocked(); 73 | let default_include_path = format!("--include-path={}", ws.root().display()); 74 | 75 | let mut args = vec![ 76 | OsString::from("--verify"), 77 | OsString::from(default_include_path), 78 | OsString::from(target)]; 79 | 80 | // add exclude path 81 | if let Some(ref exclude) = options.exclude_pattern { 82 | let exclude_option = OsString::from(format!("--exclude-pattern={}", exclude)); 83 | args.push(exclude_option); 84 | } 85 | 86 | args.push(OsString::from(exe)); 87 | 88 | args.extend(v.clone()); 89 | cmd.args(&args); 90 | try!(config.shell().concise(|shell| { 91 | shell.status("Running", to_display.display().to_string()) 92 | })); 93 | try!(config.shell().verbose(|shell| { 94 | shell.status("Running", cmd.to_string()) 95 | })); 96 | 97 | let result = cmd.exec(); 98 | 99 | match result { 100 | Err(e) => { 101 | match e.downcast::() { 102 | Ok(e) => { 103 | errors.push(e); 104 | if !options.no_fail_fast { 105 | return Ok(Some(CargoTestError::new(Test::UnitTest { 106 | kind: kind.clone(), 107 | name: test.clone(), 108 | pkg_name: pkg.name().to_string(), 109 | }, errors))) 110 | } 111 | } 112 | Err(e) => { 113 | //This is an unexpected Cargo error rather than a test failure 114 | return Err(e) 115 | } 116 | } 117 | } 118 | Ok(()) => {} 119 | } 120 | } 121 | 122 | // Let the user pass mergeargs 123 | let mut mergeargs : Vec = vec!["--merge".to_string().into(), options.merge_dir.as_os_str().to_os_string()]; 124 | mergeargs.extend(options.merge_args.iter().cloned()); 125 | mergeargs.extend(compilation.tests.iter().map(|&(_, _, _, ref exe)| 126 | ws.target_dir().join("kcov-".to_string() + exe.file_name().unwrap().to_str().unwrap()).into_path_unlocked().into() 127 | )); 128 | let mut cmd = process(options.kcov_path.as_os_str().to_os_string()); 129 | cmd.args(&mergeargs); 130 | try!(config.shell().concise(|shell| { 131 | shell.status("Merging coverage", options.merge_dir.display().to_string()) 132 | })); 133 | try!(config.shell().verbose(|shell| { 134 | shell.status("Merging coverage", cmd.to_string()) 135 | })); 136 | try!(cmd.exec()); 137 | if errors.is_empty() { 138 | Ok(None) 139 | } else { 140 | Ok(Some(CargoTestError::new(Test::Multiple, errors))) 141 | } 142 | } 143 | 144 | fn require_success(status: process::ExitStatus) { 145 | if !status.success() { 146 | process::exit(status.code().unwrap()) 147 | } 148 | } 149 | 150 | pub fn build_kcov>(kcov_dir: P) -> PathBuf { 151 | // If kcov is in path 152 | if let Some(paths) = std::env::var_os("PATH") { 153 | for path in std::env::split_paths(&paths) { 154 | if path.join("kcov").exists() { 155 | return path.join("kcov"); 156 | } 157 | } 158 | } 159 | 160 | let kcov_dir: &Path = kcov_dir.as_ref(); 161 | let kcov_master_dir = kcov_dir.join("kcov-master"); 162 | let kcov_build_dir = kcov_master_dir.join("build"); 163 | let kcov_built_path = kcov_build_dir.join("src/kcov"); 164 | 165 | // If we already built kcov 166 | if kcov_built_path.exists() { 167 | return kcov_built_path; 168 | } 169 | 170 | // Download kcov 171 | println!("Downloading kcov"); 172 | require_success( 173 | Command::new("wget") 174 | .current_dir(kcov_dir) 175 | .arg("https://github.com/SimonKagstrom/kcov/archive/master.zip") 176 | .status() 177 | .unwrap() 178 | ); 179 | 180 | // Extract kcov 181 | println!("Extracting kcov"); 182 | require_success( 183 | Command::new("unzip") 184 | .current_dir(kcov_dir) 185 | .arg("master.zip") 186 | .status() 187 | .unwrap() 188 | ); 189 | 190 | // Build kcov 191 | fs::create_dir(&kcov_build_dir).expect(&format!("Failed to created dir {:?} for kcov", kcov_build_dir)); 192 | println!("CMaking kcov"); 193 | require_success( 194 | Command::new("cmake") 195 | .current_dir(&kcov_build_dir) 196 | .arg("..") 197 | .status() 198 | .unwrap() 199 | ); 200 | println!("Making kcov"); 201 | require_success( 202 | Command::new("make") 203 | .current_dir(&kcov_build_dir) 204 | .status() 205 | .unwrap() 206 | ); 207 | 208 | assert!(kcov_build_dir.exists()); 209 | kcov_built_path 210 | } 211 | 212 | pub fn doc_upload(message: &str, origin: &str, gh_pages: &str, doc_path: &str, local_doc_path: &Path, clobber_index: bool) -> Result<(), (String, i32)> { 213 | let doc_upload = Path::new("target/doc-upload"); 214 | 215 | if !doc_upload.exists() { 216 | // If the folder doesn't exist, clone it from remote 217 | // ASSUME: if target/doc-upload exists, it's ours 218 | let status = Command::new("git") 219 | .arg("clone") 220 | .arg("--verbose") 221 | .args(&["--branch", gh_pages]) 222 | .args(&["--depth", "1"]) 223 | .arg(origin) 224 | .arg(doc_upload) 225 | .status() 226 | .unwrap(); 227 | if !status.success() { 228 | // If clone fails, that means that the remote doesn't exist 229 | // So we create a new repository for the documentation branch 230 | require_success( 231 | Command::new("git") 232 | .arg("init") 233 | .arg(doc_upload) 234 | .status() 235 | .unwrap() 236 | ); 237 | require_success( 238 | Command::new("git") 239 | .current_dir(doc_upload) 240 | .arg("checkout") 241 | .args(&["-b", gh_pages]) 242 | .status() 243 | .unwrap() 244 | ); 245 | } 246 | } 247 | 248 | let doc_upload_branch = doc_upload.join(doc_path); 249 | 250 | println!("mkdir {}", doc_upload_branch.display()); 251 | let res = fs::create_dir(&doc_upload_branch); 252 | 253 | match res.as_ref().map_err(|err| err.kind()) { 254 | Err(std::io::ErrorKind::AlreadyExists) | Ok(()) => (), 255 | Err(_) => panic!("{:?}", res), 256 | } 257 | 258 | // we can't canonicalize before we create the folder 259 | let doc_upload_branch = doc_upload_branch.canonicalize().unwrap(); 260 | 261 | if !doc_upload_branch.starts_with(env::current_dir().unwrap().join(doc_upload)) { 262 | return Err(("Path passed in `--path` is outside the intended `target/doc-upload` folder".to_string(), 1)); 263 | } 264 | 265 | for entry in doc_upload_branch.read_dir().unwrap() { 266 | let dir = entry.unwrap(); 267 | // Delete all files in directory, as we'll be copying in everything 268 | // Ignore index.html (at root) so a redirect page can be manually added 269 | // Unless user wants otherwise (--clobber-index) 270 | // Or a new one was generated 271 | if dir.file_name() != OsString::from("index.html") 272 | || clobber_index 273 | || local_doc_path.join("index.html").exists() 274 | { 275 | let path = dir.path(); 276 | println!("rm -r {}", path.to_string_lossy()); 277 | fs::remove_dir_all(&path).ok(); 278 | fs::remove_file(path).ok(); 279 | } 280 | } 281 | 282 | // default badge shows that no successful build was made 283 | let mut badge_status = "no builds".to_string(); 284 | let mut badge_color = "#e05d44".to_string(); 285 | 286 | // try to read manifest to extract version number 287 | let config = Config::default().expect("failed to create cargo Config"); 288 | let mut version = Err(()); 289 | 290 | let mut manifest = env::current_dir().unwrap(); 291 | manifest.push("Cargo.toml"); 292 | 293 | match Workspace::new(&manifest, &config) { 294 | Ok(workspace) => match workspace.current() { 295 | Ok(package) => version = Ok(format!("{}", package.manifest().version())), 296 | Err(error) => println!("couldn't get package: {}", error), 297 | }, 298 | Err(error) => println!("couldn't generate workspace: {}", error), 299 | } 300 | 301 | // update badge to contain version number 302 | if let Ok(version) = &version { 303 | badge_status = version.clone(); 304 | } 305 | 306 | let doc = local_doc_path; 307 | println!("cp {} {}", doc.to_string_lossy(), doc_upload_branch.to_string_lossy()); 308 | let mut last_progress = 0; 309 | 310 | let mut result = Ok(()); 311 | 312 | if let Ok(doc) = doc.read_dir() { 313 | fs_extra::copy_items_with_progress( 314 | &doc.map(|entry| entry.unwrap().path()).collect(), 315 | &doc_upload_branch, 316 | &fs_extra::dir::CopyOptions::new(), 317 | |info| { 318 | // Some documentation can be very large, especially with a large number of dependencies 319 | // Don't go silent during copy, give updates every MiB processed 320 | if info.copied_bytes >> 20 > last_progress { 321 | last_progress = info.copied_bytes >> 20; 322 | println!("{}/{} MiB", info.copied_bytes >> 20, info.total_bytes >> 20); 323 | } 324 | fs_extra::dir::TransitProcessResult::ContinueOrAbort 325 | } 326 | ).unwrap(); 327 | 328 | // update the badge to reflect build was successful 329 | // but only if we managed to extract a version number 330 | if version.is_ok() { 331 | badge_color = "#4d76ae".to_string(); 332 | } 333 | } 334 | else { 335 | println!("No documentation found to upload."); 336 | result = Err(("No documentation generated".to_string(), 1)); 337 | } 338 | 339 | // make badge.json 340 | let json = json!({ 341 | "schemaVersion": 1, 342 | "label": "docs", 343 | "message": badge_status, 344 | "color": badge_color 345 | }); 346 | 347 | let mut file = fs::File::create(doc_upload_branch.join("badge.json")).unwrap(); 348 | file.write_all(json.to_string().as_bytes()).unwrap(); 349 | 350 | // make badge.svg 351 | let badge_options = BadgeOptions { 352 | subject: "docs".to_string(), 353 | status: badge_status.to_string(), 354 | color: badge_color.to_string(), 355 | }; 356 | 357 | let mut file = fs::File::create(doc_upload_branch.join("badge.svg")).unwrap(); 358 | file.write_all(Badge::new(badge_options).unwrap().to_svg().as_bytes()).unwrap(); 359 | 360 | // Tell git to track all of the files we copied over 361 | // Also tracks deletions of files if things changed 362 | require_success( 363 | Command::new("git") 364 | .current_dir(doc_upload) 365 | .arg("add") 366 | .arg("--verbose") 367 | .arg("--all") 368 | .status() 369 | .unwrap() 370 | ); 371 | 372 | // Save the changes 373 | if Command::new("git") 374 | .current_dir(doc_upload) 375 | .arg("commit") 376 | .arg("--verbose") 377 | .args(&["-m", message]) 378 | .status().is_err() 379 | { 380 | println!("No changes to the documentation."); 381 | } else { 382 | // Push changes to GitHub 383 | require_success( 384 | Command::new("git") 385 | .current_dir(doc_upload) 386 | .arg("push") 387 | .arg(origin) 388 | .arg(gh_pages) 389 | .status() 390 | .unwrap(), 391 | ); 392 | } 393 | result 394 | } 395 | --------------------------------------------------------------------------------