├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE.md ├── README.md ├── src ├── bin │ ├── bisect.rs │ └── install-sysroot.rs ├── git.rs ├── lib.rs └── sysroot.rs ├── test.example.sh └── test ├── Dockerfile └── test_input.rs /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | **/*.rs.bk 3 | /rust.git 4 | /cache 5 | /test.sh 6 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "adler32" 3 | version = "1.0.3" 4 | source = "registry+https://github.com/rust-lang/crates.io-index" 5 | 6 | [[package]] 7 | name = "aho-corasick" 8 | version = "0.6.9" 9 | source = "registry+https://github.com/rust-lang/crates.io-index" 10 | dependencies = [ 11 | "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 12 | ] 13 | 14 | [[package]] 15 | name = "ansi_term" 16 | version = "0.11.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | dependencies = [ 19 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 20 | ] 21 | 22 | [[package]] 23 | name = "arrayvec" 24 | version = "0.4.8" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | dependencies = [ 27 | "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 28 | ] 29 | 30 | [[package]] 31 | name = "atty" 32 | version = "0.2.11" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | dependencies = [ 35 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 36 | "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 38 | ] 39 | 40 | [[package]] 41 | name = "backtrace" 42 | version = "0.3.9" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | dependencies = [ 45 | "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 48 | "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 49 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 50 | ] 51 | 52 | [[package]] 53 | name = "backtrace-sys" 54 | version = "0.1.24" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | dependencies = [ 57 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 58 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 59 | ] 60 | 61 | [[package]] 62 | name = "base64" 63 | version = "0.9.3" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | dependencies = [ 66 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 68 | ] 69 | 70 | [[package]] 71 | name = "bitflags" 72 | version = "1.0.4" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | 75 | [[package]] 76 | name = "build_const" 77 | version = "0.2.1" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | 80 | [[package]] 81 | name = "byteorder" 82 | version = "1.2.7" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | 85 | [[package]] 86 | name = "bytes" 87 | version = "0.4.11" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | dependencies = [ 90 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 92 | ] 93 | 94 | [[package]] 95 | name = "cc" 96 | version = "1.0.25" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | 99 | [[package]] 100 | name = "cfg-if" 101 | version = "0.1.6" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | 104 | [[package]] 105 | name = "chrono" 106 | version = "0.4.6" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | dependencies = [ 109 | "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 110 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 112 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 113 | ] 114 | 115 | [[package]] 116 | name = "clap" 117 | version = "2.32.0" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | dependencies = [ 120 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 121 | "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 122 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 123 | "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 124 | "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 125 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 126 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 127 | ] 128 | 129 | [[package]] 130 | name = "cloudabi" 131 | version = "0.0.3" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | dependencies = [ 134 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 135 | ] 136 | 137 | [[package]] 138 | name = "core-foundation" 139 | version = "0.5.1" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | dependencies = [ 142 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 143 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 144 | ] 145 | 146 | [[package]] 147 | name = "core-foundation-sys" 148 | version = "0.5.1" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | dependencies = [ 151 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 152 | ] 153 | 154 | [[package]] 155 | name = "crc" 156 | version = "1.8.1" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | dependencies = [ 159 | "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 160 | ] 161 | 162 | [[package]] 163 | name = "crossbeam-deque" 164 | version = "0.6.2" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | dependencies = [ 167 | "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 169 | ] 170 | 171 | [[package]] 172 | name = "crossbeam-epoch" 173 | version = "0.6.1" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | dependencies = [ 176 | "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 177 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 179 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 182 | ] 183 | 184 | [[package]] 185 | name = "crossbeam-utils" 186 | version = "0.6.1" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | dependencies = [ 189 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 190 | ] 191 | 192 | [[package]] 193 | name = "curl-sys" 194 | version = "0.4.15" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | dependencies = [ 197 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 198 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 199 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 200 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 201 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 203 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 204 | ] 205 | 206 | [[package]] 207 | name = "dtoa" 208 | version = "0.4.3" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | 211 | [[package]] 212 | name = "encoding_rs" 213 | version = "0.8.13" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | dependencies = [ 216 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 217 | ] 218 | 219 | [[package]] 220 | name = "env_logger" 221 | version = "0.6.0" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | dependencies = [ 224 | "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 227 | "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 228 | "termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 229 | ] 230 | 231 | [[package]] 232 | name = "error-chain" 233 | version = "0.11.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | dependencies = [ 236 | "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 237 | ] 238 | 239 | [[package]] 240 | name = "filetime" 241 | version = "0.2.4" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | dependencies = [ 244 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 245 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 246 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 247 | ] 248 | 249 | [[package]] 250 | name = "flate2" 251 | version = "0.2.20" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | dependencies = [ 254 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 255 | "miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 256 | ] 257 | 258 | [[package]] 259 | name = "fnv" 260 | version = "1.0.6" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | 263 | [[package]] 264 | name = "foreign-types" 265 | version = "0.3.2" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | dependencies = [ 268 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 269 | ] 270 | 271 | [[package]] 272 | name = "foreign-types-shared" 273 | version = "0.1.1" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | 276 | [[package]] 277 | name = "fuchsia-zircon" 278 | version = "0.3.3" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | dependencies = [ 281 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 282 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 283 | ] 284 | 285 | [[package]] 286 | name = "fuchsia-zircon-sys" 287 | version = "0.3.3" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | 290 | [[package]] 291 | name = "futures" 292 | version = "0.1.25" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | 295 | [[package]] 296 | name = "futures-cpupool" 297 | version = "0.1.8" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | dependencies = [ 300 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 301 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 302 | ] 303 | 304 | [[package]] 305 | name = "git2" 306 | version = "0.7.5" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | dependencies = [ 309 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 311 | "libgit2-sys 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 314 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 316 | ] 317 | 318 | [[package]] 319 | name = "h2" 320 | version = "0.1.13" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | dependencies = [ 323 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 326 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 327 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 328 | "indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 329 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 330 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 331 | "string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 332 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 333 | ] 334 | 335 | [[package]] 336 | name = "http" 337 | version = "0.1.14" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | dependencies = [ 340 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 341 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 342 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 343 | ] 344 | 345 | [[package]] 346 | name = "httparse" 347 | version = "1.3.3" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | 350 | [[package]] 351 | name = "humantime" 352 | version = "1.2.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | dependencies = [ 355 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 356 | ] 357 | 358 | [[package]] 359 | name = "hyper" 360 | version = "0.12.16" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | dependencies = [ 363 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 364 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 365 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 366 | "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 367 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 368 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 369 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 370 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 371 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 372 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 373 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 374 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 375 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 376 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 377 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 379 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 380 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 381 | "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 382 | ] 383 | 384 | [[package]] 385 | name = "hyper-tls" 386 | version = "0.3.1" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | dependencies = [ 389 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 391 | "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", 392 | "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 393 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 394 | ] 395 | 396 | [[package]] 397 | name = "idna" 398 | version = "0.1.5" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | dependencies = [ 401 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 402 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 403 | "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 404 | ] 405 | 406 | [[package]] 407 | name = "indexmap" 408 | version = "1.0.2" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | 411 | [[package]] 412 | name = "iovec" 413 | version = "0.1.2" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | dependencies = [ 416 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 417 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 418 | ] 419 | 420 | [[package]] 421 | name = "itoa" 422 | version = "0.4.3" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | 425 | [[package]] 426 | name = "kernel32-sys" 427 | version = "0.2.2" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | dependencies = [ 430 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 431 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 432 | ] 433 | 434 | [[package]] 435 | name = "lazy_static" 436 | version = "1.2.0" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | 439 | [[package]] 440 | name = "lazycell" 441 | version = "1.2.0" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | 444 | [[package]] 445 | name = "libc" 446 | version = "0.2.44" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | 449 | [[package]] 450 | name = "libflate" 451 | version = "0.1.18" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | dependencies = [ 454 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 455 | "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 456 | "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 457 | ] 458 | 459 | [[package]] 460 | name = "libgit2-sys" 461 | version = "0.7.10" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | dependencies = [ 464 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 465 | "curl-sys 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)", 466 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 467 | "libssh2-sys 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 468 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 469 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 470 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 471 | ] 472 | 473 | [[package]] 474 | name = "libssh2-sys" 475 | version = "0.2.11" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | dependencies = [ 478 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 479 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 480 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 481 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 482 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 483 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 484 | ] 485 | 486 | [[package]] 487 | name = "libz-sys" 488 | version = "1.0.25" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | dependencies = [ 491 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 492 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 493 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 494 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 495 | ] 496 | 497 | [[package]] 498 | name = "lock_api" 499 | version = "0.1.5" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | dependencies = [ 502 | "owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 503 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 504 | ] 505 | 506 | [[package]] 507 | name = "log" 508 | version = "0.4.6" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | dependencies = [ 511 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 512 | ] 513 | 514 | [[package]] 515 | name = "lzma-sys" 516 | version = "0.1.11" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | dependencies = [ 519 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 520 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 521 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 522 | ] 523 | 524 | [[package]] 525 | name = "matches" 526 | version = "0.1.8" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | 529 | [[package]] 530 | name = "memchr" 531 | version = "2.1.1" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | dependencies = [ 534 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 535 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 536 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 537 | ] 538 | 539 | [[package]] 540 | name = "memoffset" 541 | version = "0.2.1" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | 544 | [[package]] 545 | name = "mime" 546 | version = "0.3.12" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | dependencies = [ 549 | "unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 550 | ] 551 | 552 | [[package]] 553 | name = "mime_guess" 554 | version = "2.0.0-alpha.6" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | dependencies = [ 557 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 558 | "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 559 | "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 560 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 561 | ] 562 | 563 | [[package]] 564 | name = "miniz-sys" 565 | version = "0.1.11" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | dependencies = [ 568 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 569 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 570 | ] 571 | 572 | [[package]] 573 | name = "mio" 574 | version = "0.6.16" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | dependencies = [ 577 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 581 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 583 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 584 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 585 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 586 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 587 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 588 | ] 589 | 590 | [[package]] 591 | name = "mio-uds" 592 | version = "0.6.7" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | dependencies = [ 595 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 596 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 597 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 598 | ] 599 | 600 | [[package]] 601 | name = "miow" 602 | version = "0.2.1" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | dependencies = [ 605 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 606 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 607 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 608 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 609 | ] 610 | 611 | [[package]] 612 | name = "native-tls" 613 | version = "0.2.2" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | dependencies = [ 616 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 617 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 618 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 621 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 622 | "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 623 | "security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 624 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 626 | ] 627 | 628 | [[package]] 629 | name = "net2" 630 | version = "0.2.33" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | dependencies = [ 633 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 634 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 635 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 636 | ] 637 | 638 | [[package]] 639 | name = "nodrop" 640 | version = "0.1.13" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | 643 | [[package]] 644 | name = "num-integer" 645 | version = "0.1.39" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | dependencies = [ 648 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 649 | ] 650 | 651 | [[package]] 652 | name = "num-traits" 653 | version = "0.2.6" 654 | source = "registry+https://github.com/rust-lang/crates.io-index" 655 | 656 | [[package]] 657 | name = "num_cpus" 658 | version = "1.8.0" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | dependencies = [ 661 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 662 | ] 663 | 664 | [[package]] 665 | name = "openssl" 666 | version = "0.10.15" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | dependencies = [ 669 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 670 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 671 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 672 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 673 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 674 | "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", 675 | ] 676 | 677 | [[package]] 678 | name = "openssl-probe" 679 | version = "0.1.2" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | 682 | [[package]] 683 | name = "openssl-sys" 684 | version = "0.9.39" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | dependencies = [ 687 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 688 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 689 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", 690 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 691 | ] 692 | 693 | [[package]] 694 | name = "owning_ref" 695 | version = "0.4.0" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | dependencies = [ 698 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 699 | ] 700 | 701 | [[package]] 702 | name = "parking_lot" 703 | version = "0.6.4" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | dependencies = [ 706 | "lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 707 | "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 708 | ] 709 | 710 | [[package]] 711 | name = "parking_lot_core" 712 | version = "0.3.1" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | dependencies = [ 715 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 716 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 717 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 718 | "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 719 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 720 | ] 721 | 722 | [[package]] 723 | name = "percent-encoding" 724 | version = "1.0.1" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | 727 | [[package]] 728 | name = "phf" 729 | version = "0.7.23" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | dependencies = [ 732 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 733 | ] 734 | 735 | [[package]] 736 | name = "phf_codegen" 737 | version = "0.7.23" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | dependencies = [ 740 | "phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 741 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 742 | ] 743 | 744 | [[package]] 745 | name = "phf_generator" 746 | version = "0.7.23" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | dependencies = [ 749 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)", 750 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 751 | ] 752 | 753 | [[package]] 754 | name = "phf_shared" 755 | version = "0.7.23" 756 | source = "registry+https://github.com/rust-lang/crates.io-index" 757 | dependencies = [ 758 | "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 759 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 760 | ] 761 | 762 | [[package]] 763 | name = "pkg-config" 764 | version = "0.3.14" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | 767 | [[package]] 768 | name = "quick-error" 769 | version = "1.2.2" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | 772 | [[package]] 773 | name = "rand" 774 | version = "0.5.5" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | dependencies = [ 777 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 778 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 779 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 780 | "rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 781 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 782 | ] 783 | 784 | [[package]] 785 | name = "rand" 786 | version = "0.6.1" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | dependencies = [ 789 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 790 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 791 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 793 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 794 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 795 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 796 | "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 797 | "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 798 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 799 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 800 | ] 801 | 802 | [[package]] 803 | name = "rand_chacha" 804 | version = "0.1.0" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | dependencies = [ 807 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 808 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 809 | ] 810 | 811 | [[package]] 812 | name = "rand_core" 813 | version = "0.2.2" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | dependencies = [ 816 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 817 | ] 818 | 819 | [[package]] 820 | name = "rand_core" 821 | version = "0.3.0" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | 824 | [[package]] 825 | name = "rand_hc" 826 | version = "0.1.0" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | dependencies = [ 829 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 830 | ] 831 | 832 | [[package]] 833 | name = "rand_isaac" 834 | version = "0.1.1" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | dependencies = [ 837 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 838 | ] 839 | 840 | [[package]] 841 | name = "rand_pcg" 842 | version = "0.1.1" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | dependencies = [ 845 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 846 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 847 | ] 848 | 849 | [[package]] 850 | name = "rand_xorshift" 851 | version = "0.1.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | dependencies = [ 854 | "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 855 | ] 856 | 857 | [[package]] 858 | name = "redox_syscall" 859 | version = "0.1.43" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | 862 | [[package]] 863 | name = "redox_termios" 864 | version = "0.1.1" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | dependencies = [ 867 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 868 | ] 869 | 870 | [[package]] 871 | name = "regex" 872 | version = "1.1.0" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | dependencies = [ 875 | "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", 876 | "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 877 | "regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 878 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 879 | "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 880 | ] 881 | 882 | [[package]] 883 | name = "regex-syntax" 884 | version = "0.6.4" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | dependencies = [ 887 | "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 888 | ] 889 | 890 | [[package]] 891 | name = "remove_dir_all" 892 | version = "0.5.1" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | dependencies = [ 895 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 896 | ] 897 | 898 | [[package]] 899 | name = "reqwest" 900 | version = "0.9.5" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | dependencies = [ 903 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", 904 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 905 | "encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", 906 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 907 | "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 908 | "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", 909 | "hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 910 | "libflate 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", 911 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 912 | "mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 913 | "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", 914 | "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 915 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 916 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 917 | "serde_urlencoded 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 918 | "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", 919 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 920 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 921 | "uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 922 | ] 923 | 924 | [[package]] 925 | name = "rust_sysroot" 926 | version = "0.1.0" 927 | dependencies = [ 928 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 929 | "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", 930 | "env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 931 | "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 932 | "flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", 933 | "git2 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 934 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 935 | "reqwest 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)", 936 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 937 | "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", 938 | "tar 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", 939 | "xz2 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 940 | ] 941 | 942 | [[package]] 943 | name = "rustc-demangle" 944 | version = "0.1.9" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | 947 | [[package]] 948 | name = "rustc_version" 949 | version = "0.2.3" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | dependencies = [ 952 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 953 | ] 954 | 955 | [[package]] 956 | name = "ryu" 957 | version = "0.2.7" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | 960 | [[package]] 961 | name = "safemem" 962 | version = "0.3.0" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | 965 | [[package]] 966 | name = "schannel" 967 | version = "0.1.14" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | dependencies = [ 970 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 972 | ] 973 | 974 | [[package]] 975 | name = "scopeguard" 976 | version = "0.3.3" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | 979 | [[package]] 980 | name = "security-framework" 981 | version = "0.2.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | dependencies = [ 984 | "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 985 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 986 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 987 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 988 | ] 989 | 990 | [[package]] 991 | name = "security-framework-sys" 992 | version = "0.2.1" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | dependencies = [ 995 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 996 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 997 | ] 998 | 999 | [[package]] 1000 | name = "semver" 1001 | version = "0.9.0" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | dependencies = [ 1004 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "semver-parser" 1009 | version = "0.7.0" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | 1012 | [[package]] 1013 | name = "serde" 1014 | version = "1.0.80" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | 1017 | [[package]] 1018 | name = "serde_json" 1019 | version = "1.0.33" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | dependencies = [ 1022 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1023 | "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1024 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "serde_urlencoded" 1029 | version = "0.5.4" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | dependencies = [ 1032 | "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1033 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 1034 | "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", 1035 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "siphasher" 1040 | version = "0.2.3" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | 1043 | [[package]] 1044 | name = "slab" 1045 | version = "0.4.1" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | 1048 | [[package]] 1049 | name = "smallvec" 1050 | version = "0.6.7" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | dependencies = [ 1053 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1054 | ] 1055 | 1056 | [[package]] 1057 | name = "stable_deref_trait" 1058 | version = "1.1.1" 1059 | source = "registry+https://github.com/rust-lang/crates.io-index" 1060 | 1061 | [[package]] 1062 | name = "string" 1063 | version = "0.1.2" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | 1066 | [[package]] 1067 | name = "strsim" 1068 | version = "0.7.0" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | 1071 | [[package]] 1072 | name = "tar" 1073 | version = "0.4.20" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | dependencies = [ 1076 | "filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1077 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1078 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1079 | "xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1080 | ] 1081 | 1082 | [[package]] 1083 | name = "tempfile" 1084 | version = "3.0.5" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | dependencies = [ 1087 | "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1088 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1089 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1090 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1093 | ] 1094 | 1095 | [[package]] 1096 | name = "termcolor" 1097 | version = "1.0.4" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | dependencies = [ 1100 | "wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "termion" 1105 | version = "1.5.1" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | dependencies = [ 1108 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1109 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "textwrap" 1115 | version = "0.10.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | dependencies = [ 1118 | "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "thread_local" 1123 | version = "0.3.6" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | dependencies = [ 1126 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "time" 1131 | version = "0.1.40" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | dependencies = [ 1134 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1135 | "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 1136 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "tokio" 1141 | version = "0.1.13" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | dependencies = [ 1144 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1145 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1146 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1147 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1148 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1149 | "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1150 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | "tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1152 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1153 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1154 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1155 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1156 | "tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1157 | "tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1158 | "tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1159 | ] 1160 | 1161 | [[package]] 1162 | name = "tokio-codec" 1163 | version = "0.1.1" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | dependencies = [ 1166 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1167 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1168 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "tokio-current-thread" 1173 | version = "0.1.4" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | dependencies = [ 1176 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "tokio-executor" 1182 | version = "0.1.5" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | dependencies = [ 1185 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "tokio-fs" 1190 | version = "0.1.4" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | dependencies = [ 1193 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1195 | "tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "tokio-io" 1200 | version = "0.1.10" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | dependencies = [ 1203 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1205 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "tokio-reactor" 1210 | version = "0.1.7" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | dependencies = [ 1213 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1214 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1219 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1220 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1221 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1222 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "tokio-tcp" 1227 | version = "0.1.2" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | dependencies = [ 1230 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1231 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1232 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1233 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1234 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1235 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "tokio-threadpool" 1240 | version = "0.1.9" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | dependencies = [ 1243 | "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 1244 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1245 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1246 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1247 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1248 | "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1249 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1250 | ] 1251 | 1252 | [[package]] 1253 | name = "tokio-timer" 1254 | version = "0.2.8" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | dependencies = [ 1257 | "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1258 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1259 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1260 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "tokio-udp" 1265 | version = "0.1.3" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | dependencies = [ 1268 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1272 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1273 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1274 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "tokio-uds" 1279 | version = "0.2.4" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | dependencies = [ 1282 | "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", 1283 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1285 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1286 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1287 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", 1288 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", 1289 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1290 | "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1291 | "tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1292 | ] 1293 | 1294 | [[package]] 1295 | name = "try-lock" 1296 | version = "0.2.2" 1297 | source = "registry+https://github.com/rust-lang/crates.io-index" 1298 | 1299 | [[package]] 1300 | name = "ucd-util" 1301 | version = "0.1.3" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | 1304 | [[package]] 1305 | name = "unicase" 1306 | version = "1.4.2" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | dependencies = [ 1309 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "unicase" 1314 | version = "2.2.0" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | dependencies = [ 1317 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "unicode-bidi" 1322 | version = "0.3.4" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | dependencies = [ 1325 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1326 | ] 1327 | 1328 | [[package]] 1329 | name = "unicode-normalization" 1330 | version = "0.1.7" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | 1333 | [[package]] 1334 | name = "unicode-width" 1335 | version = "0.1.5" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | 1338 | [[package]] 1339 | name = "unreachable" 1340 | version = "1.0.0" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | dependencies = [ 1343 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1344 | ] 1345 | 1346 | [[package]] 1347 | name = "url" 1348 | version = "1.7.2" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | dependencies = [ 1351 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1352 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1353 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1354 | ] 1355 | 1356 | [[package]] 1357 | name = "utf8-ranges" 1358 | version = "1.0.2" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | 1361 | [[package]] 1362 | name = "uuid" 1363 | version = "0.7.1" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | dependencies = [ 1366 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 1367 | ] 1368 | 1369 | [[package]] 1370 | name = "vcpkg" 1371 | version = "0.2.6" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | 1374 | [[package]] 1375 | name = "vec_map" 1376 | version = "0.8.1" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | 1379 | [[package]] 1380 | name = "version_check" 1381 | version = "0.1.5" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | 1384 | [[package]] 1385 | name = "void" 1386 | version = "1.0.2" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | 1389 | [[package]] 1390 | name = "want" 1391 | version = "0.0.6" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | dependencies = [ 1394 | "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", 1395 | "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1396 | "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "winapi" 1401 | version = "0.2.8" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | 1404 | [[package]] 1405 | name = "winapi" 1406 | version = "0.3.6" 1407 | source = "registry+https://github.com/rust-lang/crates.io-index" 1408 | dependencies = [ 1409 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1410 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1411 | ] 1412 | 1413 | [[package]] 1414 | name = "winapi-build" 1415 | version = "0.1.1" 1416 | source = "registry+https://github.com/rust-lang/crates.io-index" 1417 | 1418 | [[package]] 1419 | name = "winapi-i686-pc-windows-gnu" 1420 | version = "0.4.0" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | 1423 | [[package]] 1424 | name = "winapi-util" 1425 | version = "0.1.1" 1426 | source = "registry+https://github.com/rust-lang/crates.io-index" 1427 | dependencies = [ 1428 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "winapi-x86_64-pc-windows-gnu" 1433 | version = "0.4.0" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | 1436 | [[package]] 1437 | name = "wincolor" 1438 | version = "1.0.1" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | dependencies = [ 1441 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1442 | "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "ws2_32-sys" 1447 | version = "0.2.1" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | dependencies = [ 1450 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1451 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1452 | ] 1453 | 1454 | [[package]] 1455 | name = "xattr" 1456 | version = "0.2.2" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | dependencies = [ 1459 | "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "xz2" 1464 | version = "0.1.6" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | dependencies = [ 1467 | "lzma-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1468 | ] 1469 | 1470 | [metadata] 1471 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" 1472 | "checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e" 1473 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1474 | "checksum arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f405cc4c21cd8b784f6c8fc2adf9bc00f59558f0049b5ec21517f875963040cc" 1475 | "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" 1476 | "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" 1477 | "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" 1478 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 1479 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" 1480 | "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39" 1481 | "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" 1482 | "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" 1483 | "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" 1484 | "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" 1485 | "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" 1486 | "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" 1487 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1488 | "checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980" 1489 | "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" 1490 | "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb" 1491 | "checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" 1492 | "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" 1493 | "checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" 1494 | "checksum curl-sys 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)" = "721c204978be2143fab0a84b708c49d79d1f6100b8785610f456043a90708870" 1495 | "checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd" 1496 | "checksum encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1a8fa54e6689eb2549c4efed8d00d7f3b2b994a064555b0e8df4ae3764bcc4be" 1497 | "checksum env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afb070faf94c85d17d50ca44f6ad076bce18ae92f0037d350947240a36e9d42e" 1498 | "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" 1499 | "checksum filetime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a2df5c1a8c4be27e7707789dc42ae65976e60b394afd293d1419ab915833e646" 1500 | "checksum flate2 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423" 1501 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1502 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1503 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1504 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1505 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1506 | "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b" 1507 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1508 | "checksum git2 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "591f8be1674b421644b6c030969520bc3fa12114d2eb467471982ed3e9584e71" 1509 | "checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" 1510 | "checksum http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "02096a6d2c55e63f7fcb800690e4f889a25f6ec342e3adb4594e293b625215ab" 1511 | "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" 1512 | "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" 1513 | "checksum hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0aeedb8ca5f0f96be00f84073c6d0d5f962ecad020ef543dff99a7c12717a60e" 1514 | "checksum hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "32cd73f14ad370d3b4d4b7dce08f69b81536c82e39fcc89731930fe5788cd661" 1515 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1516 | "checksum indexmap 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e81a7c05f79578dbc15793d8b619db9ba32b4577003ef3af1a91c416798c58d" 1517 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1518 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" 1519 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1520 | "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" 1521 | "checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0" 1522 | "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311" 1523 | "checksum libflate 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "21138fc6669f438ed7ae3559d5789a5f0ba32f28c1f0608d1e452b0bb06ee936" 1524 | "checksum libgit2-sys 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4916b5addc78ec36cc309acfcdf0b9f9d97ab7b84083118b248709c5b7029356" 1525 | "checksum libssh2-sys 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "126a1f4078368b163bfdee65fbab072af08a1b374a5551b21e87ade27b1fbf9d" 1526 | "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" 1527 | "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" 1528 | "checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" 1529 | "checksum lzma-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "144bd03f1e992eb9a3b236779f3438abc7e747cbb6c5c2c21c07b557aab26836" 1530 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1531 | "checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16" 1532 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1533 | "checksum mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0a907b83e7b9e987032439a387e187119cddafc92d5c2aaeb1d92580a793f630" 1534 | "checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed" 1535 | "checksum miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0300eafb20369952951699b68243ab4334f4b10a88f411c221d444b36c40e649" 1536 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432" 1537 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1538 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1539 | "checksum native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8e08de0070bbf4c31f452ea2a70db092f36f6f2e4d897adf5674477d488fb2" 1540 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1541 | "checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" 1542 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" 1543 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" 1544 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1545 | "checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" 1546 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1547 | "checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" 1548 | "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" 1549 | "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" 1550 | "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" 1551 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1552 | "checksum phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "cec29da322b242f4c3098852c77a0ca261c9c01b806cae85a5572a1eb94db9a6" 1553 | "checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad" 1554 | "checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b" 1555 | "checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93" 1556 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c" 1557 | "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" 1558 | "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" 1559 | "checksum rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae9d223d52ae411a33cf7e54ec6034ec165df296ccd23533d671a28252b6f66a" 1560 | "checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a" 1561 | "checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372" 1562 | "checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db" 1563 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1564 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1565 | "checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05" 1566 | "checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" 1567 | "checksum redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "679da7508e9a6390aeaf7fbd02a800fdc64b73fe2204dd2c8ae66d22d9d5ad5d" 1568 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1569 | "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" 1570 | "checksum regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4e47a2ed29da7a9e1960e1639e7a982e6edc6d49be308a3b02daf511504a16d1" 1571 | "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" 1572 | "checksum reqwest 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ab52e462d1e15891441aeefadff68bdea005174328ce3da0a314f2ad313ec837" 1573 | "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" 1574 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1575 | "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" 1576 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" 1577 | "checksum schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0e1a231dc10abf6749cfa5d7767f25888d484201accbd919b66ab5413c502d56" 1578 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1579 | "checksum security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "697d3f3c23a618272ead9e1fb259c1411102b31c6af8b93f1d64cca9c3b0e8e0" 1580 | "checksum security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab01dfbe5756785b5b4d46e0289e5a18071dfa9a7c2b24213ea00b9ef9b665bf" 1581 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1582 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1583 | "checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" 1584 | "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811" 1585 | "checksum serde_urlencoded 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d48f9f99cd749a2de71d29da5f948de7f2764cc5a9d7f3c97e3514d4ee6eabf2" 1586 | "checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" 1587 | "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d" 1588 | "checksum smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b73ea3738b47563803ef814925e69be00799a8c07420be8b996f8e98fb2336db" 1589 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" 1590 | "checksum string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98998cced76115b1da46f63388b909d118a37ae0be0f82ad35773d4a4bc9d18d" 1591 | "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" 1592 | "checksum tar 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "a303ba60a099fcd2aaa646b14d2724591a96a75283e4b7ed3d1a1658909d9ae2" 1593 | "checksum tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "7e91405c14320e5c79b3d148e1c86f40749a36e490642202a31689cb1a3452b2" 1594 | "checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" 1595 | "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" 1596 | "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" 1597 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1598 | "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" 1599 | "checksum tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "a7817d4c98cc5be21360b3b37d6036fe9b7aefa5b7a201b7b16ff33423822f7d" 1600 | "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" 1601 | "checksum tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "331c8acc267855ec06eb0c94618dcbbfea45bed2d20b77252940095273fb58f6" 1602 | "checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde" 1603 | "checksum tokio-fs 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "60ae25f6b17d25116d2cba342083abe5255d3c2c79cb21ea11aa049c53bf7c75" 1604 | "checksum tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7392fe0a70d5ce0c882c4778116c519bd5dbaa8a7c3ae3d04578b3afafdcda21" 1605 | "checksum tokio-reactor 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "502b625acb4ee13cbb3b90b8ca80e0addd263ddacf6931666ef751e610b07fb5" 1606 | "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912" 1607 | "checksum tokio-threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "56c5556262383032878afad66943926a1d1f0967f17e94bd7764ceceb3b70e7f" 1608 | "checksum tokio-timer 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4f37f0111d76cc5da132fe9bc0590b9b9cfd079bc7e75ac3846278430a299ff8" 1609 | "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" 1610 | "checksum tokio-uds 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "99ce87382f6c1a24b513a72c048b2c8efe66cb5161c9061d00bee510f08dc168" 1611 | "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" 1612 | "checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" 1613 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 1614 | "checksum unicase 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d3218ea14b4edcaccfa0df0a64a3792a2c32cc706f1b336e48867f9d3147f90" 1615 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1616 | "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" 1617 | "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" 1618 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1619 | "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1620 | "checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" 1621 | "checksum uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dab5c5526c5caa3d106653401a267fed923e7046f35895ffcb5ca42db64942e6" 1622 | "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" 1623 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1624 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1625 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1626 | "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3" 1627 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1628 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" 1629 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1630 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1631 | "checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" 1632 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1633 | "checksum wincolor 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "561ed901ae465d6185fa7864d63fbd5720d0ef718366c9a4dc83cf6170d7e9ba" 1634 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1635 | "checksum xattr 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" 1636 | "checksum xz2 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c179869f34fc7c01830d3ce7ea2086bc3a07e0d35289b667d0a8bf910258926c" 1637 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | authors = ["Mark Simulacrum ", "The Rust Infrastructure Team"] 3 | name = "rust_sysroot" 4 | version = "0.1.0" 5 | 6 | [dependencies] 7 | clap = "2.25" 8 | env_logger = "0.6.0" 9 | error-chain = "0.11" 10 | flate2 = "0.2" 11 | git2 = "0.7" 12 | log = "0.4" 13 | reqwest = "0.9" 14 | serde = "1.0" 15 | serde_json = "1.0" 16 | tar = "0.4" 17 | xz2 = "0.1.3" 18 | 19 | [dependencies.chrono] 20 | features = ["serde"] 21 | version = "0.4" 22 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Mark Simulacrum 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust Bisector 2 | 3 | This is a tool written to find which commit introduced an error message into Rust, 4 | by bisecting the commits of the Rust repository. 5 | 6 | In order to use it, first record the range of commits which contains a regression. 7 | Note that if a commit happened more than 90 days ago, the bisector may not be 8 | able to download the build artifacts. 9 | Then, the recommended approach is to get Docker, and run the following command: 10 | 11 | ``` 12 | cd test 13 | docker build -t bisector . 14 | cd .. 15 | cargo build --release 16 | RUST_LOG=rust_sysroot=info target/release/bisect \ 17 | --preserve \ 18 | --test test.sh \ 19 | --start 5f44c653cff61d0f55f53e07a188f755c7acddd1 \ 20 | --end e97ba83287a6f0f85cc9cc7a51ab309487e17038 21 | ``` 22 | 23 | For each run, copy `test.example.sh` into `test.sh` and configure it to match 24 | your test case. The script should exit with 0 if the regression occured, and 25 | exit with nonzero code if no regression is detected. 26 | -------------------------------------------------------------------------------- /src/bin/bisect.rs: -------------------------------------------------------------------------------- 1 | #![recursion_limit = "1024"] 2 | 3 | #[macro_use] extern crate error_chain; 4 | #[macro_use] extern crate clap; 5 | #[macro_use] extern crate log; 6 | extern crate env_logger; 7 | extern crate rust_sysroot; 8 | 9 | mod errors { 10 | error_chain! { 11 | links { 12 | Utils(::rust_sysroot::errors::Error, ::rust_sysroot::errors::ErrorKind); 13 | } 14 | 15 | foreign_links { 16 | Io(::std::io::Error); 17 | } 18 | } 19 | } 20 | 21 | use errors::*; 22 | 23 | quick_main!(run); 24 | 25 | use std::path::Path; 26 | 27 | use rust_sysroot::git::Commit; 28 | use rust_sysroot::sysroot::Sysroot; 29 | use rust_sysroot::{get_host_triple, EPOCH_COMMIT}; 30 | 31 | // return true if commit is successfully broken 32 | fn test_commit(commit: &Commit, test_case: &Path, triple: &str, preserve_sysroots: bool) -> Result { 33 | let sysroot = Sysroot::install(commit, triple, preserve_sysroots, false)?; 34 | 35 | let status = sysroot.command(test_case).status()?; 36 | info!("tested {:} from {}: test failed: {}", &commit.sha[0..9], commit.date.to_rfc2822(), status.success()); 37 | Ok(status.success()) 38 | } 39 | 40 | /// Finds the index of the least item in `slice` for which the `predicate` holds. 41 | pub fn least_satisfying(slice: &[T], mut predicate: P) -> usize 42 | where P: FnMut(&T) -> bool 43 | { 44 | let mut base = 0usize; 45 | let mut s = slice; 46 | 47 | loop { 48 | let (head, tail) = s.split_at(s.len() >> 1); 49 | if tail.is_empty() { 50 | return base + head.len(); 51 | } 52 | if predicate(&tail[0]) { 53 | s = head; 54 | } else { 55 | base += head.len() + 1; 56 | s = &tail[1..]; 57 | } 58 | } 59 | } 60 | 61 | fn run() -> Result { 62 | env_logger::init(); 63 | 64 | let matches = clap_app!(bisect => 65 | (version: "0.1") 66 | (author: "The Rust Infrastructure Team") 67 | (about: "Find PRs introducing regressions into Rust") 68 | (@arg preserve_sysroots: -p --preserve "Don't delete sysroots after running.") 69 | (@arg test: +required +takes_value --test "File to run to test for regression") 70 | (@arg triple: +takes_value --triple "triple to use for downloads") 71 | (@arg start: +takes_value default_value(EPOCH_COMMIT) --start "First commit to search from") 72 | (@arg end: +takes_value default_value[master] --end "Last commit to search until") 73 | ).get_matches(); 74 | 75 | let preserve_sysroots = matches.is_present("preserve_sysroots"); 76 | let test_case = Path::new(matches.value_of_os("test").expect("--test")).canonicalize()?; 77 | let triple = match matches.value_of("triple") { 78 | Some(x) => x.to_string(), 79 | None => get_host_triple()?, 80 | }; 81 | 82 | let start = matches.value_of("start").unwrap(); 83 | let end = matches.value_of("end").unwrap(); 84 | let commits = rust_sysroot::get_commits(start, end)?; 85 | 86 | println!("Searching in {} commits; about {} steps", 87 | commits.len(), 88 | commits.len().next_power_of_two().trailing_zeros()); 89 | 90 | let found = least_satisfying(&commits, |commit| { 91 | test_commit(commit, &test_case, &triple, preserve_sysroots).unwrap() 92 | }); 93 | 94 | println!("searched commits {} through {}", commits.first().unwrap().sha, commits.last().unwrap().sha); 95 | println!("regression in {:?}; {:?}", found, commits.get(found)); 96 | 97 | Ok(0) 98 | } 99 | -------------------------------------------------------------------------------- /src/bin/install-sysroot.rs: -------------------------------------------------------------------------------- 1 | #![recursion_limit = "1024"] 2 | 3 | #[macro_use] extern crate error_chain; 4 | #[macro_use] extern crate clap; 5 | extern crate env_logger; 6 | extern crate chrono; 7 | extern crate rust_sysroot; 8 | 9 | mod errors { 10 | error_chain! { 11 | links { 12 | Utils(::rust_sysroot::errors::Error, ::rust_sysroot::errors::ErrorKind); 13 | } 14 | } 15 | } 16 | 17 | use errors::*; 18 | 19 | quick_main!(run); 20 | 21 | use rust_sysroot::sysroot::Sysroot; 22 | use rust_sysroot::git::Commit; 23 | use chrono::{Utc, TimeZone}; 24 | use rust_sysroot::{get_host_triple, EPOCH_COMMIT}; 25 | 26 | fn run() -> Result { 27 | env_logger::init(); 28 | 29 | let matches = clap_app!(install_sysroot => 30 | (version: "0.1") 31 | (author: "The Rust Infrastructure Team") 32 | (about: "Install Rust from a given PR") 33 | (@arg commit: --commit +takes_value +required "SHA of sysroot") 34 | (@arg skip_validation: --("skip-validation") "skip validation of commit, useful for try builds") 35 | (@arg triple: +takes_value --triple "triple to use for downloads") 36 | ).get_matches(); 37 | 38 | let triple = match matches.value_of("triple") { 39 | Some(x) => x.to_string(), 40 | None => get_host_triple()?, 41 | }; 42 | let commit = matches.value_of("commit").unwrap(); 43 | let commit = if !matches.is_present("skip_validation") { 44 | let commits = rust_sysroot::get_commits(EPOCH_COMMIT, "master")?; 45 | commits.into_iter() 46 | .find(|c| c.sha.starts_with(commit)) 47 | .expect("commit passed to be bors commit") 48 | } else { 49 | Commit { 50 | sha: commit.to_string(), 51 | date: Utc.ymd(2000, 1, 1).and_hms(0, 0, 0), 52 | summary: String::new(), 53 | } 54 | }; 55 | 56 | let _sysroot = Sysroot::install(&commit, &triple, false, true)?; 57 | 58 | println!("Sysroot can be found in cache/{}", commit.sha); 59 | println!("Please delete it when finished."); 60 | 61 | Ok(0) 62 | } 63 | -------------------------------------------------------------------------------- /src/git.rs: -------------------------------------------------------------------------------- 1 | //! Get git commits with help of the libgit2 library 2 | 3 | const RUST_SRC_URL: &str = "https://github.com/rust-lang/rust"; 4 | const RUST_SRC_REPO: Option<&str> = option_env!("RUST_SRC_REPO"); 5 | 6 | use std::path::Path; 7 | 8 | use chrono::{DateTime, TimeZone, Utc}; 9 | use git2::{Repository, Commit as Git2Commit}; 10 | use git2::build::RepoBuilder; 11 | 12 | use errors::Result; 13 | 14 | #[derive(Debug, Clone, PartialEq)] 15 | pub struct Commit { 16 | pub sha: String, 17 | pub date: DateTime, 18 | pub summary: String, 19 | } 20 | 21 | impl Commit { 22 | // Takes &mut because libgit2 internally caches summaries 23 | fn from_git2_commit(commit: &mut Git2Commit) -> Self { 24 | Commit { 25 | sha: commit.id().to_string(), 26 | date: Utc.timestamp(commit.time().seconds(), 0), 27 | summary: String::from_utf8_lossy(commit.summary_bytes().unwrap()).to_string(), 28 | } 29 | } 30 | } 31 | 32 | fn lookup_rev<'rev>(repo: &'rev Repository, rev: &str) -> Result> { 33 | if let Ok(c) = repo.revparse_single(rev)?.into_commit() { 34 | return Ok(c); 35 | } 36 | bail!("Could not find a commit for revision specifier '{}'", rev) 37 | } 38 | 39 | fn get_repo() -> Result { 40 | let loc = Path::new("rust.git"); 41 | match (RUST_SRC_REPO, loc.exists()) { 42 | (Some(_), _) | (_, true) => { 43 | let repo = Repository::open(RUST_SRC_REPO.map(Path::new).unwrap_or(loc))?; 44 | { 45 | let mut remote = repo.find_remote("origin").or_else(|_| repo.remote_anonymous("origin"))?; 46 | remote.fetch(&["master"], None, None)?; 47 | } 48 | Ok(repo) 49 | } 50 | (None, false) => { 51 | Ok(RepoBuilder::new().bare(true).clone(RUST_SRC_URL, Path::new("rust.git"))?) 52 | } 53 | } 54 | } 55 | 56 | /// Returns the bors merge commits between the two specified boundaries 57 | /// (boundaries inclusive). 58 | pub fn get_commits_between(first_commit: &str, last_commit: &str) -> Result> { 59 | let repo = get_repo()?; 60 | let mut first = lookup_rev(&repo, first_commit)?; 61 | let last = lookup_rev(&repo, last_commit)?; 62 | 63 | // Sanity check -- our algorithm below only works reliably if the 64 | // two commits are merge commits made by bors 65 | let assert_by_bors = |c: &Git2Commit| -> Result<()> { 66 | match c.author().name() { 67 | Some("bors") => Ok(()), 68 | Some(author) => bail!("Expected author {} to be bors for {}", author, c.id()), 69 | None => bail!("No author for {}", c.id()), 70 | } 71 | }; 72 | assert_by_bors(&first)?; 73 | assert_by_bors(&last)?; 74 | // Now find the commits 75 | // We search from the last and always take the first of its parents, 76 | // to only get merge commits. 77 | // This uses the fact that all bors merge commits have the earlier 78 | // merge commit as their first parent. 79 | let mut res = Vec::new(); 80 | let mut current = last; 81 | loop { 82 | assert_by_bors(¤t)?; 83 | res.push(Commit::from_git2_commit(&mut current)); 84 | match current.parents().next() { 85 | Some(c) => { 86 | if c.author().name() != Some("bors") { 87 | debug!("{:?} has non-bors author: {:?}, skipping", c.id(), c.author().name()); 88 | current = c.parents().next().unwrap(); 89 | continue; 90 | } 91 | current = c; 92 | if current.id() == first.id() { 93 | // Reached the first commit, our end of the search. 94 | break; 95 | } 96 | }, 97 | None => bail!("reached end of repo without encountering the first commit"), 98 | } 99 | } 100 | res.push(Commit::from_git2_commit(&mut first)); 101 | // Reverse in order to obtain chronological order 102 | res.reverse(); 103 | Ok(res) 104 | } 105 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![recursion_limit = "1024"] 2 | 3 | extern crate serde; 4 | extern crate serde_json; 5 | #[macro_use] extern crate error_chain; 6 | extern crate xz2; 7 | extern crate flate2; 8 | extern crate tar; 9 | #[macro_use] extern crate log; 10 | extern crate reqwest; 11 | extern crate git2; 12 | extern crate chrono; 13 | 14 | pub mod errors { 15 | // Create the Error, ErrorKind, ResultExt, and Result types 16 | error_chain! { 17 | foreign_links { 18 | Git2(::git2::Error); 19 | Reqwest(::reqwest::Error); 20 | Io(::std::io::Error); 21 | } 22 | } 23 | } 24 | 25 | pub mod git; 26 | pub mod sysroot; 27 | 28 | use std::process::Command; 29 | 30 | use errors::*; 31 | 32 | pub fn get_host_triple() -> Result { 33 | let output = Command::new("rustc") 34 | .arg("-v").arg("-V").output() 35 | .chain_err(|| format!("running rustc -vV to obtain host triple failed; try --triple"))?; 36 | let output = String::from_utf8_lossy(&output.stdout); 37 | Ok(output.lines().find(|l| l.starts_with("host: ")).unwrap()[6..].to_string()) 38 | } 39 | 40 | /// The first commit which build artifacts are made available through the CI for 41 | /// bisection. 42 | /// 43 | /// Due to our deletion policy which expires builds after 90 days, the build 44 | /// artifact of this commit itself is no longer available. 45 | pub const EPOCH_COMMIT: &str = "927c55d86b0be44337f37cf5b0a76fb8ba86e06c"; 46 | 47 | pub fn get_commits(start: &str, end: &str) -> Result> { 48 | info!("Getting commits from the git checkout in {}...{}", start, end); 49 | let commits = git::get_commits_between(start, end)?; 50 | assert_eq!(commits.first().expect("at least one commit").sha, start); 51 | 52 | Ok(commits) 53 | } 54 | -------------------------------------------------------------------------------- /src/sysroot.rs: -------------------------------------------------------------------------------- 1 | //! Download and manage sysroots. 2 | 3 | use std::env; 4 | use std::fmt; 5 | use std::fs::{self, File}; 6 | use std::io::{self, BufRead, Read, BufReader}; 7 | use std::path::{Path, PathBuf}; 8 | use std::process::Command; 9 | use std::ffi::OsStr; 10 | 11 | use chrono::{TimeZone, Utc}; 12 | use flate2::bufread::GzDecoder; 13 | use xz2::bufread::XzDecoder; 14 | use reqwest; 15 | use tar::Archive; 16 | 17 | use git::Commit; 18 | 19 | use errors::{Result, ResultExt}; 20 | 21 | pub struct Sysroot { 22 | pub sha: String, 23 | pub rustc: PathBuf, 24 | pub rustdoc: PathBuf, 25 | pub cargo: PathBuf, 26 | pub triple: String, 27 | pub preserve: bool, 28 | pub used_fallback_cargo: bool, 29 | pub is_saving_sysroot: bool, 30 | } 31 | 32 | impl Sysroot { 33 | // if running with cargo run, we want to avoid things like CARGO_INCREMENTAL 34 | // sneaking into the command's environment, but we do need the PATH to 35 | // find linkers and other things that cargo and rust needs. 36 | pub fn command>(&self, path: P) -> Command { 37 | let mut command = Command::new(path.as_ref().as_os_str()); 38 | command 39 | .env_clear() 40 | .env("PATH", env::var("PATH").unwrap_or_default()) 41 | .env("CARGO", &self.cargo) 42 | .env("CARGO_RELATIVE", &self.cargo.strip_prefix(&env::current_dir().unwrap()).unwrap()) 43 | .env("RUSTC", &self.rustc) 44 | .env("RUSTC_RELATIVE", &self.rustc.strip_prefix(&env::current_dir().unwrap()).unwrap()) 45 | .env("RUSTDOC", &self.rustdoc) 46 | .env("RUSTDOC_RELATIVE", &self.rustdoc.strip_prefix(&env::current_dir().unwrap()).unwrap()); 47 | command 48 | } 49 | 50 | pub fn with_local_rustc(commit: &Commit, rustc: &str, triple: &str, preserve: bool, is_saving_sysroot: bool) -> Result { 51 | let sha: &str = &commit.sha; 52 | let unpack_into = format!("cache"); 53 | let mut used_fallback_cargo = false; 54 | 55 | let cargo_sha = if commit.date < Utc.ymd(2017, 3, 20).and_hms(0, 0, 0) { 56 | // Versions of rustc older than Mar 20 have bugs in 57 | // their cargo. Use a known-good cargo for older rustcs 58 | // instead. 59 | used_fallback_cargo = true; 60 | // get master commit for known-good cargo 61 | ::get_commits(::EPOCH_COMMIT, "master")?.pop().unwrap().sha 62 | } else { 63 | sha.to_string() 64 | }; 65 | 66 | fs::create_dir_all(&unpack_into)?; 67 | 68 | let download = SysrootDownload { 69 | directory: unpack_into.into(), 70 | save_download: preserve, 71 | rust_sha: sha.to_string(), 72 | cargo_sha: cargo_sha, 73 | triple: triple.to_string(), 74 | }; 75 | 76 | download.get_and_extract("cargo")?; 77 | 78 | Ok(Sysroot { 79 | rustc: PathBuf::from(rustc).canonicalize() 80 | .chain_err(|| format!("failed to canonicalize rustc path: {}", rustc))?, 81 | rustdoc: PathBuf::from(rustc).canonicalize() 82 | .chain_err(|| format!("failed to canonicalize rustc path: {}", rustc))? 83 | .parent().unwrap().join("rustdoc"), 84 | cargo: download.directory.join(&download.rust_sha).join("cargo/bin/cargo").canonicalize() 85 | .chain_err(|| format!("failed to canonicalize cargo path for {}", download.cargo_sha))?, 86 | sha: download.rust_sha, 87 | preserve: download.save_download, 88 | triple: download.triple, 89 | used_fallback_cargo, 90 | is_saving_sysroot, 91 | }) 92 | } 93 | 94 | pub fn install(commit: &Commit, triple: &str, preserve: bool, is_saving_sysroot: bool) -> Result { 95 | let sha: &str = &commit.sha; 96 | let unpack_into = format!("cache"); 97 | let mut used_fallback_cargo = false; 98 | 99 | let cargo_sha = if commit.date < Utc.ymd(2017, 3, 20).and_hms(0, 0, 0) { 100 | // Versions of rustc older than Mar 20 have bugs in 101 | // their cargo. Use a known-good cargo for older rustcs 102 | // instead. 103 | used_fallback_cargo = true; 104 | // get master commit for known-good cargo 105 | ::get_commits(::EPOCH_COMMIT, "master")?.pop().unwrap().sha 106 | } else { 107 | sha.to_string() 108 | }; 109 | 110 | fs::create_dir_all(&unpack_into)?; 111 | 112 | let download = SysrootDownload { 113 | directory: unpack_into.into(), 114 | save_download: preserve, 115 | rust_sha: sha.to_string(), 116 | cargo_sha: cargo_sha, 117 | triple: triple.to_string(), 118 | }; 119 | 120 | download.get_and_extract("rustc")?; 121 | download.get_and_extract("rust-std")?; 122 | download.get_and_extract("cargo")?; 123 | 124 | download.into_sysroot(used_fallback_cargo, is_saving_sysroot) 125 | } 126 | } 127 | 128 | impl Drop for Sysroot { 129 | fn drop(&mut self) { 130 | if !self.is_saving_sysroot { 131 | fs::remove_dir_all(format!("cache/{}", self.sha)).unwrap_or_else(|err| { 132 | info!("failed to remove {:?}, please do so manually: {:?}", 133 | format!("cache/{}", self.sha), err); 134 | }); 135 | } 136 | } 137 | } 138 | 139 | #[derive(Debug, Clone)] 140 | struct SysrootDownload { 141 | directory: PathBuf, 142 | save_download: bool, 143 | rust_sha: String, 144 | cargo_sha: String, 145 | triple: String, 146 | } 147 | 148 | const MODULE_URLS: &[&str] = &[ 149 | "https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rustc-builds/@SHA@/@MODULE@-nightly-@TRIPLE@.tar.xz", 150 | "https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rustc-builds-try/@SHA@/@MODULE@-nightly-@TRIPLE@.tar.xz", 151 | ]; 152 | 153 | #[derive(Debug, Copy, Clone, PartialEq, Eq)] 154 | enum ModuleVariant { 155 | Cargo, 156 | Rustc, 157 | Std 158 | } 159 | 160 | impl fmt::Display for ModuleVariant { 161 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 162 | match *self { 163 | ModuleVariant::Cargo => write!(f, "cargo"), 164 | ModuleVariant::Rustc => write!(f, "rustc"), 165 | ModuleVariant::Std => write!(f, "rust-std"), 166 | } 167 | } 168 | } 169 | 170 | #[derive(Debug, Copy, Clone)] 171 | struct Module<'a> { 172 | variant: ModuleVariant, 173 | sysroot: &'a SysrootDownload, 174 | } 175 | 176 | impl<'a> Module<'a> { 177 | fn sha(&self) -> &str { 178 | match self.variant { 179 | ModuleVariant::Cargo => &self.sysroot.cargo_sha, 180 | _ => &self.sysroot.rust_sha, 181 | } 182 | } 183 | 184 | fn urls(&self) -> Vec { 185 | MODULE_URLS.iter().map(|url| { 186 | url.replace("@MODULE@", &self.variant.to_string()) 187 | .replace("@SHA@", self.sha()) 188 | .replace("@TRIPLE@", &self.sysroot.triple) 189 | }).collect() 190 | } 191 | 192 | fn decompress<'b, R: BufRead + 'b>(&self, reader: R, extension: &str) -> Result> { 193 | if extension == "gz" { 194 | Ok(Box::new(GzDecoder::new(reader)?)) 195 | } else if extension == "xz" { 196 | Ok(Box::new(XzDecoder::new(reader))) 197 | } else { 198 | bail!("unknown extension {}", extension); 199 | } 200 | } 201 | 202 | fn get(&self) -> Result<()> { 203 | let archive_path = |extension| { 204 | self.sysroot.directory.join(format!("{}-{}-{}.tar.{}", 205 | self.sha(), self.sysroot.triple, self.variant, extension)) 206 | }; 207 | for &extension in &["xz", "gz"] { 208 | let archive_path = archive_path(extension); 209 | 210 | let reader = if archive_path.exists() { 211 | BufReader::new(File::open(&archive_path)?) 212 | } else { 213 | continue; 214 | }; 215 | match self.decompress(reader, extension) 216 | .and_then(|reader| self.sysroot.extract(self, reader)) { 217 | Ok(()) => return Ok(()), 218 | Err(err) => { 219 | warn!("extracting {} failed: {:?}", archive_path.display(), err); 220 | fs::remove_file(archive_path)?; 221 | continue; 222 | } 223 | } 224 | } 225 | 226 | for url in self.urls() { 227 | let extension = if url.ends_with("gz") { "gz" } else { "xz" }; 228 | 229 | debug!("requesting: {}", url); 230 | let resp = reqwest::get(&url)?; 231 | debug!("{}", resp.status()); 232 | let mut reader = if resp.status().is_success() { 233 | BufReader::new(resp) 234 | } else { 235 | continue; 236 | }; 237 | let archive_path = archive_path(extension); 238 | 239 | let reader: Box = if self.sysroot.save_download && !archive_path.exists() { 240 | let mut file = File::create(&archive_path)?; 241 | io::copy(&mut reader, &mut file)?; 242 | Box::new(BufReader::new(File::open(&archive_path)?)) 243 | } else { 244 | Box::new(reader) 245 | }; 246 | 247 | match self.decompress(reader, extension) 248 | .and_then(|reader| self.sysroot.extract(self, reader)) { 249 | Ok(()) => return Ok(()), 250 | Err(err) => { 251 | warn!("extracting {} failed: {:?}", url, err); 252 | if self.sysroot.save_download { 253 | fs::remove_file(archive_path)?; 254 | } 255 | continue; 256 | } 257 | } 258 | } 259 | 260 | bail!("unable to download sha {} triple {} module {}", 261 | self.sha(), self.sysroot.triple, self.variant); 262 | } 263 | } 264 | 265 | impl SysrootDownload { 266 | fn into_sysroot(self, used_fallback_cargo: bool, is_saving_sysroot: bool) -> Result { 267 | Ok(Sysroot { 268 | rustc: self.directory.join(&self.rust_sha).join("rustc/bin/rustc").canonicalize() 269 | .chain_err(|| format!("failed to canonicalize rustc path for {}", self.rust_sha))?, 270 | rustdoc: self.directory.join(&self.rust_sha).join("rustc/bin/rustdoc").canonicalize() 271 | .chain_err(|| format!("failed to canonicalize rustdoc path for {}", self.rust_sha))?, 272 | cargo: self.directory.join(&self.rust_sha).join("cargo/bin/cargo").canonicalize() 273 | .chain_err(|| format!("failed to canonicalize cargo path for {}", self.cargo_sha))?, 274 | sha: self.rust_sha, 275 | preserve: self.save_download, 276 | triple: self.triple, 277 | used_fallback_cargo, 278 | is_saving_sysroot, 279 | }) 280 | } 281 | 282 | fn get_module(&self, module: &str) -> Result<()> { 283 | Module { 284 | variant: match module { 285 | "cargo" => ModuleVariant::Cargo, 286 | "rustc" => ModuleVariant::Rustc, 287 | "rust-std" => ModuleVariant::Std, 288 | _ => panic!("unknown module variant: {}", module), 289 | }, 290 | sysroot: self, 291 | }.get() 292 | } 293 | 294 | fn get_and_extract(&self, module: &str) -> Result<()> { 295 | self.get_module(module) 296 | } 297 | 298 | fn extract(&self, module: &Module, reader: Box) -> Result<()> { 299 | let is_std = module.variant == ModuleVariant::Std; 300 | let mut archive = Archive::new(reader); 301 | let std_prefix = format!("rust-std-{}/lib/rustlib", self.triple); 302 | 303 | let mut to_link = Vec::new(); 304 | 305 | let unpack_into = self.directory.join(&self.rust_sha); 306 | 307 | for entry in archive.entries()? { 308 | let mut entry = entry?; 309 | let path = entry.path()?.into_owned(); 310 | let mut components = path.components(); 311 | assert!(components.next().is_some(), "strip container directory"); 312 | let path = components.as_path(); 313 | 314 | let path = if is_std { 315 | if let Ok(path) = path.strip_prefix(&std_prefix) { 316 | if path.extension() == Some(OsStr::new("dylib")) { 317 | to_link.push(path.to_owned()); 318 | continue; 319 | } else { 320 | Path::new("rustc/lib/rustlib").join(path) 321 | } 322 | } else { 323 | continue; 324 | } 325 | } else { 326 | path.into() 327 | }; 328 | let path = unpack_into.join(path); 329 | fs::create_dir_all(&path.parent().unwrap()) 330 | .chain_err(|| format!("could not create intermediate directories for {}", 331 | path.display()))?; 332 | entry.unpack(path)?; 333 | } 334 | 335 | let link_dst_prefix = unpack_into.join(format!("rustc/lib/rustlib/{}/lib", self.triple)); 336 | let link_src_prefix = format!("{}/lib", self.triple); 337 | for path in to_link { 338 | let src = unpack_into.join("rustc/lib").join(path.strip_prefix(&link_src_prefix) 339 | .chain_err(|| format!("stripping prefix from: {:?}", path))?); 340 | let dst = link_dst_prefix.join(&path); 341 | fs::create_dir_all(&dst.parent().unwrap()) 342 | .chain_err(|| format!("could not create intermediate directories for {}", dst.display()))?; 343 | debug!("linking {} to {}", src.display(), dst.display()); 344 | fs::hard_link(src, dst)?; 345 | } 346 | 347 | Ok(()) 348 | } 349 | } 350 | -------------------------------------------------------------------------------- /test.example.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | TEST_DIRECTORY="test" 4 | ERROR_MESSAGE="internal compiler error" 5 | 6 | docker run --rm -v `pwd`:/dir -v `pwd`/$TEST_DIRECTORY:/source \ 7 | -e RUSTC=/dir/$RUSTC_RELATIVE -e CARGO_RELATIVE -e RUSTDOC=/dir/$RUSTDOC_RELATIVE \ 8 | bisector bash -c 'cd /source && rm -fr target ; /dir/$CARGO_RELATIVE test' \ 9 | 2>&1 | rg -q "$ERROR_MESSAGE" 10 | -------------------------------------------------------------------------------- /test/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | RUN apt-get update && \ 4 | DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 5 | build-essential \ 6 | ca-certificates \ 7 | libssl-dev \ 8 | libstdc++6 \ 9 | pkg-config \ 10 | cmake \ 11 | curl \ 12 | git \ 13 | python 14 | RUN mkdir /source 15 | VOLUME ["/source"] 16 | WORKDIR /source 17 | CMD ["/bin/bash"] 18 | -------------------------------------------------------------------------------- /test/test_input.rs: -------------------------------------------------------------------------------- 1 | fn main() {} 2 | --------------------------------------------------------------------------------