├── .github └── workflows │ └── build.yml ├── .gitignore ├── .rustfmt.toml ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── renovate.json ├── src ├── lib.rs └── main.rs └── tests ├── common.rs ├── patch_crates_io.rs ├── patch_create_and_delete.rs ├── patch_empty.rs ├── patch_err.rs ├── patch_git.rs ├── patch_github_pr_diff.rs └── patch_using_build_rs.rs /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build & test 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v3 16 | 17 | - name: Build 18 | run: cargo build --verbose --locked 19 | 20 | fmt: 21 | runs-on: ubuntu-latest 22 | steps: 23 | - uses: actions/checkout@v3 24 | 25 | - name: Check formatting 26 | run: cargo fmt -- --check 27 | 28 | lint: 29 | runs-on: ubuntu-latest 30 | steps: 31 | - uses: actions/checkout@v3 32 | 33 | - name: Lint Code 34 | run: cargo clippy --locked --tests -- -D warnings 35 | 36 | test: 37 | runs-on: ubuntu-latest 38 | steps: 39 | - uses: actions/checkout@v3 40 | 41 | - name: Run tests 42 | run: cargo test --verbose 43 | 44 | audit: 45 | runs-on: ubuntu-latest 46 | steps: 47 | - uses: actions/checkout@v3 48 | 49 | - name: Install cargo audit 50 | run: cargo install cargo-audit 51 | 52 | - name: Run audit 53 | run: | 54 | if ! cargo audit -D warnings; then 55 | echo "::warning file=Cargo.toml,line=1,col=1,endColumn=1::Problems detected by cargo audit" 56 | fi 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # These are backup files generated by rustfmt 6 | **/*.rs.bk 7 | 8 | # Rls logs 9 | *.log 10 | -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | max_width = 85 2 | use_try_shorthand = true 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "adler2" 7 | version = "2.0.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 10 | 11 | [[package]] 12 | name = "ahash" 13 | version = "0.8.11" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 16 | dependencies = [ 17 | "cfg-if", 18 | "once_cell", 19 | "version_check", 20 | "zerocopy", 21 | ] 22 | 23 | [[package]] 24 | name = "aho-corasick" 25 | version = "1.1.3" 26 | source = "registry+https://github.com/rust-lang/crates.io-index" 27 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 28 | dependencies = [ 29 | "memchr", 30 | ] 31 | 32 | [[package]] 33 | name = "allocator-api2" 34 | version = "0.2.18" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 37 | 38 | [[package]] 39 | name = "android-tzdata" 40 | version = "0.1.1" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 43 | 44 | [[package]] 45 | name = "android_system_properties" 46 | version = "0.1.5" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 49 | dependencies = [ 50 | "libc", 51 | ] 52 | 53 | [[package]] 54 | name = "annotate-snippets" 55 | version = "0.11.4" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "24e35ed54e5ea7997c14ed4c70ba043478db1112e98263b3b035907aa197d991" 58 | dependencies = [ 59 | "anstyle", 60 | "unicode-width", 61 | ] 62 | 63 | [[package]] 64 | name = "anstream" 65 | version = "0.6.15" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" 68 | dependencies = [ 69 | "anstyle", 70 | "anstyle-parse", 71 | "anstyle-query", 72 | "anstyle-wincon", 73 | "colorchoice", 74 | "is_terminal_polyfill", 75 | "utf8parse", 76 | ] 77 | 78 | [[package]] 79 | name = "anstyle" 80 | version = "1.0.8" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" 83 | 84 | [[package]] 85 | name = "anstyle-lossy" 86 | version = "1.1.2" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "f45c79b3b9413932fc255f2c19ca0d48eaab72c4ea1913bafaebf289cbc099f2" 89 | dependencies = [ 90 | "anstyle", 91 | ] 92 | 93 | [[package]] 94 | name = "anstyle-parse" 95 | version = "0.2.5" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" 98 | dependencies = [ 99 | "utf8parse", 100 | ] 101 | 102 | [[package]] 103 | name = "anstyle-query" 104 | version = "1.1.1" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" 107 | dependencies = [ 108 | "windows-sys 0.52.0", 109 | ] 110 | 111 | [[package]] 112 | name = "anstyle-svg" 113 | version = "0.1.5" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "962f6d5681926dbe5503b71057202d6723a33abe464c983b1d160bca3095a3bb" 116 | dependencies = [ 117 | "anstream", 118 | "anstyle", 119 | "anstyle-lossy", 120 | "html-escape", 121 | "unicode-width", 122 | ] 123 | 124 | [[package]] 125 | name = "anstyle-wincon" 126 | version = "3.0.4" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" 129 | dependencies = [ 130 | "anstyle", 131 | "windows-sys 0.52.0", 132 | ] 133 | 134 | [[package]] 135 | name = "anyhow" 136 | version = "1.0.89" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" 139 | 140 | [[package]] 141 | name = "arc-swap" 142 | version = "1.7.1" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" 145 | 146 | [[package]] 147 | name = "autocfg" 148 | version = "1.3.0" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 151 | 152 | [[package]] 153 | name = "base16ct" 154 | version = "0.2.0" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 157 | 158 | [[package]] 159 | name = "base64" 160 | version = "0.22.1" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 163 | 164 | [[package]] 165 | name = "base64ct" 166 | version = "1.6.0" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 169 | 170 | [[package]] 171 | name = "bitflags" 172 | version = "2.6.0" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 175 | 176 | [[package]] 177 | name = "bitmaps" 178 | version = "2.1.0" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 181 | dependencies = [ 182 | "typenum", 183 | ] 184 | 185 | [[package]] 186 | name = "block-buffer" 187 | version = "0.10.4" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 190 | dependencies = [ 191 | "generic-array", 192 | ] 193 | 194 | [[package]] 195 | name = "bstr" 196 | version = "1.10.0" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" 199 | dependencies = [ 200 | "memchr", 201 | "regex-automata 0.4.7", 202 | "serde", 203 | ] 204 | 205 | [[package]] 206 | name = "bumpalo" 207 | version = "3.16.0" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 210 | 211 | [[package]] 212 | name = "bytecount" 213 | version = "0.6.8" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" 216 | 217 | [[package]] 218 | name = "byteorder" 219 | version = "1.5.0" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 222 | 223 | [[package]] 224 | name = "bytes" 225 | version = "1.7.1" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" 228 | 229 | [[package]] 230 | name = "bytesize" 231 | version = "1.3.0" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" 234 | 235 | [[package]] 236 | name = "cargo" 237 | version = "0.82.0" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "3077f09fce0bb105dce33dd4d191d7f08a574638ffc3c6625205adf25b899cb8" 240 | dependencies = [ 241 | "annotate-snippets", 242 | "anstream", 243 | "anstyle", 244 | "anyhow", 245 | "base64", 246 | "bytesize", 247 | "cargo-credential", 248 | "cargo-credential-libsecret", 249 | "cargo-credential-macos-keychain", 250 | "cargo-credential-wincred", 251 | "cargo-platform", 252 | "cargo-util", 253 | "cargo-util-schemas", 254 | "clap", 255 | "color-print", 256 | "crates-io", 257 | "curl", 258 | "curl-sys", 259 | "filetime", 260 | "flate2", 261 | "git2", 262 | "git2-curl", 263 | "gix", 264 | "glob", 265 | "hex", 266 | "hmac", 267 | "home", 268 | "http-auth", 269 | "humantime", 270 | "ignore", 271 | "im-rc", 272 | "indexmap", 273 | "itertools", 274 | "jobserver", 275 | "lazycell", 276 | "libc", 277 | "libgit2-sys", 278 | "memchr", 279 | "opener", 280 | "os_info", 281 | "pasetors", 282 | "pathdiff", 283 | "rand", 284 | "regex", 285 | "rusqlite", 286 | "rustfix", 287 | "same-file", 288 | "semver", 289 | "serde", 290 | "serde-untagged", 291 | "serde_ignored", 292 | "serde_json", 293 | "sha1", 294 | "shell-escape", 295 | "supports-hyperlinks", 296 | "supports-unicode", 297 | "tar", 298 | "tempfile", 299 | "time", 300 | "toml", 301 | "toml_edit", 302 | "tracing", 303 | "tracing-chrome", 304 | "tracing-subscriber", 305 | "unicase", 306 | "unicode-width", 307 | "url", 308 | "walkdir", 309 | "windows-sys 0.52.0", 310 | ] 311 | 312 | [[package]] 313 | name = "cargo-credential" 314 | version = "0.4.6" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "3a3e7c625670eacbefd48f552588c491eccc79a85a96898af13af7b312d1c4cd" 317 | dependencies = [ 318 | "anyhow", 319 | "libc", 320 | "serde", 321 | "serde_json", 322 | "thiserror", 323 | "time", 324 | "windows-sys 0.52.0", 325 | ] 326 | 327 | [[package]] 328 | name = "cargo-credential-libsecret" 329 | version = "0.4.7" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "508a82e6202bdb857bed8fabd67a29cdb2e5c3dd3eeb283da3e225da5a5c700d" 332 | dependencies = [ 333 | "anyhow", 334 | "cargo-credential", 335 | "libloading", 336 | ] 337 | 338 | [[package]] 339 | name = "cargo-credential-macos-keychain" 340 | version = "0.4.7" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "4635f2c8a02d08a16f8649672df1999f796c68bcd75784213a6495d8c190cddd" 343 | dependencies = [ 344 | "cargo-credential", 345 | "security-framework", 346 | ] 347 | 348 | [[package]] 349 | name = "cargo-credential-wincred" 350 | version = "0.4.7" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "a86ccaf9c6f49354e832c0eeb44b310ab953871fa2417d2e01ee3d153b310051" 353 | dependencies = [ 354 | "cargo-credential", 355 | "windows-sys 0.52.0", 356 | ] 357 | 358 | [[package]] 359 | name = "cargo-patch" 360 | version = "0.3.2" 361 | dependencies = [ 362 | "anyhow", 363 | "cargo", 364 | "cargo-test-macro", 365 | "cargo-test-support", 366 | "fs_extra", 367 | "patch", 368 | "semver", 369 | "toml", 370 | ] 371 | 372 | [[package]] 373 | name = "cargo-platform" 374 | version = "0.1.8" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" 377 | dependencies = [ 378 | "serde", 379 | ] 380 | 381 | [[package]] 382 | name = "cargo-test-macro" 383 | version = "0.3.0" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "82c6cbe0807294ca78d811d1e4995ddb6516c6c763c7a03493c4ba02b9e09215" 386 | 387 | [[package]] 388 | name = "cargo-test-support" 389 | version = "0.3.0" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "a816b64664799fb248c06ca28b989ee22ef6d9f83c0495e28954a56d4e9a27ba" 392 | dependencies = [ 393 | "anstream", 394 | "anstyle", 395 | "anyhow", 396 | "cargo-test-macro", 397 | "cargo-util", 398 | "crates-io", 399 | "filetime", 400 | "flate2", 401 | "git2", 402 | "glob", 403 | "itertools", 404 | "pasetors", 405 | "regex", 406 | "serde", 407 | "serde_json", 408 | "snapbox", 409 | "tar", 410 | "time", 411 | "toml", 412 | "url", 413 | "walkdir", 414 | "windows-sys 0.52.0", 415 | ] 416 | 417 | [[package]] 418 | name = "cargo-util" 419 | version = "0.2.14" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "cc680c90073156fb5280c0c0127b779eef1f6292e41f7d6621acba3041e81c7d" 422 | dependencies = [ 423 | "anyhow", 424 | "core-foundation", 425 | "filetime", 426 | "hex", 427 | "ignore", 428 | "jobserver", 429 | "libc", 430 | "miow", 431 | "same-file", 432 | "sha2", 433 | "shell-escape", 434 | "tempfile", 435 | "tracing", 436 | "walkdir", 437 | "windows-sys 0.52.0", 438 | ] 439 | 440 | [[package]] 441 | name = "cargo-util-schemas" 442 | version = "0.5.0" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "3c4ce793f650fc3f66d71df39c62a65b0bf9f87b908b9bb120cf9142c3960199" 445 | dependencies = [ 446 | "semver", 447 | "serde", 448 | "serde-untagged", 449 | "serde-value", 450 | "thiserror", 451 | "toml", 452 | "unicode-xid", 453 | "url", 454 | ] 455 | 456 | [[package]] 457 | name = "cc" 458 | version = "1.1.20" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "45bcde016d64c21da4be18b655631e5ab6d3107607e71a73a9f53eb48aae23fb" 461 | dependencies = [ 462 | "jobserver", 463 | "libc", 464 | "shlex", 465 | ] 466 | 467 | [[package]] 468 | name = "cfg-if" 469 | version = "1.0.0" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 472 | 473 | [[package]] 474 | name = "chrono" 475 | version = "0.4.38" 476 | source = "registry+https://github.com/rust-lang/crates.io-index" 477 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 478 | dependencies = [ 479 | "android-tzdata", 480 | "iana-time-zone", 481 | "js-sys", 482 | "num-traits", 483 | "wasm-bindgen", 484 | "windows-targets 0.52.6", 485 | ] 486 | 487 | [[package]] 488 | name = "clap" 489 | version = "4.5.17" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" 492 | dependencies = [ 493 | "clap_builder", 494 | ] 495 | 496 | [[package]] 497 | name = "clap_builder" 498 | version = "4.5.17" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" 501 | dependencies = [ 502 | "anstream", 503 | "anstyle", 504 | "clap_lex", 505 | "strsim", 506 | "terminal_size", 507 | ] 508 | 509 | [[package]] 510 | name = "clap_lex" 511 | version = "0.7.2" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" 514 | 515 | [[package]] 516 | name = "clru" 517 | version = "0.6.2" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" 520 | 521 | [[package]] 522 | name = "color-print" 523 | version = "0.3.6" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "1ee543c60ff3888934877a5671f45494dd27ed4ba25c6670b9a7576b7ed7a8c0" 526 | dependencies = [ 527 | "color-print-proc-macro", 528 | ] 529 | 530 | [[package]] 531 | name = "color-print-proc-macro" 532 | version = "0.3.6" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "77ff1a80c5f3cb1ca7c06ffdd71b6a6dd6d8f896c42141fbd43f50ed28dcdb93" 535 | dependencies = [ 536 | "nom", 537 | "proc-macro2", 538 | "quote", 539 | "syn", 540 | ] 541 | 542 | [[package]] 543 | name = "colorchoice" 544 | version = "1.0.2" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" 547 | 548 | [[package]] 549 | name = "const-oid" 550 | version = "0.9.6" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 553 | 554 | [[package]] 555 | name = "content_inspector" 556 | version = "0.2.4" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" 559 | dependencies = [ 560 | "memchr", 561 | ] 562 | 563 | [[package]] 564 | name = "core-foundation" 565 | version = "0.9.4" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 568 | dependencies = [ 569 | "core-foundation-sys", 570 | "libc", 571 | ] 572 | 573 | [[package]] 574 | name = "core-foundation-sys" 575 | version = "0.8.7" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 578 | 579 | [[package]] 580 | name = "cpufeatures" 581 | version = "0.2.14" 582 | source = "registry+https://github.com/rust-lang/crates.io-index" 583 | checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" 584 | dependencies = [ 585 | "libc", 586 | ] 587 | 588 | [[package]] 589 | name = "crates-io" 590 | version = "0.40.4" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "f0f4884a8a380811c8ef088e7caeb68caeb665ffdb91f7276069e3c7828f168a" 593 | dependencies = [ 594 | "curl", 595 | "percent-encoding", 596 | "serde", 597 | "serde_json", 598 | "thiserror", 599 | "url", 600 | ] 601 | 602 | [[package]] 603 | name = "crc32fast" 604 | version = "1.4.2" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 607 | dependencies = [ 608 | "cfg-if", 609 | ] 610 | 611 | [[package]] 612 | name = "crossbeam-channel" 613 | version = "0.5.13" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 616 | dependencies = [ 617 | "crossbeam-utils", 618 | ] 619 | 620 | [[package]] 621 | name = "crossbeam-deque" 622 | version = "0.8.5" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 625 | dependencies = [ 626 | "crossbeam-epoch", 627 | "crossbeam-utils", 628 | ] 629 | 630 | [[package]] 631 | name = "crossbeam-epoch" 632 | version = "0.9.18" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 635 | dependencies = [ 636 | "crossbeam-utils", 637 | ] 638 | 639 | [[package]] 640 | name = "crossbeam-utils" 641 | version = "0.8.20" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 644 | 645 | [[package]] 646 | name = "crypto-bigint" 647 | version = "0.5.5" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 650 | dependencies = [ 651 | "generic-array", 652 | "rand_core", 653 | "subtle", 654 | "zeroize", 655 | ] 656 | 657 | [[package]] 658 | name = "crypto-common" 659 | version = "0.1.6" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 662 | dependencies = [ 663 | "generic-array", 664 | "typenum", 665 | ] 666 | 667 | [[package]] 668 | name = "ct-codecs" 669 | version = "1.1.2" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" 672 | 673 | [[package]] 674 | name = "curl" 675 | version = "0.4.46" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" 678 | dependencies = [ 679 | "curl-sys", 680 | "libc", 681 | "openssl-probe", 682 | "openssl-sys", 683 | "schannel", 684 | "socket2", 685 | "windows-sys 0.52.0", 686 | ] 687 | 688 | [[package]] 689 | name = "curl-sys" 690 | version = "0.4.75+curl-8.10.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "2a4fd752d337342e4314717c0d9b6586b059a120c80029ebe4d49b11fec7875e" 693 | dependencies = [ 694 | "cc", 695 | "libc", 696 | "libnghttp2-sys", 697 | "libz-sys", 698 | "openssl-sys", 699 | "pkg-config", 700 | "vcpkg", 701 | "windows-sys 0.52.0", 702 | ] 703 | 704 | [[package]] 705 | name = "dbus" 706 | version = "0.9.7" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" 709 | dependencies = [ 710 | "libc", 711 | "libdbus-sys", 712 | "winapi", 713 | ] 714 | 715 | [[package]] 716 | name = "der" 717 | version = "0.7.9" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" 720 | dependencies = [ 721 | "const-oid", 722 | "pem-rfc7468", 723 | "zeroize", 724 | ] 725 | 726 | [[package]] 727 | name = "deranged" 728 | version = "0.3.11" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 731 | dependencies = [ 732 | "powerfmt", 733 | "serde", 734 | ] 735 | 736 | [[package]] 737 | name = "digest" 738 | version = "0.10.7" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 741 | dependencies = [ 742 | "block-buffer", 743 | "const-oid", 744 | "crypto-common", 745 | "subtle", 746 | ] 747 | 748 | [[package]] 749 | name = "dunce" 750 | version = "1.0.5" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 753 | 754 | [[package]] 755 | name = "ecdsa" 756 | version = "0.16.9" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 759 | dependencies = [ 760 | "der", 761 | "digest", 762 | "elliptic-curve", 763 | "rfc6979", 764 | "signature", 765 | "spki", 766 | ] 767 | 768 | [[package]] 769 | name = "ed25519-compact" 770 | version = "2.1.1" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" 773 | dependencies = [ 774 | "getrandom", 775 | ] 776 | 777 | [[package]] 778 | name = "either" 779 | version = "1.13.0" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 782 | 783 | [[package]] 784 | name = "elliptic-curve" 785 | version = "0.13.8" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 788 | dependencies = [ 789 | "base16ct", 790 | "crypto-bigint", 791 | "digest", 792 | "ff", 793 | "generic-array", 794 | "group", 795 | "hkdf", 796 | "pem-rfc7468", 797 | "pkcs8", 798 | "rand_core", 799 | "sec1", 800 | "subtle", 801 | "zeroize", 802 | ] 803 | 804 | [[package]] 805 | name = "encoding_rs" 806 | version = "0.8.34" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 809 | dependencies = [ 810 | "cfg-if", 811 | ] 812 | 813 | [[package]] 814 | name = "equivalent" 815 | version = "1.0.1" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 818 | 819 | [[package]] 820 | name = "erased-serde" 821 | version = "0.4.5" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" 824 | dependencies = [ 825 | "serde", 826 | "typeid", 827 | ] 828 | 829 | [[package]] 830 | name = "errno" 831 | version = "0.3.9" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 834 | dependencies = [ 835 | "libc", 836 | "windows-sys 0.52.0", 837 | ] 838 | 839 | [[package]] 840 | name = "fallible-iterator" 841 | version = "0.3.0" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 844 | 845 | [[package]] 846 | name = "fallible-streaming-iterator" 847 | version = "0.1.9" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" 850 | 851 | [[package]] 852 | name = "faster-hex" 853 | version = "0.9.0" 854 | source = "registry+https://github.com/rust-lang/crates.io-index" 855 | checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" 856 | 857 | [[package]] 858 | name = "fastrand" 859 | version = "2.1.1" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 862 | 863 | [[package]] 864 | name = "ff" 865 | version = "0.13.0" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" 868 | dependencies = [ 869 | "rand_core", 870 | "subtle", 871 | ] 872 | 873 | [[package]] 874 | name = "fiat-crypto" 875 | version = "0.2.9" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" 878 | 879 | [[package]] 880 | name = "filetime" 881 | version = "0.2.25" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 884 | dependencies = [ 885 | "cfg-if", 886 | "libc", 887 | "libredox", 888 | "windows-sys 0.59.0", 889 | ] 890 | 891 | [[package]] 892 | name = "flate2" 893 | version = "1.0.33" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" 896 | dependencies = [ 897 | "crc32fast", 898 | "libz-sys", 899 | "miniz_oxide", 900 | ] 901 | 902 | [[package]] 903 | name = "fnv" 904 | version = "1.0.7" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 907 | 908 | [[package]] 909 | name = "form_urlencoded" 910 | version = "1.2.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 913 | dependencies = [ 914 | "percent-encoding", 915 | ] 916 | 917 | [[package]] 918 | name = "fs_extra" 919 | version = "1.3.0" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 922 | 923 | [[package]] 924 | name = "generic-array" 925 | version = "0.14.7" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 928 | dependencies = [ 929 | "typenum", 930 | "version_check", 931 | "zeroize", 932 | ] 933 | 934 | [[package]] 935 | name = "getrandom" 936 | version = "0.2.15" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 939 | dependencies = [ 940 | "cfg-if", 941 | "js-sys", 942 | "libc", 943 | "wasi", 944 | "wasm-bindgen", 945 | ] 946 | 947 | [[package]] 948 | name = "git2" 949 | version = "0.19.0" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" 952 | dependencies = [ 953 | "bitflags", 954 | "libc", 955 | "libgit2-sys", 956 | "log", 957 | "openssl-probe", 958 | "openssl-sys", 959 | "url", 960 | ] 961 | 962 | [[package]] 963 | name = "git2-curl" 964 | version = "0.20.0" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "68ff14527a1c242320039b138376f8e0786697a1b7b172bc44f6efda3ab9079f" 967 | dependencies = [ 968 | "curl", 969 | "git2", 970 | "log", 971 | "url", 972 | ] 973 | 974 | [[package]] 975 | name = "gix" 976 | version = "0.64.0" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | checksum = "d78414d29fcc82329080166077e0f7689f4016551fdb334d787c3d040fe2634f" 979 | dependencies = [ 980 | "gix-actor", 981 | "gix-attributes", 982 | "gix-command", 983 | "gix-commitgraph", 984 | "gix-config", 985 | "gix-credentials", 986 | "gix-date 0.8.7", 987 | "gix-diff", 988 | "gix-dir", 989 | "gix-discover", 990 | "gix-features", 991 | "gix-filter", 992 | "gix-fs", 993 | "gix-glob", 994 | "gix-hash", 995 | "gix-hashtable", 996 | "gix-ignore", 997 | "gix-index", 998 | "gix-lock", 999 | "gix-macros", 1000 | "gix-negotiate", 1001 | "gix-object", 1002 | "gix-odb", 1003 | "gix-pack", 1004 | "gix-path", 1005 | "gix-pathspec", 1006 | "gix-prompt", 1007 | "gix-protocol", 1008 | "gix-ref", 1009 | "gix-refspec", 1010 | "gix-revision", 1011 | "gix-revwalk", 1012 | "gix-sec", 1013 | "gix-submodule", 1014 | "gix-tempfile", 1015 | "gix-trace", 1016 | "gix-transport", 1017 | "gix-traverse", 1018 | "gix-url", 1019 | "gix-utils", 1020 | "gix-validate", 1021 | "gix-worktree", 1022 | "once_cell", 1023 | "prodash", 1024 | "smallvec", 1025 | "thiserror", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "gix-actor" 1030 | version = "0.31.5" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "a0e454357e34b833cc3a00b6efbbd3dd4d18b24b9fb0c023876ec2645e8aa3f2" 1033 | dependencies = [ 1034 | "bstr", 1035 | "gix-date 0.8.7", 1036 | "gix-utils", 1037 | "itoa", 1038 | "thiserror", 1039 | "winnow", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "gix-attributes" 1044 | version = "0.22.5" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "ebccbf25aa4a973dd352564a9000af69edca90623e8a16dad9cbc03713131311" 1047 | dependencies = [ 1048 | "bstr", 1049 | "gix-glob", 1050 | "gix-path", 1051 | "gix-quote", 1052 | "gix-trace", 1053 | "kstring", 1054 | "smallvec", 1055 | "thiserror", 1056 | "unicode-bom", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "gix-bitmap" 1061 | version = "0.2.11" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "a371db66cbd4e13f0ed9dc4c0fea712d7276805fccc877f77e96374d317e87ae" 1064 | dependencies = [ 1065 | "thiserror", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "gix-chunk" 1070 | version = "0.4.8" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "45c8751169961ba7640b513c3b24af61aa962c967aaf04116734975cd5af0c52" 1073 | dependencies = [ 1074 | "thiserror", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "gix-command" 1079 | version = "0.3.9" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "dff2e692b36bbcf09286c70803006ca3fd56551a311de450be317a0ab8ea92e7" 1082 | dependencies = [ 1083 | "bstr", 1084 | "gix-path", 1085 | "gix-trace", 1086 | "shell-words", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "gix-commitgraph" 1091 | version = "0.24.3" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "133b06f67f565836ec0c473e2116a60fb74f80b6435e21d88013ac0e3c60fc78" 1094 | dependencies = [ 1095 | "bstr", 1096 | "gix-chunk", 1097 | "gix-features", 1098 | "gix-hash", 1099 | "memmap2", 1100 | "thiserror", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "gix-config" 1105 | version = "0.38.0" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "28f53fd03d1bf09ebcc2c8654f08969439c4556e644ca925f27cf033bc43e658" 1108 | dependencies = [ 1109 | "bstr", 1110 | "gix-config-value", 1111 | "gix-features", 1112 | "gix-glob", 1113 | "gix-path", 1114 | "gix-ref", 1115 | "gix-sec", 1116 | "memchr", 1117 | "once_cell", 1118 | "smallvec", 1119 | "thiserror", 1120 | "unicode-bom", 1121 | "winnow", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "gix-config-value" 1126 | version = "0.14.8" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "03f76169faa0dec598eac60f83d7fcdd739ec16596eca8fb144c88973dbe6f8c" 1129 | dependencies = [ 1130 | "bitflags", 1131 | "bstr", 1132 | "gix-path", 1133 | "libc", 1134 | "thiserror", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "gix-credentials" 1139 | version = "0.24.5" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "8ce391d305968782f1ae301c4a3d42c5701df7ff1d8bc03740300f6fd12bce78" 1142 | dependencies = [ 1143 | "bstr", 1144 | "gix-command", 1145 | "gix-config-value", 1146 | "gix-path", 1147 | "gix-prompt", 1148 | "gix-sec", 1149 | "gix-trace", 1150 | "gix-url", 1151 | "thiserror", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "gix-date" 1156 | version = "0.8.7" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "9eed6931f21491ee0aeb922751bd7ec97b4b2fe8fbfedcb678e2a2dce5f3b8c0" 1159 | dependencies = [ 1160 | "bstr", 1161 | "itoa", 1162 | "thiserror", 1163 | "time", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "gix-date" 1168 | version = "0.9.0" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "35c84b7af01e68daf7a6bb8bb909c1ff5edb3ce4326f1f43063a5a96d3c3c8a5" 1171 | dependencies = [ 1172 | "bstr", 1173 | "itoa", 1174 | "jiff", 1175 | "thiserror", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "gix-diff" 1180 | version = "0.44.1" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "1996d5c8a305b59709467d80617c9fde48d9d75fd1f4179ea970912630886c9d" 1183 | dependencies = [ 1184 | "bstr", 1185 | "gix-hash", 1186 | "gix-object", 1187 | "thiserror", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "gix-dir" 1192 | version = "0.6.0" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "0c975679aa00dd2d757bfd3ddb232e8a188c0094c3306400575a0813858b1365" 1195 | dependencies = [ 1196 | "bstr", 1197 | "gix-discover", 1198 | "gix-fs", 1199 | "gix-ignore", 1200 | "gix-index", 1201 | "gix-object", 1202 | "gix-path", 1203 | "gix-pathspec", 1204 | "gix-trace", 1205 | "gix-utils", 1206 | "gix-worktree", 1207 | "thiserror", 1208 | ] 1209 | 1210 | [[package]] 1211 | name = "gix-discover" 1212 | version = "0.33.0" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "67662731cec3cb31ba3ed2463809493f76d8e5d6c6d245de8b0560438c13450e" 1215 | dependencies = [ 1216 | "bstr", 1217 | "dunce", 1218 | "gix-fs", 1219 | "gix-hash", 1220 | "gix-path", 1221 | "gix-ref", 1222 | "gix-sec", 1223 | "thiserror", 1224 | ] 1225 | 1226 | [[package]] 1227 | name = "gix-features" 1228 | version = "0.38.2" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "ac7045ac9fe5f9c727f38799d002a7ed3583cd777e3322a7c4b43e3cf437dc69" 1231 | dependencies = [ 1232 | "bytes", 1233 | "crc32fast", 1234 | "crossbeam-channel", 1235 | "flate2", 1236 | "gix-hash", 1237 | "gix-trace", 1238 | "gix-utils", 1239 | "libc", 1240 | "once_cell", 1241 | "parking_lot", 1242 | "prodash", 1243 | "sha1_smol", 1244 | "thiserror", 1245 | "walkdir", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "gix-filter" 1250 | version = "0.11.3" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "e6547738da28275f4dff4e9f3a0f28509f53f94dd6bd822733c91cb306bca61a" 1253 | dependencies = [ 1254 | "bstr", 1255 | "encoding_rs", 1256 | "gix-attributes", 1257 | "gix-command", 1258 | "gix-hash", 1259 | "gix-object", 1260 | "gix-packetline-blocking", 1261 | "gix-path", 1262 | "gix-quote", 1263 | "gix-trace", 1264 | "gix-utils", 1265 | "smallvec", 1266 | "thiserror", 1267 | ] 1268 | 1269 | [[package]] 1270 | name = "gix-fs" 1271 | version = "0.11.3" 1272 | source = "registry+https://github.com/rust-lang/crates.io-index" 1273 | checksum = "f2bfe6249cfea6d0c0e0990d5226a4cb36f030444ba9e35e0639275db8f98575" 1274 | dependencies = [ 1275 | "fastrand", 1276 | "gix-features", 1277 | "gix-utils", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "gix-glob" 1282 | version = "0.16.5" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "74908b4bbc0a0a40852737e5d7889f676f081e340d5451a16e5b4c50d592f111" 1285 | dependencies = [ 1286 | "bitflags", 1287 | "bstr", 1288 | "gix-features", 1289 | "gix-path", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "gix-hash" 1294 | version = "0.14.2" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "f93d7df7366121b5018f947a04d37f034717e113dcf9ccd85c34b58e57a74d5e" 1297 | dependencies = [ 1298 | "faster-hex", 1299 | "thiserror", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "gix-hashtable" 1304 | version = "0.5.2" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "7ddf80e16f3c19ac06ce415a38b8591993d3f73aede049cb561becb5b3a8e242" 1307 | dependencies = [ 1308 | "gix-hash", 1309 | "hashbrown", 1310 | "parking_lot", 1311 | ] 1312 | 1313 | [[package]] 1314 | name = "gix-ignore" 1315 | version = "0.11.4" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | checksum = "e447cd96598460f5906a0f6c75e950a39f98c2705fc755ad2f2020c9e937fab7" 1318 | dependencies = [ 1319 | "bstr", 1320 | "gix-glob", 1321 | "gix-path", 1322 | "gix-trace", 1323 | "unicode-bom", 1324 | ] 1325 | 1326 | [[package]] 1327 | name = "gix-index" 1328 | version = "0.33.1" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "9a9a44eb55bd84bb48f8a44980e951968ced21e171b22d115d1cdcef82a7d73f" 1331 | dependencies = [ 1332 | "bitflags", 1333 | "bstr", 1334 | "filetime", 1335 | "fnv", 1336 | "gix-bitmap", 1337 | "gix-features", 1338 | "gix-fs", 1339 | "gix-hash", 1340 | "gix-lock", 1341 | "gix-object", 1342 | "gix-traverse", 1343 | "gix-utils", 1344 | "gix-validate", 1345 | "hashbrown", 1346 | "itoa", 1347 | "libc", 1348 | "memmap2", 1349 | "rustix", 1350 | "smallvec", 1351 | "thiserror", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "gix-lock" 1356 | version = "14.0.0" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "e3bc7fe297f1f4614774989c00ec8b1add59571dc9b024b4c00acb7dedd4e19d" 1359 | dependencies = [ 1360 | "gix-tempfile", 1361 | "gix-utils", 1362 | "thiserror", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "gix-macros" 1367 | version = "0.1.5" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "999ce923619f88194171a67fb3e6d613653b8d4d6078b529b15a765da0edcc17" 1370 | dependencies = [ 1371 | "proc-macro2", 1372 | "quote", 1373 | "syn", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "gix-negotiate" 1378 | version = "0.13.2" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "9ec879fb6307bb63519ba89be0024c6f61b4b9d61f1a91fd2ce572d89fe9c224" 1381 | dependencies = [ 1382 | "bitflags", 1383 | "gix-commitgraph", 1384 | "gix-date 0.8.7", 1385 | "gix-hash", 1386 | "gix-object", 1387 | "gix-revwalk", 1388 | "smallvec", 1389 | "thiserror", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "gix-object" 1394 | version = "0.42.3" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "25da2f46b4e7c2fa7b413ce4dffb87f69eaf89c2057e386491f4c55cadbfe386" 1397 | dependencies = [ 1398 | "bstr", 1399 | "gix-actor", 1400 | "gix-date 0.8.7", 1401 | "gix-features", 1402 | "gix-hash", 1403 | "gix-utils", 1404 | "gix-validate", 1405 | "itoa", 1406 | "smallvec", 1407 | "thiserror", 1408 | "winnow", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "gix-odb" 1413 | version = "0.61.1" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "20d384fe541d93d8a3bb7d5d5ef210780d6df4f50c4e684ccba32665a5e3bc9b" 1416 | dependencies = [ 1417 | "arc-swap", 1418 | "gix-date 0.8.7", 1419 | "gix-features", 1420 | "gix-fs", 1421 | "gix-hash", 1422 | "gix-object", 1423 | "gix-pack", 1424 | "gix-path", 1425 | "gix-quote", 1426 | "parking_lot", 1427 | "tempfile", 1428 | "thiserror", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "gix-pack" 1433 | version = "0.51.1" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "3e0594491fffe55df94ba1c111a6566b7f56b3f8d2e1efc750e77d572f5f5229" 1436 | dependencies = [ 1437 | "clru", 1438 | "gix-chunk", 1439 | "gix-features", 1440 | "gix-hash", 1441 | "gix-hashtable", 1442 | "gix-object", 1443 | "gix-path", 1444 | "gix-tempfile", 1445 | "memmap2", 1446 | "parking_lot", 1447 | "smallvec", 1448 | "thiserror", 1449 | ] 1450 | 1451 | [[package]] 1452 | name = "gix-packetline" 1453 | version = "0.17.6" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "8c43ef4d5fe2fa222c606731c8bdbf4481413ee4ef46d61340ec39e4df4c5e49" 1456 | dependencies = [ 1457 | "bstr", 1458 | "faster-hex", 1459 | "gix-trace", 1460 | "thiserror", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "gix-packetline-blocking" 1465 | version = "0.17.5" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "b9802304baa798dd6f5ff8008a2b6516d54b74a69ca2d3a2b9e2d6c3b5556b40" 1468 | dependencies = [ 1469 | "bstr", 1470 | "faster-hex", 1471 | "gix-trace", 1472 | "thiserror", 1473 | ] 1474 | 1475 | [[package]] 1476 | name = "gix-path" 1477 | version = "0.10.11" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "ebfc4febd088abdcbc9f1246896e57e37b7a34f6909840045a1767c6dafac7af" 1480 | dependencies = [ 1481 | "bstr", 1482 | "gix-trace", 1483 | "home", 1484 | "once_cell", 1485 | "thiserror", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "gix-pathspec" 1490 | version = "0.7.7" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "5d23bf239532b4414d0e63b8ab3a65481881f7237ed9647bb10c1e3cc54c5ceb" 1493 | dependencies = [ 1494 | "bitflags", 1495 | "bstr", 1496 | "gix-attributes", 1497 | "gix-config-value", 1498 | "gix-glob", 1499 | "gix-path", 1500 | "thiserror", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "gix-prompt" 1505 | version = "0.8.7" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "74fde865cdb46b30d8dad1293385d9bcf998d3a39cbf41bee67d0dab026fe6b1" 1508 | dependencies = [ 1509 | "gix-command", 1510 | "gix-config-value", 1511 | "parking_lot", 1512 | "rustix", 1513 | "thiserror", 1514 | ] 1515 | 1516 | [[package]] 1517 | name = "gix-protocol" 1518 | version = "0.45.3" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "cc43a1006f01b5efee22a003928c9eb83dde2f52779ded9d4c0732ad93164e3e" 1521 | dependencies = [ 1522 | "bstr", 1523 | "gix-credentials", 1524 | "gix-date 0.9.0", 1525 | "gix-features", 1526 | "gix-hash", 1527 | "gix-transport", 1528 | "gix-utils", 1529 | "maybe-async", 1530 | "thiserror", 1531 | "winnow", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "gix-quote" 1536 | version = "0.4.12" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "cbff4f9b9ea3fa7a25a70ee62f545143abef624ac6aa5884344e70c8b0a1d9ff" 1539 | dependencies = [ 1540 | "bstr", 1541 | "gix-utils", 1542 | "thiserror", 1543 | ] 1544 | 1545 | [[package]] 1546 | name = "gix-ref" 1547 | version = "0.45.0" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "636e96a0a5562715153fee098c217110c33a6f8218f08f4687ff99afde159bb5" 1550 | dependencies = [ 1551 | "gix-actor", 1552 | "gix-features", 1553 | "gix-fs", 1554 | "gix-hash", 1555 | "gix-lock", 1556 | "gix-object", 1557 | "gix-path", 1558 | "gix-tempfile", 1559 | "gix-utils", 1560 | "gix-validate", 1561 | "memmap2", 1562 | "thiserror", 1563 | "winnow", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "gix-refspec" 1568 | version = "0.23.1" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "6868f8cd2e62555d1f7c78b784bece43ace40dd2a462daf3b588d5416e603f37" 1571 | dependencies = [ 1572 | "bstr", 1573 | "gix-hash", 1574 | "gix-revision", 1575 | "gix-validate", 1576 | "smallvec", 1577 | "thiserror", 1578 | ] 1579 | 1580 | [[package]] 1581 | name = "gix-revision" 1582 | version = "0.27.2" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "01b13e43c2118c4b0537ddac7d0821ae0dfa90b7b8dbf20c711e153fb749adce" 1585 | dependencies = [ 1586 | "bstr", 1587 | "gix-date 0.8.7", 1588 | "gix-hash", 1589 | "gix-object", 1590 | "gix-revwalk", 1591 | "thiserror", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "gix-revwalk" 1596 | version = "0.13.2" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "1b030ccaab71af141f537e0225f19b9e74f25fefdba0372246b844491cab43e0" 1599 | dependencies = [ 1600 | "gix-commitgraph", 1601 | "gix-date 0.8.7", 1602 | "gix-hash", 1603 | "gix-hashtable", 1604 | "gix-object", 1605 | "smallvec", 1606 | "thiserror", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "gix-sec" 1611 | version = "0.10.8" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "0fe4d52f30a737bbece5276fab5d3a8b276dc2650df963e293d0673be34e7a5f" 1614 | dependencies = [ 1615 | "bitflags", 1616 | "gix-path", 1617 | "libc", 1618 | "windows-sys 0.52.0", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "gix-submodule" 1623 | version = "0.12.0" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "0f2e0f69aa00805e39d39ec80472a7e9da20ed5d73318b27925a2cc198e854fd" 1626 | dependencies = [ 1627 | "bstr", 1628 | "gix-config", 1629 | "gix-path", 1630 | "gix-pathspec", 1631 | "gix-refspec", 1632 | "gix-url", 1633 | "thiserror", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "gix-tempfile" 1638 | version = "14.0.2" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "046b4927969fa816a150a0cda2e62c80016fe11fb3c3184e4dddf4e542f108aa" 1641 | dependencies = [ 1642 | "gix-fs", 1643 | "libc", 1644 | "once_cell", 1645 | "parking_lot", 1646 | "tempfile", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "gix-trace" 1651 | version = "0.1.10" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "6cae0e8661c3ff92688ce1c8b8058b3efb312aba9492bbe93661a21705ab431b" 1654 | 1655 | [[package]] 1656 | name = "gix-transport" 1657 | version = "0.42.3" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "421dcccab01b41a15d97b226ad97a8f9262295044e34fbd37b10e493b0a6481f" 1660 | dependencies = [ 1661 | "base64", 1662 | "bstr", 1663 | "curl", 1664 | "gix-command", 1665 | "gix-credentials", 1666 | "gix-features", 1667 | "gix-packetline", 1668 | "gix-quote", 1669 | "gix-sec", 1670 | "gix-url", 1671 | "thiserror", 1672 | ] 1673 | 1674 | [[package]] 1675 | name = "gix-traverse" 1676 | version = "0.39.2" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "e499a18c511e71cf4a20413b743b9f5bcf64b3d9e81e9c3c6cd399eae55a8840" 1679 | dependencies = [ 1680 | "bitflags", 1681 | "gix-commitgraph", 1682 | "gix-date 0.8.7", 1683 | "gix-hash", 1684 | "gix-hashtable", 1685 | "gix-object", 1686 | "gix-revwalk", 1687 | "smallvec", 1688 | "thiserror", 1689 | ] 1690 | 1691 | [[package]] 1692 | name = "gix-url" 1693 | version = "0.27.5" 1694 | source = "registry+https://github.com/rust-lang/crates.io-index" 1695 | checksum = "fd280c5e84fb22e128ed2a053a0daeacb6379469be6a85e3d518a0636e160c89" 1696 | dependencies = [ 1697 | "bstr", 1698 | "gix-features", 1699 | "gix-path", 1700 | "home", 1701 | "thiserror", 1702 | "url", 1703 | ] 1704 | 1705 | [[package]] 1706 | name = "gix-utils" 1707 | version = "0.1.12" 1708 | source = "registry+https://github.com/rust-lang/crates.io-index" 1709 | checksum = "35192df7fd0fa112263bad8021e2df7167df4cc2a6e6d15892e1e55621d3d4dc" 1710 | dependencies = [ 1711 | "bstr", 1712 | "fastrand", 1713 | "unicode-normalization", 1714 | ] 1715 | 1716 | [[package]] 1717 | name = "gix-validate" 1718 | version = "0.8.5" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "82c27dd34a49b1addf193c92070bcbf3beaf6e10f16a78544de6372e146a0acf" 1721 | dependencies = [ 1722 | "bstr", 1723 | "thiserror", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "gix-worktree" 1728 | version = "0.34.1" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "26f7326ebe0b9172220694ea69d344c536009a9b98fb0f9de092c440f3efe7a6" 1731 | dependencies = [ 1732 | "bstr", 1733 | "gix-attributes", 1734 | "gix-features", 1735 | "gix-fs", 1736 | "gix-glob", 1737 | "gix-hash", 1738 | "gix-ignore", 1739 | "gix-index", 1740 | "gix-object", 1741 | "gix-path", 1742 | "gix-validate", 1743 | ] 1744 | 1745 | [[package]] 1746 | name = "glob" 1747 | version = "0.3.1" 1748 | source = "registry+https://github.com/rust-lang/crates.io-index" 1749 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 1750 | 1751 | [[package]] 1752 | name = "globset" 1753 | version = "0.4.15" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" 1756 | dependencies = [ 1757 | "aho-corasick", 1758 | "bstr", 1759 | "log", 1760 | "regex-automata 0.4.7", 1761 | "regex-syntax 0.8.4", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "group" 1766 | version = "0.13.0" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1769 | dependencies = [ 1770 | "ff", 1771 | "rand_core", 1772 | "subtle", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "hashbrown" 1777 | version = "0.14.5" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1780 | dependencies = [ 1781 | "ahash", 1782 | "allocator-api2", 1783 | ] 1784 | 1785 | [[package]] 1786 | name = "hashlink" 1787 | version = "0.9.1" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" 1790 | dependencies = [ 1791 | "hashbrown", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "hex" 1796 | version = "0.4.3" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1799 | 1800 | [[package]] 1801 | name = "hkdf" 1802 | version = "0.12.4" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 1805 | dependencies = [ 1806 | "hmac", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "hmac" 1811 | version = "0.12.1" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1814 | dependencies = [ 1815 | "digest", 1816 | ] 1817 | 1818 | [[package]] 1819 | name = "home" 1820 | version = "0.5.9" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 1823 | dependencies = [ 1824 | "windows-sys 0.52.0", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "html-escape" 1829 | version = "0.2.13" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" 1832 | dependencies = [ 1833 | "utf8-width", 1834 | ] 1835 | 1836 | [[package]] 1837 | name = "http-auth" 1838 | version = "0.1.10" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "150fa4a9462ef926824cf4519c84ed652ca8f4fbae34cb8af045b5cbcaf98822" 1841 | dependencies = [ 1842 | "memchr", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "humantime" 1847 | version = "2.1.0" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1850 | 1851 | [[package]] 1852 | name = "iana-time-zone" 1853 | version = "0.1.61" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1856 | dependencies = [ 1857 | "android_system_properties", 1858 | "core-foundation-sys", 1859 | "iana-time-zone-haiku", 1860 | "js-sys", 1861 | "wasm-bindgen", 1862 | "windows-core", 1863 | ] 1864 | 1865 | [[package]] 1866 | name = "iana-time-zone-haiku" 1867 | version = "0.1.2" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1870 | dependencies = [ 1871 | "cc", 1872 | ] 1873 | 1874 | [[package]] 1875 | name = "idna" 1876 | version = "0.5.0" 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" 1878 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1879 | dependencies = [ 1880 | "unicode-bidi", 1881 | "unicode-normalization", 1882 | ] 1883 | 1884 | [[package]] 1885 | name = "ignore" 1886 | version = "0.4.23" 1887 | source = "registry+https://github.com/rust-lang/crates.io-index" 1888 | checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" 1889 | dependencies = [ 1890 | "crossbeam-deque", 1891 | "globset", 1892 | "log", 1893 | "memchr", 1894 | "regex-automata 0.4.7", 1895 | "same-file", 1896 | "walkdir", 1897 | "winapi-util", 1898 | ] 1899 | 1900 | [[package]] 1901 | name = "im-rc" 1902 | version = "15.1.0" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe" 1905 | dependencies = [ 1906 | "bitmaps", 1907 | "rand_core", 1908 | "rand_xoshiro", 1909 | "sized-chunks", 1910 | "typenum", 1911 | "version_check", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "indexmap" 1916 | version = "2.5.0" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" 1919 | dependencies = [ 1920 | "equivalent", 1921 | "hashbrown", 1922 | ] 1923 | 1924 | [[package]] 1925 | name = "is_terminal_polyfill" 1926 | version = "1.70.1" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1929 | 1930 | [[package]] 1931 | name = "itertools" 1932 | version = "0.13.0" 1933 | source = "registry+https://github.com/rust-lang/crates.io-index" 1934 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 1935 | dependencies = [ 1936 | "either", 1937 | ] 1938 | 1939 | [[package]] 1940 | name = "itoa" 1941 | version = "1.0.11" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1944 | 1945 | [[package]] 1946 | name = "jiff" 1947 | version = "0.1.13" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "8a45489186a6123c128fdf6016183fcfab7113e1820eb813127e036e287233fb" 1950 | dependencies = [ 1951 | "jiff-tzdb-platform", 1952 | "windows-sys 0.59.0", 1953 | ] 1954 | 1955 | [[package]] 1956 | name = "jiff-tzdb" 1957 | version = "0.1.1" 1958 | source = "registry+https://github.com/rust-lang/crates.io-index" 1959 | checksum = "91335e575850c5c4c673b9bd467b0e025f164ca59d0564f69d0c2ee0ffad4653" 1960 | 1961 | [[package]] 1962 | name = "jiff-tzdb-platform" 1963 | version = "0.1.1" 1964 | source = "registry+https://github.com/rust-lang/crates.io-index" 1965 | checksum = "9835f0060a626fe59f160437bc725491a6af23133ea906500027d1bd2f8f4329" 1966 | dependencies = [ 1967 | "jiff-tzdb", 1968 | ] 1969 | 1970 | [[package]] 1971 | name = "jobserver" 1972 | version = "0.1.32" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1975 | dependencies = [ 1976 | "libc", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "js-sys" 1981 | version = "0.3.70" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" 1984 | dependencies = [ 1985 | "wasm-bindgen", 1986 | ] 1987 | 1988 | [[package]] 1989 | name = "kstring" 1990 | version = "2.0.2" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" 1993 | dependencies = [ 1994 | "static_assertions", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "lazy_static" 1999 | version = "1.5.0" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2002 | 2003 | [[package]] 2004 | name = "lazycell" 2005 | version = "1.3.0" 2006 | source = "registry+https://github.com/rust-lang/crates.io-index" 2007 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 2008 | 2009 | [[package]] 2010 | name = "libc" 2011 | version = "0.2.158" 2012 | source = "registry+https://github.com/rust-lang/crates.io-index" 2013 | checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" 2014 | 2015 | [[package]] 2016 | name = "libdbus-sys" 2017 | version = "0.2.5" 2018 | source = "registry+https://github.com/rust-lang/crates.io-index" 2019 | checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" 2020 | dependencies = [ 2021 | "cc", 2022 | "pkg-config", 2023 | ] 2024 | 2025 | [[package]] 2026 | name = "libgit2-sys" 2027 | version = "0.17.0+1.8.1" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" 2030 | dependencies = [ 2031 | "cc", 2032 | "libc", 2033 | "libssh2-sys", 2034 | "libz-sys", 2035 | "openssl-sys", 2036 | "pkg-config", 2037 | ] 2038 | 2039 | [[package]] 2040 | name = "libloading" 2041 | version = "0.8.5" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" 2044 | dependencies = [ 2045 | "cfg-if", 2046 | "windows-targets 0.52.6", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "libnghttp2-sys" 2051 | version = "0.1.10+1.61.0" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" 2054 | dependencies = [ 2055 | "cc", 2056 | "libc", 2057 | ] 2058 | 2059 | [[package]] 2060 | name = "libredox" 2061 | version = "0.1.3" 2062 | source = "registry+https://github.com/rust-lang/crates.io-index" 2063 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 2064 | dependencies = [ 2065 | "bitflags", 2066 | "libc", 2067 | "redox_syscall", 2068 | ] 2069 | 2070 | [[package]] 2071 | name = "libsqlite3-sys" 2072 | version = "0.28.0" 2073 | source = "registry+https://github.com/rust-lang/crates.io-index" 2074 | checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" 2075 | dependencies = [ 2076 | "cc", 2077 | "pkg-config", 2078 | "vcpkg", 2079 | ] 2080 | 2081 | [[package]] 2082 | name = "libssh2-sys" 2083 | version = "0.3.0" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" 2086 | dependencies = [ 2087 | "cc", 2088 | "libc", 2089 | "libz-sys", 2090 | "openssl-sys", 2091 | "pkg-config", 2092 | "vcpkg", 2093 | ] 2094 | 2095 | [[package]] 2096 | name = "libz-sys" 2097 | version = "1.1.20" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" 2100 | dependencies = [ 2101 | "cc", 2102 | "libc", 2103 | "pkg-config", 2104 | "vcpkg", 2105 | ] 2106 | 2107 | [[package]] 2108 | name = "linux-raw-sys" 2109 | version = "0.4.14" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 2112 | 2113 | [[package]] 2114 | name = "lock_api" 2115 | version = "0.4.12" 2116 | source = "registry+https://github.com/rust-lang/crates.io-index" 2117 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 2118 | dependencies = [ 2119 | "autocfg", 2120 | "scopeguard", 2121 | ] 2122 | 2123 | [[package]] 2124 | name = "log" 2125 | version = "0.4.22" 2126 | source = "registry+https://github.com/rust-lang/crates.io-index" 2127 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 2128 | 2129 | [[package]] 2130 | name = "matchers" 2131 | version = "0.1.0" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 2134 | dependencies = [ 2135 | "regex-automata 0.1.10", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "maybe-async" 2140 | version = "0.2.10" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 2143 | dependencies = [ 2144 | "proc-macro2", 2145 | "quote", 2146 | "syn", 2147 | ] 2148 | 2149 | [[package]] 2150 | name = "memchr" 2151 | version = "2.7.4" 2152 | source = "registry+https://github.com/rust-lang/crates.io-index" 2153 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 2154 | 2155 | [[package]] 2156 | name = "memmap2" 2157 | version = "0.9.5" 2158 | source = "registry+https://github.com/rust-lang/crates.io-index" 2159 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 2160 | dependencies = [ 2161 | "libc", 2162 | ] 2163 | 2164 | [[package]] 2165 | name = "minimal-lexical" 2166 | version = "0.2.1" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2169 | 2170 | [[package]] 2171 | name = "miniz_oxide" 2172 | version = "0.8.0" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 2175 | dependencies = [ 2176 | "adler2", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "miow" 2181 | version = "0.6.0" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" 2184 | dependencies = [ 2185 | "windows-sys 0.48.0", 2186 | ] 2187 | 2188 | [[package]] 2189 | name = "nom" 2190 | version = "7.1.3" 2191 | source = "registry+https://github.com/rust-lang/crates.io-index" 2192 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2193 | dependencies = [ 2194 | "memchr", 2195 | "minimal-lexical", 2196 | ] 2197 | 2198 | [[package]] 2199 | name = "nom_locate" 2200 | version = "4.2.0" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "1e3c83c053b0713da60c5b8de47fe8e494fe3ece5267b2f23090a07a053ba8f3" 2203 | dependencies = [ 2204 | "bytecount", 2205 | "memchr", 2206 | "nom", 2207 | ] 2208 | 2209 | [[package]] 2210 | name = "normalize-line-endings" 2211 | version = "0.3.0" 2212 | source = "registry+https://github.com/rust-lang/crates.io-index" 2213 | checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" 2214 | 2215 | [[package]] 2216 | name = "normpath" 2217 | version = "1.3.0" 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" 2219 | checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" 2220 | dependencies = [ 2221 | "windows-sys 0.59.0", 2222 | ] 2223 | 2224 | [[package]] 2225 | name = "nu-ansi-term" 2226 | version = "0.46.0" 2227 | source = "registry+https://github.com/rust-lang/crates.io-index" 2228 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 2229 | dependencies = [ 2230 | "overload", 2231 | "winapi", 2232 | ] 2233 | 2234 | [[package]] 2235 | name = "num-conv" 2236 | version = "0.1.0" 2237 | source = "registry+https://github.com/rust-lang/crates.io-index" 2238 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2239 | 2240 | [[package]] 2241 | name = "num-traits" 2242 | version = "0.2.19" 2243 | source = "registry+https://github.com/rust-lang/crates.io-index" 2244 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2245 | dependencies = [ 2246 | "autocfg", 2247 | ] 2248 | 2249 | [[package]] 2250 | name = "num_threads" 2251 | version = "0.1.7" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2254 | dependencies = [ 2255 | "libc", 2256 | ] 2257 | 2258 | [[package]] 2259 | name = "once_cell" 2260 | version = "1.19.0" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 2263 | 2264 | [[package]] 2265 | name = "opener" 2266 | version = "0.7.2" 2267 | source = "registry+https://github.com/rust-lang/crates.io-index" 2268 | checksum = "d0812e5e4df08da354c851a3376fead46db31c2214f849d3de356d774d057681" 2269 | dependencies = [ 2270 | "bstr", 2271 | "dbus", 2272 | "normpath", 2273 | "windows-sys 0.59.0", 2274 | ] 2275 | 2276 | [[package]] 2277 | name = "openssl-probe" 2278 | version = "0.1.5" 2279 | source = "registry+https://github.com/rust-lang/crates.io-index" 2280 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2281 | 2282 | [[package]] 2283 | name = "openssl-sys" 2284 | version = "0.9.103" 2285 | source = "registry+https://github.com/rust-lang/crates.io-index" 2286 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" 2287 | dependencies = [ 2288 | "cc", 2289 | "libc", 2290 | "pkg-config", 2291 | "vcpkg", 2292 | ] 2293 | 2294 | [[package]] 2295 | name = "ordered-float" 2296 | version = "2.10.1" 2297 | source = "registry+https://github.com/rust-lang/crates.io-index" 2298 | checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" 2299 | dependencies = [ 2300 | "num-traits", 2301 | ] 2302 | 2303 | [[package]] 2304 | name = "orion" 2305 | version = "0.17.7" 2306 | source = "registry+https://github.com/rust-lang/crates.io-index" 2307 | checksum = "97ab5415cf60cd271259e576f2ddee7a5f9fed42659035224c01af766943fad3" 2308 | dependencies = [ 2309 | "fiat-crypto", 2310 | "subtle", 2311 | "zeroize", 2312 | ] 2313 | 2314 | [[package]] 2315 | name = "os_info" 2316 | version = "3.8.2" 2317 | source = "registry+https://github.com/rust-lang/crates.io-index" 2318 | checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" 2319 | dependencies = [ 2320 | "log", 2321 | "windows-sys 0.52.0", 2322 | ] 2323 | 2324 | [[package]] 2325 | name = "overload" 2326 | version = "0.1.1" 2327 | source = "registry+https://github.com/rust-lang/crates.io-index" 2328 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 2329 | 2330 | [[package]] 2331 | name = "p384" 2332 | version = "0.13.0" 2333 | source = "registry+https://github.com/rust-lang/crates.io-index" 2334 | checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" 2335 | dependencies = [ 2336 | "ecdsa", 2337 | "elliptic-curve", 2338 | "primeorder", 2339 | "sha2", 2340 | ] 2341 | 2342 | [[package]] 2343 | name = "parking_lot" 2344 | version = "0.12.3" 2345 | source = "registry+https://github.com/rust-lang/crates.io-index" 2346 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2347 | dependencies = [ 2348 | "lock_api", 2349 | "parking_lot_core", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "parking_lot_core" 2354 | version = "0.9.10" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2357 | dependencies = [ 2358 | "cfg-if", 2359 | "libc", 2360 | "redox_syscall", 2361 | "smallvec", 2362 | "windows-targets 0.52.6", 2363 | ] 2364 | 2365 | [[package]] 2366 | name = "pasetors" 2367 | version = "0.6.8" 2368 | source = "registry+https://github.com/rust-lang/crates.io-index" 2369 | checksum = "6b36d47c66f2230dd1b7143d9afb2b4891879020210eddf2ccb624e529b96dba" 2370 | dependencies = [ 2371 | "ct-codecs", 2372 | "ed25519-compact", 2373 | "getrandom", 2374 | "orion", 2375 | "p384", 2376 | "rand_core", 2377 | "regex", 2378 | "serde", 2379 | "serde_json", 2380 | "sha2", 2381 | "subtle", 2382 | "time", 2383 | "zeroize", 2384 | ] 2385 | 2386 | [[package]] 2387 | name = "patch" 2388 | version = "0.7.0" 2389 | source = "registry+https://github.com/rust-lang/crates.io-index" 2390 | checksum = "15c07fdcdd8b05bdcf2a25bc195b6c34cbd52762ada9dba88bf81e7686d14e7a" 2391 | dependencies = [ 2392 | "chrono", 2393 | "nom", 2394 | "nom_locate", 2395 | ] 2396 | 2397 | [[package]] 2398 | name = "pathdiff" 2399 | version = "0.2.1" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" 2402 | 2403 | [[package]] 2404 | name = "pem-rfc7468" 2405 | version = "0.7.0" 2406 | source = "registry+https://github.com/rust-lang/crates.io-index" 2407 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 2408 | dependencies = [ 2409 | "base64ct", 2410 | ] 2411 | 2412 | [[package]] 2413 | name = "percent-encoding" 2414 | version = "2.3.1" 2415 | source = "registry+https://github.com/rust-lang/crates.io-index" 2416 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2417 | 2418 | [[package]] 2419 | name = "pin-project-lite" 2420 | version = "0.2.14" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 2423 | 2424 | [[package]] 2425 | name = "pkcs8" 2426 | version = "0.10.2" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2429 | dependencies = [ 2430 | "der", 2431 | "spki", 2432 | ] 2433 | 2434 | [[package]] 2435 | name = "pkg-config" 2436 | version = "0.3.30" 2437 | source = "registry+https://github.com/rust-lang/crates.io-index" 2438 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 2439 | 2440 | [[package]] 2441 | name = "powerfmt" 2442 | version = "0.2.0" 2443 | source = "registry+https://github.com/rust-lang/crates.io-index" 2444 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2445 | 2446 | [[package]] 2447 | name = "ppv-lite86" 2448 | version = "0.2.20" 2449 | source = "registry+https://github.com/rust-lang/crates.io-index" 2450 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 2451 | dependencies = [ 2452 | "zerocopy", 2453 | ] 2454 | 2455 | [[package]] 2456 | name = "primeorder" 2457 | version = "0.13.6" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" 2460 | dependencies = [ 2461 | "elliptic-curve", 2462 | ] 2463 | 2464 | [[package]] 2465 | name = "proc-macro2" 2466 | version = "1.0.86" 2467 | source = "registry+https://github.com/rust-lang/crates.io-index" 2468 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 2469 | dependencies = [ 2470 | "unicode-ident", 2471 | ] 2472 | 2473 | [[package]] 2474 | name = "prodash" 2475 | version = "28.0.0" 2476 | source = "registry+https://github.com/rust-lang/crates.io-index" 2477 | checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79" 2478 | dependencies = [ 2479 | "parking_lot", 2480 | ] 2481 | 2482 | [[package]] 2483 | name = "quote" 2484 | version = "1.0.37" 2485 | source = "registry+https://github.com/rust-lang/crates.io-index" 2486 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 2487 | dependencies = [ 2488 | "proc-macro2", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "rand" 2493 | version = "0.8.5" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2496 | dependencies = [ 2497 | "libc", 2498 | "rand_chacha", 2499 | "rand_core", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "rand_chacha" 2504 | version = "0.3.1" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2507 | dependencies = [ 2508 | "ppv-lite86", 2509 | "rand_core", 2510 | ] 2511 | 2512 | [[package]] 2513 | name = "rand_core" 2514 | version = "0.6.4" 2515 | source = "registry+https://github.com/rust-lang/crates.io-index" 2516 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2517 | dependencies = [ 2518 | "getrandom", 2519 | ] 2520 | 2521 | [[package]] 2522 | name = "rand_xoshiro" 2523 | version = "0.6.0" 2524 | source = "registry+https://github.com/rust-lang/crates.io-index" 2525 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 2526 | dependencies = [ 2527 | "rand_core", 2528 | ] 2529 | 2530 | [[package]] 2531 | name = "redox_syscall" 2532 | version = "0.5.4" 2533 | source = "registry+https://github.com/rust-lang/crates.io-index" 2534 | checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" 2535 | dependencies = [ 2536 | "bitflags", 2537 | ] 2538 | 2539 | [[package]] 2540 | name = "regex" 2541 | version = "1.10.6" 2542 | source = "registry+https://github.com/rust-lang/crates.io-index" 2543 | checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" 2544 | dependencies = [ 2545 | "aho-corasick", 2546 | "memchr", 2547 | "regex-automata 0.4.7", 2548 | "regex-syntax 0.8.4", 2549 | ] 2550 | 2551 | [[package]] 2552 | name = "regex-automata" 2553 | version = "0.1.10" 2554 | source = "registry+https://github.com/rust-lang/crates.io-index" 2555 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2556 | dependencies = [ 2557 | "regex-syntax 0.6.29", 2558 | ] 2559 | 2560 | [[package]] 2561 | name = "regex-automata" 2562 | version = "0.4.7" 2563 | source = "registry+https://github.com/rust-lang/crates.io-index" 2564 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 2565 | dependencies = [ 2566 | "aho-corasick", 2567 | "memchr", 2568 | "regex-syntax 0.8.4", 2569 | ] 2570 | 2571 | [[package]] 2572 | name = "regex-syntax" 2573 | version = "0.6.29" 2574 | source = "registry+https://github.com/rust-lang/crates.io-index" 2575 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 2576 | 2577 | [[package]] 2578 | name = "regex-syntax" 2579 | version = "0.8.4" 2580 | source = "registry+https://github.com/rust-lang/crates.io-index" 2581 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 2582 | 2583 | [[package]] 2584 | name = "rfc6979" 2585 | version = "0.4.0" 2586 | source = "registry+https://github.com/rust-lang/crates.io-index" 2587 | checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 2588 | dependencies = [ 2589 | "hmac", 2590 | "subtle", 2591 | ] 2592 | 2593 | [[package]] 2594 | name = "rusqlite" 2595 | version = "0.31.0" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" 2598 | dependencies = [ 2599 | "bitflags", 2600 | "fallible-iterator", 2601 | "fallible-streaming-iterator", 2602 | "hashlink", 2603 | "libsqlite3-sys", 2604 | "smallvec", 2605 | ] 2606 | 2607 | [[package]] 2608 | name = "rustfix" 2609 | version = "0.8.5" 2610 | source = "registry+https://github.com/rust-lang/crates.io-index" 2611 | checksum = "70f5b7fc8060f4f8373f9381a630304b42e1183535d9beb1d3f596b236c9106a" 2612 | dependencies = [ 2613 | "serde", 2614 | "serde_json", 2615 | "thiserror", 2616 | "tracing", 2617 | ] 2618 | 2619 | [[package]] 2620 | name = "rustix" 2621 | version = "0.38.37" 2622 | source = "registry+https://github.com/rust-lang/crates.io-index" 2623 | checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" 2624 | dependencies = [ 2625 | "bitflags", 2626 | "errno", 2627 | "libc", 2628 | "linux-raw-sys", 2629 | "windows-sys 0.52.0", 2630 | ] 2631 | 2632 | [[package]] 2633 | name = "ryu" 2634 | version = "1.0.18" 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" 2636 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 2637 | 2638 | [[package]] 2639 | name = "same-file" 2640 | version = "1.0.6" 2641 | source = "registry+https://github.com/rust-lang/crates.io-index" 2642 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2643 | dependencies = [ 2644 | "winapi-util", 2645 | ] 2646 | 2647 | [[package]] 2648 | name = "schannel" 2649 | version = "0.1.24" 2650 | source = "registry+https://github.com/rust-lang/crates.io-index" 2651 | checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" 2652 | dependencies = [ 2653 | "windows-sys 0.59.0", 2654 | ] 2655 | 2656 | [[package]] 2657 | name = "scopeguard" 2658 | version = "1.2.0" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2661 | 2662 | [[package]] 2663 | name = "sec1" 2664 | version = "0.7.3" 2665 | source = "registry+https://github.com/rust-lang/crates.io-index" 2666 | checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 2667 | dependencies = [ 2668 | "base16ct", 2669 | "der", 2670 | "generic-array", 2671 | "pkcs8", 2672 | "subtle", 2673 | "zeroize", 2674 | ] 2675 | 2676 | [[package]] 2677 | name = "security-framework" 2678 | version = "2.11.1" 2679 | source = "registry+https://github.com/rust-lang/crates.io-index" 2680 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2681 | dependencies = [ 2682 | "bitflags", 2683 | "core-foundation", 2684 | "core-foundation-sys", 2685 | "libc", 2686 | "security-framework-sys", 2687 | ] 2688 | 2689 | [[package]] 2690 | name = "security-framework-sys" 2691 | version = "2.11.1" 2692 | source = "registry+https://github.com/rust-lang/crates.io-index" 2693 | checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" 2694 | dependencies = [ 2695 | "core-foundation-sys", 2696 | "libc", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "semver" 2701 | version = "1.0.23" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 2704 | dependencies = [ 2705 | "serde", 2706 | ] 2707 | 2708 | [[package]] 2709 | name = "serde" 2710 | version = "1.0.210" 2711 | source = "registry+https://github.com/rust-lang/crates.io-index" 2712 | checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" 2713 | dependencies = [ 2714 | "serde_derive", 2715 | ] 2716 | 2717 | [[package]] 2718 | name = "serde-untagged" 2719 | version = "0.1.6" 2720 | source = "registry+https://github.com/rust-lang/crates.io-index" 2721 | checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" 2722 | dependencies = [ 2723 | "erased-serde", 2724 | "serde", 2725 | "typeid", 2726 | ] 2727 | 2728 | [[package]] 2729 | name = "serde-value" 2730 | version = "0.7.0" 2731 | source = "registry+https://github.com/rust-lang/crates.io-index" 2732 | checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" 2733 | dependencies = [ 2734 | "ordered-float", 2735 | "serde", 2736 | ] 2737 | 2738 | [[package]] 2739 | name = "serde_derive" 2740 | version = "1.0.210" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" 2743 | dependencies = [ 2744 | "proc-macro2", 2745 | "quote", 2746 | "syn", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "serde_ignored" 2751 | version = "0.1.10" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" 2754 | dependencies = [ 2755 | "serde", 2756 | ] 2757 | 2758 | [[package]] 2759 | name = "serde_json" 2760 | version = "1.0.128" 2761 | source = "registry+https://github.com/rust-lang/crates.io-index" 2762 | checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" 2763 | dependencies = [ 2764 | "itoa", 2765 | "memchr", 2766 | "ryu", 2767 | "serde", 2768 | ] 2769 | 2770 | [[package]] 2771 | name = "serde_spanned" 2772 | version = "0.6.7" 2773 | source = "registry+https://github.com/rust-lang/crates.io-index" 2774 | checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" 2775 | dependencies = [ 2776 | "serde", 2777 | ] 2778 | 2779 | [[package]] 2780 | name = "sha1" 2781 | version = "0.10.6" 2782 | source = "registry+https://github.com/rust-lang/crates.io-index" 2783 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2784 | dependencies = [ 2785 | "cfg-if", 2786 | "cpufeatures", 2787 | "digest", 2788 | ] 2789 | 2790 | [[package]] 2791 | name = "sha1_smol" 2792 | version = "1.0.1" 2793 | source = "registry+https://github.com/rust-lang/crates.io-index" 2794 | checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 2795 | 2796 | [[package]] 2797 | name = "sha2" 2798 | version = "0.10.8" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 2801 | dependencies = [ 2802 | "cfg-if", 2803 | "cpufeatures", 2804 | "digest", 2805 | ] 2806 | 2807 | [[package]] 2808 | name = "sharded-slab" 2809 | version = "0.1.7" 2810 | source = "registry+https://github.com/rust-lang/crates.io-index" 2811 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2812 | dependencies = [ 2813 | "lazy_static", 2814 | ] 2815 | 2816 | [[package]] 2817 | name = "shell-escape" 2818 | version = "0.1.5" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" 2821 | 2822 | [[package]] 2823 | name = "shell-words" 2824 | version = "1.1.0" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" 2827 | 2828 | [[package]] 2829 | name = "shlex" 2830 | version = "1.3.0" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2833 | 2834 | [[package]] 2835 | name = "signature" 2836 | version = "2.2.0" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 2839 | dependencies = [ 2840 | "digest", 2841 | "rand_core", 2842 | ] 2843 | 2844 | [[package]] 2845 | name = "similar" 2846 | version = "2.6.0" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" 2849 | 2850 | [[package]] 2851 | name = "sized-chunks" 2852 | version = "0.6.5" 2853 | source = "registry+https://github.com/rust-lang/crates.io-index" 2854 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 2855 | dependencies = [ 2856 | "bitmaps", 2857 | "typenum", 2858 | ] 2859 | 2860 | [[package]] 2861 | name = "smallvec" 2862 | version = "1.13.2" 2863 | source = "registry+https://github.com/rust-lang/crates.io-index" 2864 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2865 | 2866 | [[package]] 2867 | name = "snapbox" 2868 | version = "0.6.17" 2869 | source = "registry+https://github.com/rust-lang/crates.io-index" 2870 | checksum = "840b73eb3148bc3cbc10ebe00ec9bc6d96033e658d022c4adcbf3f35596fd64a" 2871 | dependencies = [ 2872 | "anstream", 2873 | "anstyle", 2874 | "anstyle-svg", 2875 | "content_inspector", 2876 | "dunce", 2877 | "filetime", 2878 | "normalize-line-endings", 2879 | "regex", 2880 | "serde", 2881 | "serde_json", 2882 | "similar", 2883 | "snapbox-macros", 2884 | "tempfile", 2885 | "walkdir", 2886 | ] 2887 | 2888 | [[package]] 2889 | name = "snapbox-macros" 2890 | version = "0.3.10" 2891 | source = "registry+https://github.com/rust-lang/crates.io-index" 2892 | checksum = "16569f53ca23a41bb6f62e0a5084aa1661f4814a67fa33696a79073e03a664af" 2893 | dependencies = [ 2894 | "anstream", 2895 | ] 2896 | 2897 | [[package]] 2898 | name = "socket2" 2899 | version = "0.5.7" 2900 | source = "registry+https://github.com/rust-lang/crates.io-index" 2901 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 2902 | dependencies = [ 2903 | "libc", 2904 | "windows-sys 0.52.0", 2905 | ] 2906 | 2907 | [[package]] 2908 | name = "spki" 2909 | version = "0.7.3" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 2912 | dependencies = [ 2913 | "base64ct", 2914 | "der", 2915 | ] 2916 | 2917 | [[package]] 2918 | name = "static_assertions" 2919 | version = "1.1.0" 2920 | source = "registry+https://github.com/rust-lang/crates.io-index" 2921 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2922 | 2923 | [[package]] 2924 | name = "strsim" 2925 | version = "0.11.1" 2926 | source = "registry+https://github.com/rust-lang/crates.io-index" 2927 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2928 | 2929 | [[package]] 2930 | name = "subtle" 2931 | version = "2.6.1" 2932 | source = "registry+https://github.com/rust-lang/crates.io-index" 2933 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2934 | 2935 | [[package]] 2936 | name = "supports-hyperlinks" 2937 | version = "3.0.0" 2938 | source = "registry+https://github.com/rust-lang/crates.io-index" 2939 | checksum = "2c0a1e5168041f5f3ff68ff7d95dcb9c8749df29f6e7e89ada40dd4c9de404ee" 2940 | 2941 | [[package]] 2942 | name = "supports-unicode" 2943 | version = "3.0.0" 2944 | source = "registry+https://github.com/rust-lang/crates.io-index" 2945 | checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 2946 | 2947 | [[package]] 2948 | name = "syn" 2949 | version = "2.0.77" 2950 | source = "registry+https://github.com/rust-lang/crates.io-index" 2951 | checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" 2952 | dependencies = [ 2953 | "proc-macro2", 2954 | "quote", 2955 | "unicode-ident", 2956 | ] 2957 | 2958 | [[package]] 2959 | name = "tar" 2960 | version = "0.4.41" 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" 2962 | checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" 2963 | dependencies = [ 2964 | "filetime", 2965 | "libc", 2966 | ] 2967 | 2968 | [[package]] 2969 | name = "tempfile" 2970 | version = "3.12.0" 2971 | source = "registry+https://github.com/rust-lang/crates.io-index" 2972 | checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" 2973 | dependencies = [ 2974 | "cfg-if", 2975 | "fastrand", 2976 | "once_cell", 2977 | "rustix", 2978 | "windows-sys 0.59.0", 2979 | ] 2980 | 2981 | [[package]] 2982 | name = "terminal_size" 2983 | version = "0.3.0" 2984 | source = "registry+https://github.com/rust-lang/crates.io-index" 2985 | checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" 2986 | dependencies = [ 2987 | "rustix", 2988 | "windows-sys 0.48.0", 2989 | ] 2990 | 2991 | [[package]] 2992 | name = "thiserror" 2993 | version = "1.0.63" 2994 | source = "registry+https://github.com/rust-lang/crates.io-index" 2995 | checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" 2996 | dependencies = [ 2997 | "thiserror-impl", 2998 | ] 2999 | 3000 | [[package]] 3001 | name = "thiserror-impl" 3002 | version = "1.0.63" 3003 | source = "registry+https://github.com/rust-lang/crates.io-index" 3004 | checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" 3005 | dependencies = [ 3006 | "proc-macro2", 3007 | "quote", 3008 | "syn", 3009 | ] 3010 | 3011 | [[package]] 3012 | name = "thread_local" 3013 | version = "1.1.8" 3014 | source = "registry+https://github.com/rust-lang/crates.io-index" 3015 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 3016 | dependencies = [ 3017 | "cfg-if", 3018 | "once_cell", 3019 | ] 3020 | 3021 | [[package]] 3022 | name = "time" 3023 | version = "0.3.36" 3024 | source = "registry+https://github.com/rust-lang/crates.io-index" 3025 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 3026 | dependencies = [ 3027 | "deranged", 3028 | "itoa", 3029 | "libc", 3030 | "num-conv", 3031 | "num_threads", 3032 | "powerfmt", 3033 | "serde", 3034 | "time-core", 3035 | "time-macros", 3036 | ] 3037 | 3038 | [[package]] 3039 | name = "time-core" 3040 | version = "0.1.2" 3041 | source = "registry+https://github.com/rust-lang/crates.io-index" 3042 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 3043 | 3044 | [[package]] 3045 | name = "time-macros" 3046 | version = "0.2.18" 3047 | source = "registry+https://github.com/rust-lang/crates.io-index" 3048 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 3049 | dependencies = [ 3050 | "num-conv", 3051 | "time-core", 3052 | ] 3053 | 3054 | [[package]] 3055 | name = "tinyvec" 3056 | version = "1.8.0" 3057 | source = "registry+https://github.com/rust-lang/crates.io-index" 3058 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 3059 | dependencies = [ 3060 | "tinyvec_macros", 3061 | ] 3062 | 3063 | [[package]] 3064 | name = "tinyvec_macros" 3065 | version = "0.1.1" 3066 | source = "registry+https://github.com/rust-lang/crates.io-index" 3067 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3068 | 3069 | [[package]] 3070 | name = "toml" 3071 | version = "0.8.19" 3072 | source = "registry+https://github.com/rust-lang/crates.io-index" 3073 | checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" 3074 | dependencies = [ 3075 | "serde", 3076 | "serde_spanned", 3077 | "toml_datetime", 3078 | "toml_edit", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "toml_datetime" 3083 | version = "0.6.8" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 3086 | dependencies = [ 3087 | "serde", 3088 | ] 3089 | 3090 | [[package]] 3091 | name = "toml_edit" 3092 | version = "0.22.21" 3093 | source = "registry+https://github.com/rust-lang/crates.io-index" 3094 | checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" 3095 | dependencies = [ 3096 | "indexmap", 3097 | "serde", 3098 | "serde_spanned", 3099 | "toml_datetime", 3100 | "winnow", 3101 | ] 3102 | 3103 | [[package]] 3104 | name = "tracing" 3105 | version = "0.1.40" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 3108 | dependencies = [ 3109 | "pin-project-lite", 3110 | "tracing-attributes", 3111 | "tracing-core", 3112 | ] 3113 | 3114 | [[package]] 3115 | name = "tracing-attributes" 3116 | version = "0.1.27" 3117 | source = "registry+https://github.com/rust-lang/crates.io-index" 3118 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 3119 | dependencies = [ 3120 | "proc-macro2", 3121 | "quote", 3122 | "syn", 3123 | ] 3124 | 3125 | [[package]] 3126 | name = "tracing-chrome" 3127 | version = "0.7.2" 3128 | source = "registry+https://github.com/rust-lang/crates.io-index" 3129 | checksum = "bf0a738ed5d6450a9fb96e86a23ad808de2b727fd1394585da5cdd6788ffe724" 3130 | dependencies = [ 3131 | "serde_json", 3132 | "tracing-core", 3133 | "tracing-subscriber", 3134 | ] 3135 | 3136 | [[package]] 3137 | name = "tracing-core" 3138 | version = "0.1.32" 3139 | source = "registry+https://github.com/rust-lang/crates.io-index" 3140 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 3141 | dependencies = [ 3142 | "once_cell", 3143 | "valuable", 3144 | ] 3145 | 3146 | [[package]] 3147 | name = "tracing-log" 3148 | version = "0.2.0" 3149 | source = "registry+https://github.com/rust-lang/crates.io-index" 3150 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3151 | dependencies = [ 3152 | "log", 3153 | "once_cell", 3154 | "tracing-core", 3155 | ] 3156 | 3157 | [[package]] 3158 | name = "tracing-subscriber" 3159 | version = "0.3.18" 3160 | source = "registry+https://github.com/rust-lang/crates.io-index" 3161 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 3162 | dependencies = [ 3163 | "matchers", 3164 | "nu-ansi-term", 3165 | "once_cell", 3166 | "regex", 3167 | "sharded-slab", 3168 | "smallvec", 3169 | "thread_local", 3170 | "tracing", 3171 | "tracing-core", 3172 | "tracing-log", 3173 | ] 3174 | 3175 | [[package]] 3176 | name = "typeid" 3177 | version = "1.0.2" 3178 | source = "registry+https://github.com/rust-lang/crates.io-index" 3179 | checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" 3180 | 3181 | [[package]] 3182 | name = "typenum" 3183 | version = "1.17.0" 3184 | source = "registry+https://github.com/rust-lang/crates.io-index" 3185 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3186 | 3187 | [[package]] 3188 | name = "unicase" 3189 | version = "2.7.0" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 3192 | dependencies = [ 3193 | "version_check", 3194 | ] 3195 | 3196 | [[package]] 3197 | name = "unicode-bidi" 3198 | version = "0.3.15" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 3201 | 3202 | [[package]] 3203 | name = "unicode-bom" 3204 | version = "2.0.3" 3205 | source = "registry+https://github.com/rust-lang/crates.io-index" 3206 | checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" 3207 | 3208 | [[package]] 3209 | name = "unicode-ident" 3210 | version = "1.0.13" 3211 | source = "registry+https://github.com/rust-lang/crates.io-index" 3212 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 3213 | 3214 | [[package]] 3215 | name = "unicode-normalization" 3216 | version = "0.1.24" 3217 | source = "registry+https://github.com/rust-lang/crates.io-index" 3218 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 3219 | dependencies = [ 3220 | "tinyvec", 3221 | ] 3222 | 3223 | [[package]] 3224 | name = "unicode-width" 3225 | version = "0.1.13" 3226 | source = "registry+https://github.com/rust-lang/crates.io-index" 3227 | checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" 3228 | 3229 | [[package]] 3230 | name = "unicode-xid" 3231 | version = "0.2.5" 3232 | source = "registry+https://github.com/rust-lang/crates.io-index" 3233 | checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" 3234 | 3235 | [[package]] 3236 | name = "url" 3237 | version = "2.5.2" 3238 | source = "registry+https://github.com/rust-lang/crates.io-index" 3239 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 3240 | dependencies = [ 3241 | "form_urlencoded", 3242 | "idna", 3243 | "percent-encoding", 3244 | ] 3245 | 3246 | [[package]] 3247 | name = "utf8-width" 3248 | version = "0.1.7" 3249 | source = "registry+https://github.com/rust-lang/crates.io-index" 3250 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 3251 | 3252 | [[package]] 3253 | name = "utf8parse" 3254 | version = "0.2.2" 3255 | source = "registry+https://github.com/rust-lang/crates.io-index" 3256 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3257 | 3258 | [[package]] 3259 | name = "valuable" 3260 | version = "0.1.0" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 3263 | 3264 | [[package]] 3265 | name = "vcpkg" 3266 | version = "0.2.15" 3267 | source = "registry+https://github.com/rust-lang/crates.io-index" 3268 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3269 | 3270 | [[package]] 3271 | name = "version_check" 3272 | version = "0.9.5" 3273 | source = "registry+https://github.com/rust-lang/crates.io-index" 3274 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3275 | 3276 | [[package]] 3277 | name = "walkdir" 3278 | version = "2.5.0" 3279 | source = "registry+https://github.com/rust-lang/crates.io-index" 3280 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3281 | dependencies = [ 3282 | "same-file", 3283 | "winapi-util", 3284 | ] 3285 | 3286 | [[package]] 3287 | name = "wasi" 3288 | version = "0.11.0+wasi-snapshot-preview1" 3289 | source = "registry+https://github.com/rust-lang/crates.io-index" 3290 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3291 | 3292 | [[package]] 3293 | name = "wasm-bindgen" 3294 | version = "0.2.93" 3295 | source = "registry+https://github.com/rust-lang/crates.io-index" 3296 | checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" 3297 | dependencies = [ 3298 | "cfg-if", 3299 | "once_cell", 3300 | "wasm-bindgen-macro", 3301 | ] 3302 | 3303 | [[package]] 3304 | name = "wasm-bindgen-backend" 3305 | version = "0.2.93" 3306 | source = "registry+https://github.com/rust-lang/crates.io-index" 3307 | checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" 3308 | dependencies = [ 3309 | "bumpalo", 3310 | "log", 3311 | "once_cell", 3312 | "proc-macro2", 3313 | "quote", 3314 | "syn", 3315 | "wasm-bindgen-shared", 3316 | ] 3317 | 3318 | [[package]] 3319 | name = "wasm-bindgen-macro" 3320 | version = "0.2.93" 3321 | source = "registry+https://github.com/rust-lang/crates.io-index" 3322 | checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" 3323 | dependencies = [ 3324 | "quote", 3325 | "wasm-bindgen-macro-support", 3326 | ] 3327 | 3328 | [[package]] 3329 | name = "wasm-bindgen-macro-support" 3330 | version = "0.2.93" 3331 | source = "registry+https://github.com/rust-lang/crates.io-index" 3332 | checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" 3333 | dependencies = [ 3334 | "proc-macro2", 3335 | "quote", 3336 | "syn", 3337 | "wasm-bindgen-backend", 3338 | "wasm-bindgen-shared", 3339 | ] 3340 | 3341 | [[package]] 3342 | name = "wasm-bindgen-shared" 3343 | version = "0.2.93" 3344 | source = "registry+https://github.com/rust-lang/crates.io-index" 3345 | checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" 3346 | 3347 | [[package]] 3348 | name = "winapi" 3349 | version = "0.3.9" 3350 | source = "registry+https://github.com/rust-lang/crates.io-index" 3351 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3352 | dependencies = [ 3353 | "winapi-i686-pc-windows-gnu", 3354 | "winapi-x86_64-pc-windows-gnu", 3355 | ] 3356 | 3357 | [[package]] 3358 | name = "winapi-i686-pc-windows-gnu" 3359 | version = "0.4.0" 3360 | source = "registry+https://github.com/rust-lang/crates.io-index" 3361 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3362 | 3363 | [[package]] 3364 | name = "winapi-util" 3365 | version = "0.1.9" 3366 | source = "registry+https://github.com/rust-lang/crates.io-index" 3367 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3368 | dependencies = [ 3369 | "windows-sys 0.59.0", 3370 | ] 3371 | 3372 | [[package]] 3373 | name = "winapi-x86_64-pc-windows-gnu" 3374 | version = "0.4.0" 3375 | source = "registry+https://github.com/rust-lang/crates.io-index" 3376 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3377 | 3378 | [[package]] 3379 | name = "windows-core" 3380 | version = "0.52.0" 3381 | source = "registry+https://github.com/rust-lang/crates.io-index" 3382 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 3383 | dependencies = [ 3384 | "windows-targets 0.52.6", 3385 | ] 3386 | 3387 | [[package]] 3388 | name = "windows-sys" 3389 | version = "0.48.0" 3390 | source = "registry+https://github.com/rust-lang/crates.io-index" 3391 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3392 | dependencies = [ 3393 | "windows-targets 0.48.5", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "windows-sys" 3398 | version = "0.52.0" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3401 | dependencies = [ 3402 | "windows-targets 0.52.6", 3403 | ] 3404 | 3405 | [[package]] 3406 | name = "windows-sys" 3407 | version = "0.59.0" 3408 | source = "registry+https://github.com/rust-lang/crates.io-index" 3409 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3410 | dependencies = [ 3411 | "windows-targets 0.52.6", 3412 | ] 3413 | 3414 | [[package]] 3415 | name = "windows-targets" 3416 | version = "0.48.5" 3417 | source = "registry+https://github.com/rust-lang/crates.io-index" 3418 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3419 | dependencies = [ 3420 | "windows_aarch64_gnullvm 0.48.5", 3421 | "windows_aarch64_msvc 0.48.5", 3422 | "windows_i686_gnu 0.48.5", 3423 | "windows_i686_msvc 0.48.5", 3424 | "windows_x86_64_gnu 0.48.5", 3425 | "windows_x86_64_gnullvm 0.48.5", 3426 | "windows_x86_64_msvc 0.48.5", 3427 | ] 3428 | 3429 | [[package]] 3430 | name = "windows-targets" 3431 | version = "0.52.6" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3434 | dependencies = [ 3435 | "windows_aarch64_gnullvm 0.52.6", 3436 | "windows_aarch64_msvc 0.52.6", 3437 | "windows_i686_gnu 0.52.6", 3438 | "windows_i686_gnullvm", 3439 | "windows_i686_msvc 0.52.6", 3440 | "windows_x86_64_gnu 0.52.6", 3441 | "windows_x86_64_gnullvm 0.52.6", 3442 | "windows_x86_64_msvc 0.52.6", 3443 | ] 3444 | 3445 | [[package]] 3446 | name = "windows_aarch64_gnullvm" 3447 | version = "0.48.5" 3448 | source = "registry+https://github.com/rust-lang/crates.io-index" 3449 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3450 | 3451 | [[package]] 3452 | name = "windows_aarch64_gnullvm" 3453 | version = "0.52.6" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3456 | 3457 | [[package]] 3458 | name = "windows_aarch64_msvc" 3459 | version = "0.48.5" 3460 | source = "registry+https://github.com/rust-lang/crates.io-index" 3461 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3462 | 3463 | [[package]] 3464 | name = "windows_aarch64_msvc" 3465 | version = "0.52.6" 3466 | source = "registry+https://github.com/rust-lang/crates.io-index" 3467 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3468 | 3469 | [[package]] 3470 | name = "windows_i686_gnu" 3471 | version = "0.48.5" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3474 | 3475 | [[package]] 3476 | name = "windows_i686_gnu" 3477 | version = "0.52.6" 3478 | source = "registry+https://github.com/rust-lang/crates.io-index" 3479 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3480 | 3481 | [[package]] 3482 | name = "windows_i686_gnullvm" 3483 | version = "0.52.6" 3484 | source = "registry+https://github.com/rust-lang/crates.io-index" 3485 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3486 | 3487 | [[package]] 3488 | name = "windows_i686_msvc" 3489 | version = "0.48.5" 3490 | source = "registry+https://github.com/rust-lang/crates.io-index" 3491 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3492 | 3493 | [[package]] 3494 | name = "windows_i686_msvc" 3495 | version = "0.52.6" 3496 | source = "registry+https://github.com/rust-lang/crates.io-index" 3497 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3498 | 3499 | [[package]] 3500 | name = "windows_x86_64_gnu" 3501 | version = "0.48.5" 3502 | source = "registry+https://github.com/rust-lang/crates.io-index" 3503 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3504 | 3505 | [[package]] 3506 | name = "windows_x86_64_gnu" 3507 | version = "0.52.6" 3508 | source = "registry+https://github.com/rust-lang/crates.io-index" 3509 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3510 | 3511 | [[package]] 3512 | name = "windows_x86_64_gnullvm" 3513 | version = "0.48.5" 3514 | source = "registry+https://github.com/rust-lang/crates.io-index" 3515 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3516 | 3517 | [[package]] 3518 | name = "windows_x86_64_gnullvm" 3519 | version = "0.52.6" 3520 | source = "registry+https://github.com/rust-lang/crates.io-index" 3521 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3522 | 3523 | [[package]] 3524 | name = "windows_x86_64_msvc" 3525 | version = "0.48.5" 3526 | source = "registry+https://github.com/rust-lang/crates.io-index" 3527 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3528 | 3529 | [[package]] 3530 | name = "windows_x86_64_msvc" 3531 | version = "0.52.6" 3532 | source = "registry+https://github.com/rust-lang/crates.io-index" 3533 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3534 | 3535 | [[package]] 3536 | name = "winnow" 3537 | version = "0.6.18" 3538 | source = "registry+https://github.com/rust-lang/crates.io-index" 3539 | checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" 3540 | dependencies = [ 3541 | "memchr", 3542 | ] 3543 | 3544 | [[package]] 3545 | name = "zerocopy" 3546 | version = "0.7.35" 3547 | source = "registry+https://github.com/rust-lang/crates.io-index" 3548 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3549 | dependencies = [ 3550 | "byteorder", 3551 | "zerocopy-derive", 3552 | ] 3553 | 3554 | [[package]] 3555 | name = "zerocopy-derive" 3556 | version = "0.7.35" 3557 | source = "registry+https://github.com/rust-lang/crates.io-index" 3558 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3559 | dependencies = [ 3560 | "proc-macro2", 3561 | "quote", 3562 | "syn", 3563 | ] 3564 | 3565 | [[package]] 3566 | name = "zeroize" 3567 | version = "1.8.1" 3568 | source = "registry+https://github.com/rust-lang/crates.io-index" 3569 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3570 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-patch" 3 | version = "0.3.2" 4 | authors = ["Marc Mettke "] 5 | edition = "2021" 6 | description = "Cargo Subcommand for patching dependencies using patch files" 7 | license = "MIT" 8 | repository = "https://github.com/mettke/cargo-patch" 9 | readme = "README.md" 10 | keywords = ["cargo", "patch", "dependency", "dependencies", "patchfile"] 11 | categories = ["command-line-utilities"] 12 | 13 | [dependencies] 14 | anyhow = "1" 15 | cargo = "0.82" 16 | fs_extra = "1" 17 | patch = "0.7" 18 | semver = "1" 19 | toml = "0.8" 20 | 21 | [dev-dependencies] 22 | cargo-test-macro = "0.3" 23 | cargo-test-support = "0.3" 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Marc Mettke 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 | # cargo-patch 2 | 3 | `Cargo-Patch` is a Cargo Subcommand which allows 4 | patching dependencies using patch files. 5 | 6 | ## Installation 7 | 8 | Simply run: 9 | 10 | ```sh 11 | cargo install cargo-patch 12 | ``` 13 | 14 | This is not necessary when patching via `build.rs` file 15 | 16 | ## Usage 17 | 18 | To patch a dependency one has to add the following 19 | to `Cargo.toml`: 20 | 21 | ```toml 22 | [package.metadata.patch.serde] 23 | version = "1.0" 24 | patches = [ 25 | "test.patch" 26 | ] 27 | ``` 28 | 29 | It specifies which dependency to patch (in this case 30 | serde) and one or more patchfiles to apply. Running: 31 | 32 | ```sh 33 | cargo patch 34 | ``` 35 | 36 | will download the serde package specified in the 37 | dependency section to the `target/patch` folder 38 | and apply the given patches. To use the patched 39 | version one has to override the dependency using 40 | `replace` like this 41 | 42 | ```toml 43 | [patch.crates-io] 44 | serde = { path = './target/patch/serde-1.0.110' } 45 | ``` 46 | 47 | Instead of running `cargo patch` its also possible to add a `build.rs` file like this: 48 | 49 | ```rust 50 | fn main() { 51 | println!("cargo:rerun-if-changed=Cargo.toml"); 52 | println!("cargo:rerun-if-changed=patches/"); 53 | cargo_patch::patch().expect("Failed while patching"); 54 | } 55 | ``` 56 | 57 | To make it work, add the cargo-patch library to the `build-dependencies` 58 | 59 | ```tomlusing the 60 | [build-dependencies] 61 | cargo-patch = "0.3" 62 | ``` 63 | 64 | Note, however, that all your patches should be in a single folder called `patches` or something similar. This is to make sure that the build script is executed again when something changes. 65 | 66 | ## Patch format 67 | 68 | You can either use [diff](http://man7.org/linux/man-pages/man1/diff.1.html) or 69 | [git](https://linux.die.net/man/1/git) to create patch files. Important is that 70 | file paths are relative and inside the dependency. 71 | 72 | #### Using diff file generated by GitHub pull request 73 | 74 | ```toml 75 | [package.metadata.patch.serde] 76 | version = "1.0" 77 | patches = [ 78 | { path = "generatedByGithub.patch", source = "GithubPrDiff" }, 79 | { path = "generatedByGithub2.patch", source = "GithubPrDiff" }, 80 | "test.patch", 81 | "test2.patch" 82 | ] 83 | ``` 84 | 85 | ## Limitations 86 | 87 | It's only possible to patch dependencies of binary crates as it is not possible 88 | for a subcommand to intercept the build process. 89 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "packageRules": [ 3 | { 4 | "matchUpdateTypes": ["minor", "patch", "pin", "digest"], 5 | "groupName": "dependencies (non-major)" 6 | } 7 | ], 8 | "extends": ["config:base"], 9 | "lockFileMaintenance": { "enabled": true } 10 | } 11 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! `Cargo-Patch` is a Cargo Subcommand which allows 2 | //! patching dependencies using patch files. 3 | //! 4 | //! # Installation 5 | //! 6 | //! Simply run: 7 | //! 8 | //! ```sh 9 | //! cargo install cargo-patch 10 | //! ``` 11 | //! 12 | //! # Usage 13 | //! 14 | //! To patch a dependency one has to add the following 15 | //! to `Cargo.toml`: 16 | //! 17 | //! ```toml 18 | //! [package.metadata.patch.serde] 19 | //! version = "1.0" 20 | //! patches = [ 21 | //! "test.patch" 22 | //! ] 23 | //! ``` 24 | //! 25 | //! It specifies which dependency to patch (in this case 26 | //! serde) and one or more patchfiles to apply. Running: 27 | //! 28 | //! ```sh 29 | //! cargo patch 30 | //! ``` 31 | //! 32 | //! will download the serde package specified in the 33 | //! dependency section to the `target/patch` folder 34 | //! and apply the given patches. To use the patched 35 | //! version one has to override the dependency using 36 | //! `replace` like this 37 | //! 38 | //! ```toml 39 | //! [patch.crates-io] 40 | //! serde = { path = './target/patch/serde-1.0.110' } 41 | //! ``` 42 | //! 43 | //! # Patch format 44 | //! 45 | //! You can either use [diff](http://man7.org/linux/man-pages/man1/diff.1.html) or 46 | //! [git](https://linux.die.net/man/1/git) to create patch files. Important is that 47 | //! file paths are relativ and inside the dependency 48 | //! 49 | //! # Limitations 50 | //! 51 | //! Its only possible to patch dependencies of binary crates as it is not possible 52 | //! for a subcommand to intercept the build process. 53 | //! 54 | 55 | #![deny(clippy::all, clippy::nursery)] 56 | #![deny(nonstandard_style, rust_2018_idioms)] 57 | 58 | use anyhow::{anyhow, Result}; 59 | use cargo::{ 60 | core::{ 61 | package::{Package, PackageSet}, 62 | registry::PackageRegistry, 63 | resolver::{features::CliFeatures, HasDevUnits}, 64 | shell::Verbosity, 65 | PackageId, Resolve, Workspace, 66 | }, 67 | ops::{get_resolved_packages, load_pkg_lockfile, resolve_with_previous}, 68 | util::important_paths::find_root_manifest_for_wd, 69 | GlobalContext, 70 | }; 71 | 72 | use cargo::sources::SourceConfigMap; 73 | use cargo::util::cache_lock::CacheLockMode::DownloadExclusive; 74 | use fs_extra::dir::{copy, CopyOptions}; 75 | use patch::{Line, Patch}; 76 | use semver::VersionReq; 77 | use std::fmt::{Display, Formatter}; 78 | use std::{ 79 | fs, 80 | io::ErrorKind, 81 | path::{Path, PathBuf}, 82 | }; 83 | use toml::Value; 84 | 85 | #[derive(Debug, Clone, Default)] 86 | enum PatchSource { 87 | #[default] 88 | Default, 89 | GithubPrDiff, 90 | } 91 | 92 | #[derive(Debug, Clone)] 93 | struct PatchItem<'a> { 94 | path: &'a Path, 95 | source: PatchSource, 96 | } 97 | 98 | #[derive(Debug, Clone)] 99 | struct PatchEntry<'a> { 100 | name: &'a str, 101 | version: Option, 102 | patches: Vec>, 103 | } 104 | 105 | #[derive(Debug)] 106 | struct PatchFailed { 107 | line: u64, 108 | file: PathBuf, 109 | } 110 | 111 | #[derive(Debug, Eq, PartialEq)] 112 | enum PatchType { 113 | Modify, 114 | Create, 115 | Delete, 116 | } 117 | 118 | impl PatchSource { 119 | fn from_str(s: &str) -> Self { 120 | match s { 121 | "Default" => Self::Default, 122 | "GithubPrDiff" => Self::GithubPrDiff, 123 | &_ => { 124 | eprintln!("Unknown patch source: {s}"); 125 | Self::Default 126 | } 127 | } 128 | } 129 | } 130 | 131 | impl std::error::Error for PatchFailed {} 132 | 133 | impl Display for PatchFailed { 134 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 135 | write!( 136 | f, 137 | "failed to apply patch to {} on line {}", 138 | self.file.display(), 139 | self.line + 1 140 | ) 141 | } 142 | } 143 | 144 | #[allow(clippy::wildcard_enum_match_arm)] 145 | fn clear_patch_folder() -> Result<()> { 146 | match fs::remove_dir_all("target/patch") { 147 | Ok(_) => Ok(()), 148 | Err(err) => match err.kind() { 149 | ErrorKind::NotFound => Ok(()), 150 | _ => Err(err.into()), 151 | }, 152 | } 153 | } 154 | 155 | fn setup_gctx() -> Result { 156 | let gctx = GlobalContext::default()?; 157 | gctx.shell().set_verbosity(Verbosity::Quiet); 158 | Ok(gctx) 159 | } 160 | 161 | fn find_cargo_toml(path: &Path) -> Result { 162 | let path = fs::canonicalize(path)?; 163 | find_root_manifest_for_wd(&path) 164 | } 165 | 166 | fn fetch_workspace<'gctx>( 167 | gctx: &'gctx GlobalContext, 168 | path: &Path, 169 | ) -> Result> { 170 | Workspace::new(path, gctx) 171 | } 172 | 173 | fn resolve_ws<'a>(ws: &Workspace<'a>) -> Result<(PackageSet<'a>, Resolve)> { 174 | let scm = SourceConfigMap::new(ws.gctx())?; 175 | let mut registry = PackageRegistry::new_with_source_config(ws.gctx(), scm)?; 176 | 177 | registry.lock_patches(); 178 | let resolve = { 179 | let prev = load_pkg_lockfile(ws)?; 180 | let resolve: Resolve = resolve_with_previous( 181 | &mut registry, 182 | ws, 183 | &CliFeatures::new_all(true), 184 | HasDevUnits::No, 185 | prev.as_ref(), 186 | None, 187 | &[], 188 | false, 189 | )?; 190 | resolve 191 | }; 192 | let packages = get_resolved_packages(&resolve, registry)?; 193 | Ok((packages, resolve)) 194 | } 195 | 196 | fn get_patches( 197 | custom_metadata: &Value, 198 | ) -> impl Iterator> + '_ { 199 | custom_metadata 200 | .as_table() 201 | .and_then(|table| table.get("patch")) 202 | .into_iter() 203 | .flat_map(|patch| patch.as_table().into_iter()) 204 | .flat_map(|table| { 205 | table 206 | .into_iter() 207 | .filter_map(|(k, v)| parse_patch_entry(k, v)) 208 | }) 209 | } 210 | 211 | fn parse_patch_entry<'a>(name: &'a str, entry: &'a Value) -> Option> { 212 | let entry = entry.as_table().or_else(|| { 213 | eprintln!("Entry {name} must contain a table."); 214 | None 215 | })?; 216 | 217 | let version = entry.get("version").and_then(|version| { 218 | let value = version.as_str().and_then(|s| VersionReq::parse(s).ok()); 219 | if value.is_none() { 220 | eprintln!("Version must be a value semver string: {version}"); 221 | } 222 | value 223 | }); 224 | 225 | let patches = entry 226 | .get("patches") 227 | .and_then(Value::as_array) 228 | .into_iter() 229 | .flat_map(|patches| { 230 | patches.iter().flat_map(|patch| { 231 | let item = if patch.is_str() { 232 | Some((patch.as_str(), Default::default())) 233 | } else { 234 | patch.as_table().map( 235 | |it| ( 236 | it.get("path").and_then(Value::as_str), 237 | it.get("source").and_then(Value::as_str) 238 | .map_or_else(Default::default, PatchSource::from_str) 239 | )) 240 | }; 241 | 242 | let (path, source) = if let Some(item) = item {item } else { 243 | eprintln!("Patch Entry must be a string or a table with path and source: {patch}"); 244 | return None; 245 | }; 246 | 247 | let path = path.map(Path::new); 248 | let path = if let Some(path) = path { 249 | path 250 | } else { 251 | eprintln!("Patch Entry must be a string or a table with path and source: {patch}"); 252 | return None; 253 | }; 254 | 255 | Some(PatchItem { 256 | path, 257 | source, 258 | }) 259 | }) 260 | }) 261 | .collect(); 262 | 263 | Some(PatchEntry { 264 | name, 265 | version, 266 | patches, 267 | }) 268 | } 269 | 270 | fn get_id( 271 | name: &str, 272 | version: &Option, 273 | resolve: &Resolve, 274 | ) -> Option { 275 | let mut matched_dep = None; 276 | for dep in resolve.iter() { 277 | if dep.name().as_str() == name 278 | && version 279 | .as_ref() 280 | .map_or(true, |ver| ver.matches(dep.version())) 281 | { 282 | if matched_dep.is_none() { 283 | matched_dep = Some(dep); 284 | } else { 285 | eprintln!("There are multiple versions of {name} available. Try specifying a version."); 286 | } 287 | } 288 | } 289 | if matched_dep.is_none() { 290 | eprintln!("Unable to find package {name} in dependencies"); 291 | } 292 | matched_dep 293 | } 294 | 295 | fn copy_package(pkg: &Package) -> Result { 296 | fs::create_dir_all("target/patch/")?; 297 | let options = CopyOptions::new(); 298 | let _ = copy(pkg.root(), "target/patch/", &options)?; 299 | if let Some(name) = pkg.root().file_name() { 300 | let buf = PathBuf::from("target/patch/"); 301 | let buf = buf.join(name).canonicalize()?; 302 | Ok(buf) 303 | } else { 304 | Err(anyhow!("Dependency Folder does not have a name")) 305 | } 306 | } 307 | 308 | fn do_patch( 309 | diff: Patch<'_>, 310 | old_path: Option, 311 | new_path: Option, 312 | ) -> Result { 313 | // delete 314 | if new_path.is_none() { 315 | if let Some(old) = old_path { 316 | fs::remove_file(old)?; 317 | return Ok(PatchType::Delete); 318 | } 319 | return Err(anyhow!("Both old and new file are all empty.")); 320 | } 321 | let new_path = new_path.unwrap(); 322 | 323 | let (old_data, patch_type) = if let Some(old) = old_path { 324 | // modify 325 | (fs::read_to_string(old)?, PatchType::Modify) 326 | } else { 327 | // create 328 | ("".to_string(), PatchType::Create) 329 | }; 330 | 331 | let data = 332 | apply_patch(diff, &old_data).map_err(|line| PatchFailed { 333 | file: PathBuf::from(new_path.to_owned().file_name().map_or_else( 334 | || "".to_string(), 335 | |it| it.to_string_lossy().to_string(), 336 | )), 337 | line, 338 | })?; 339 | 340 | if patch_type == PatchType::Create { 341 | if let Some(parent) = new_path.parent() { 342 | fs::create_dir_all(parent)?; 343 | } 344 | } 345 | fs::write(&new_path, data)?; 346 | 347 | Ok(patch_type) 348 | } 349 | 350 | fn apply_patches<'a>( 351 | name: &str, 352 | patches: impl Iterator> + 'a, 353 | path: &Path, 354 | ) -> Result<()> { 355 | for PatchItem { 356 | path: patch, 357 | source, 358 | } in patches 359 | { 360 | let data = read_to_string(patch)?; 361 | let patches = Patch::from_multiple(&data) 362 | .map_err(|_| anyhow!("Unable to parse patch file"))?; 363 | for patch in patches { 364 | fn check_path>( 365 | base: &Path, 366 | path: P, 367 | loc: &str, 368 | ) -> Result { 369 | let path = base.join(path); 370 | let canonicalize_result = path.canonicalize(); 371 | 372 | if canonicalize_result.is_err() 373 | && path.to_string_lossy().contains("..") 374 | { 375 | return Err(anyhow!( 376 | "Failed to canonicalize path and the path has .. in it. ({loc})", 377 | )); 378 | } else if canonicalize_result.is_err() { 379 | return Ok(path); 380 | } 381 | 382 | if canonicalize_result?.strip_prefix(base).is_err() { 383 | return Err(anyhow!( 384 | "Patch file tried to escape dependency folder ({loc})", 385 | )); 386 | } 387 | 388 | Ok(path) 389 | } 390 | 391 | let (old_path, new_path) = match source { 392 | PatchSource::Default => { 393 | (patch.old.path.as_ref(), patch.new.path.as_ref()) 394 | } 395 | PatchSource::GithubPrDiff => ( 396 | patch 397 | .old 398 | .path 399 | .strip_prefix("a/") 400 | .unwrap_or_else(|| patch.old.path.as_ref()), 401 | patch 402 | .new 403 | .path 404 | .strip_prefix("b/") 405 | .unwrap_or_else(|| patch.new.path.as_ref()), 406 | ), 407 | }; 408 | 409 | let loc = format!("{name}: {old_path} -> {new_path}"); 410 | let loc_simple = format!("{name}: {old_path}"); 411 | 412 | let new_file_path = check_path(path, new_path, &loc); 413 | let old_file_path = check_path(path, old_path, &loc); 414 | 415 | let new_file_path = if patch.new.path == "/dev/null" { 416 | None 417 | } else { 418 | Some(new_file_path?) 419 | }; 420 | let old_file_path = if patch.old.path == "/dev/null" { 421 | None 422 | } else { 423 | Some(old_file_path?) 424 | }; 425 | 426 | let patch_type = do_patch(patch, old_file_path, new_file_path)?; 427 | 428 | let loc = match patch_type { 429 | PatchType::Modify => loc_simple, 430 | PatchType::Create | PatchType::Delete => loc, 431 | }; 432 | println!("Patched {loc}"); 433 | } 434 | } 435 | Ok(()) 436 | } 437 | 438 | /// Apply a patch to the given text. 439 | /// If the apply fails (i.e. due to mismatch in context lines), returns an Err with the line number 440 | /// it failed on (0-based). 441 | #[allow( 442 | clippy::as_conversions, 443 | clippy::indexing_slicing, 444 | clippy::cast_possible_truncation 445 | )] 446 | fn apply_patch(diff: Patch<'_>, old: &str) -> Result { 447 | let old_lines = old.lines().collect::>(); 448 | let mut out: Vec<&str> = vec![]; 449 | let mut old_line = 0; 450 | for hunk in diff.hunks { 451 | while hunk.old_range.start != 0 && old_line < hunk.old_range.start - 1 { 452 | out.push(old_lines[old_line as usize]); 453 | old_line += 1; 454 | } 455 | for line in hunk.lines { 456 | match line { 457 | Line::Context(line) => { 458 | let old = old_lines.get(old_line as usize); 459 | if old != Some(&line) { 460 | return Err(old_line); 461 | } 462 | if (old_line as usize) < old_lines.len() { 463 | out.push(line); 464 | } 465 | old_line += 1; 466 | } 467 | Line::Add(s) => out.push(s), 468 | Line::Remove(line) => { 469 | if old_lines[old_line as usize] != line { 470 | return Err(old_line); 471 | } 472 | old_line += 1; 473 | } 474 | } 475 | } 476 | } 477 | for line in old_lines.get((old_line as usize)..).unwrap_or(&[]) { 478 | out.push(line); 479 | } 480 | if old.ends_with('\n') { 481 | out.push(""); 482 | } 483 | Ok(out.join("\n")) 484 | } 485 | 486 | #[allow(clippy::wildcard_enum_match_arm)] 487 | fn read_to_string(path: &Path) -> Result { 488 | match fs::read_to_string(path) { 489 | Ok(data) => Ok(data), 490 | Err(err) => match err.kind() { 491 | ErrorKind::NotFound => { 492 | Err(anyhow!("Unable to find patch file with path: {:?}", path)) 493 | } 494 | _ => Err(err.into()), 495 | }, 496 | } 497 | } 498 | 499 | pub fn patch() -> Result<()> { 500 | clear_patch_folder()?; 501 | let gctx = setup_gctx()?; 502 | let _lock = gctx.acquire_package_cache_lock(DownloadExclusive)?; 503 | let workspace_path = find_cargo_toml(&PathBuf::from("."))?; 504 | let workspace = fetch_workspace(&gctx, &workspace_path)?; 505 | let (pkg_set, resolve) = resolve_ws(&workspace)?; 506 | 507 | let custom_metadata = workspace.custom_metadata().into_iter().chain( 508 | workspace 509 | .members() 510 | .flat_map(|member| member.manifest().custom_metadata()), 511 | ); 512 | 513 | let patches = custom_metadata.flat_map(get_patches); 514 | let ids = patches.flat_map(|patch| { 515 | get_id(patch.name, &patch.version, &resolve).map(|id| (patch, id)) 516 | }); 517 | 518 | let mut patched = false; 519 | 520 | for (patch, id) in ids { 521 | let package = pkg_set.get_one(id)?; 522 | let path = copy_package(package)?; 523 | patched = true; 524 | apply_patches(patch.name, patch.patches.into_iter(), &path)?; 525 | } 526 | 527 | if !patched { 528 | println!("No patches found"); 529 | } 530 | Ok(()) 531 | } 532 | 533 | #[cfg(test)] 534 | mod tests { 535 | use super::apply_patch; 536 | use patch::Patch; 537 | 538 | #[test] 539 | fn apply_patch_simply() { 540 | let patch = r#"--- test 2020-05-21 08:50:06.629765310 +0200 541 | +++ test 2020-05-21 08:50:19.689878523 +0200 542 | @@ -1,6 +1,6 @@ 543 | This is the first line 544 | 545 | -This is the second line 546 | +This is the patched line 547 | 548 | This is the third line 549 | "#; 550 | let content = r#"This is the first line 551 | 552 | This is the second line 553 | 554 | This is the third line 555 | "#; 556 | let patched = r#"This is the first line 557 | 558 | This is the patched line 559 | 560 | This is the third line 561 | "#; 562 | let patch = Patch::from_single(patch).expect("Unable to parse patch"); 563 | let test_patched = 564 | apply_patch(patch, content).expect("Failed to apply patch"); 565 | assert_eq!(patched, test_patched, "Patched content does not match"); 566 | } 567 | 568 | #[test] 569 | fn apply_patch_middle() { 570 | let patch = r#"--- test1 2020-05-22 17:30:38.119170176 +0200 571 | +++ test2 2020-05-22 17:30:48.905935473 +0200 572 | @@ -2,8 +2,7 @@ 573 | adipiscing elit, sed do eiusmod tempor 574 | incididunt ut labore et dolore magna 575 | aliqua. Ut enim ad minim veniam, quis 576 | -nostrud exercitation ullamco laboris 577 | -nisi ut aliquip ex ea commodo consequat. 578 | +PATCHED 579 | Duis aute irure dolor in reprehenderit 580 | in voluptate velit esse cillum dolore 581 | eu fugiat nulla pariatur. Excepteur sint 582 | "#; 583 | let content = r#"Lorem ipsum dolor sit amet, consectetur 584 | adipiscing elit, sed do eiusmod tempor 585 | incididunt ut labore et dolore magna 586 | aliqua. Ut enim ad minim veniam, quis 587 | nostrud exercitation ullamco laboris 588 | nisi ut aliquip ex ea commodo consequat. 589 | Duis aute irure dolor in reprehenderit 590 | in voluptate velit esse cillum dolore 591 | eu fugiat nulla pariatur. Excepteur sint 592 | occaecat cupidatat non proident, sunt in 593 | culpa qui officia deserunt mollit anim 594 | id est laborum. 595 | "#; 596 | let patched = r#"Lorem ipsum dolor sit amet, consectetur 597 | adipiscing elit, sed do eiusmod tempor 598 | incididunt ut labore et dolore magna 599 | aliqua. Ut enim ad minim veniam, quis 600 | PATCHED 601 | Duis aute irure dolor in reprehenderit 602 | in voluptate velit esse cillum dolore 603 | eu fugiat nulla pariatur. Excepteur sint 604 | occaecat cupidatat non proident, sunt in 605 | culpa qui officia deserunt mollit anim 606 | id est laborum. 607 | "#; 608 | let patch = Patch::from_single(patch).expect("Unable to parse patch"); 609 | let test_patched = 610 | apply_patch(patch, content).expect("Failed to apply patch"); 611 | assert_eq!(patched, test_patched, "Patched content does not match"); 612 | } 613 | 614 | #[test] 615 | fn apply_patch_no_context_override() { 616 | let patch = r#"--- test 2020-06-06 10:06:44.375560000 +0200 617 | +++ test2 2020-06-06 10:06:49.245635957 +0200 618 | @@ -1,3 +1,3 @@ 619 | test5 620 | -test2 621 | +test4 622 | test3 623 | "#; 624 | let content = r#"test1 625 | test2 626 | test3 627 | "#; 628 | let patch = Patch::from_single(patch).expect("Unable to parse patch"); 629 | assert_eq!(apply_patch(patch, content), Err(0)); // first line context doesn't match 630 | } 631 | } 632 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | pub fn main() -> anyhow::Result<()> { 2 | cargo_patch::patch() 3 | } 4 | -------------------------------------------------------------------------------- /tests/common.rs: -------------------------------------------------------------------------------- 1 | #[allow(dead_code)] 2 | pub fn cargo_patch_exe() -> std::path::PathBuf { 3 | std::env::var_os("CARGO_BIN_PATH") 4 | .map(std::path::PathBuf::from) 5 | .or_else(|| { 6 | std::env::current_exe().ok().map(|mut path| { 7 | path.pop(); 8 | if path.ends_with("deps") { 9 | path.pop(); 10 | } 11 | path 12 | }) 13 | }) 14 | .unwrap_or_else(|| { 15 | panic!("CARGO_BIN_PATH wasn't set. Cannot continue running test") 16 | }) 17 | .join(format!("cargo-patch{}", std::env::consts::EXE_SUFFIX)) 18 | } 19 | 20 | #[allow(dead_code)] 21 | pub fn cargo_patch_lib() -> String { 22 | std::env::var("CARGO_MANIFEST_DIR").expect("Missing CARGO_MANIFEST_DIR") 23 | } 24 | 25 | #[allow(dead_code)] 26 | pub fn build_rs() -> &'static str { 27 | r#" 28 | fn main() { 29 | println!("cargo:rerun-if-changed=Cargo.toml"); 30 | println!("cargo:rerun-if-changed=patches/"); 31 | cargo_patch::patch().expect("Failed while patching"); 32 | } 33 | "# 34 | } 35 | -------------------------------------------------------------------------------- /tests/patch_crates_io.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use cargo_test_macro::cargo_test; 4 | use cargo_test_support::{main_file, project}; 5 | 6 | #[allow(deprecated)] 7 | #[cargo_test] 8 | fn patch_crates_io_invalid_dependency() { 9 | let manifest = r#" 10 | [package] 11 | name = "example" 12 | version = "0.1.0" 13 | authors = ["wycats@example.com"] 14 | 15 | [dependencies] 16 | asdf = "1.0" 17 | 18 | [package.metadata.patch.asdf] 19 | patches = [ 20 | "test.patch" 21 | ] 22 | "#; 23 | let p = project() 24 | .file("Cargo.toml", manifest) 25 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 26 | .file("test.patch", r#""#) 27 | .build(); 28 | 29 | p.process(common::cargo_patch_exe()) 30 | .with_stderr_contains( 31 | "Error: failed to select a version for the requirement [..]", 32 | ) 33 | .with_stderr_contains("[..]asdf[..]") 34 | .with_status(1) 35 | .run(); 36 | } 37 | 38 | #[allow(deprecated)] 39 | #[cargo_test] 40 | fn patch_crates_io_missing_patch() { 41 | let manifest = r#" 42 | [package] 43 | name = "example" 44 | version = "0.1.0" 45 | authors = ["wycats@example.com"] 46 | 47 | [dependencies] 48 | serde = "=1.0.110" 49 | 50 | [package.metadata.patch.serde] 51 | patches = [ 52 | "test.patch" 53 | ] 54 | "#; 55 | let p = project() 56 | .file("Cargo.toml", manifest) 57 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 58 | .build(); 59 | 60 | p.process(common::cargo_patch_exe()) 61 | .with_stderr("Error: Unable to find patch file with path: \"test.patch\"\n") 62 | .with_status(1) 63 | .run(); 64 | } 65 | 66 | #[allow(deprecated)] 67 | #[cargo_test] 68 | fn patch_crates_io_invalid_patch() { 69 | let manifest = r#" 70 | [package] 71 | name = "example" 72 | version = "0.1.0" 73 | authors = ["wycats@example.com"] 74 | 75 | [dependencies] 76 | serde = "=1.0.110" 77 | 78 | [package.metadata.patch.serde] 79 | patches = [ 80 | "test.patch" 81 | ] 82 | "#; 83 | let p = project() 84 | .file("Cargo.toml", manifest) 85 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 86 | .file("test.patch", r#""#) 87 | .build(); 88 | 89 | p.process(common::cargo_patch_exe()) 90 | .with_stderr("Error: Unable to parse patch file\n") 91 | .with_status(1) 92 | .run(); 93 | } 94 | 95 | #[allow(deprecated)] 96 | #[cargo_test] 97 | fn patch_crates_io_simple() { 98 | let manifest = r#" 99 | [package] 100 | name = "example" 101 | version = "0.1.0" 102 | authors = ["wycats@example.com"] 103 | 104 | [dependencies] 105 | serde = "=1.0.110" 106 | 107 | [package.metadata.patch.serde] 108 | patches = [ 109 | "test.patch" 110 | ] 111 | "#; 112 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 113 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 114 | @@ -8,9 +8,7 @@ 115 | is furnished to do so, subject to the following 116 | conditions: 117 | 118 | -The above copyright notice and this permission notice 119 | -shall be included in all copies or substantial portions 120 | -of the Software. 121 | +PATCHED 122 | 123 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 124 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 125 | "#; 126 | let p = project() 127 | .file("Cargo.toml", manifest) 128 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 129 | .file("test.patch", patch) 130 | .build(); 131 | 132 | p.process(common::cargo_patch_exe()) 133 | .cwd(p.root()) 134 | .with_stdout("Patched serde: LICENSE-MIT\n") 135 | .run(); 136 | 137 | let license_mit = p 138 | .build_dir() 139 | .join("patch") 140 | .join("serde-1.0.110") 141 | .join("LICENSE-MIT"); 142 | let licenses = 143 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 144 | assert!(licenses.contains("PATCHED")); 145 | } 146 | 147 | #[allow(deprecated)] 148 | #[cargo_test] 149 | fn patch_crates_io_detailed() { 150 | let manifest = r#" 151 | [package] 152 | name = "example" 153 | version = "0.1.0" 154 | authors = ["wycats@example.com"] 155 | 156 | [dependencies] 157 | serde = { version = "=1.0.110", features = ["derive"] } 158 | 159 | [package.metadata.patch.serde] 160 | patches = [ 161 | "test.patch" 162 | ] 163 | "#; 164 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 165 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 166 | @@ -8,9 +8,7 @@ 167 | is furnished to do so, subject to the following 168 | conditions: 169 | 170 | -The above copyright notice and this permission notice 171 | -shall be included in all copies or substantial portions 172 | -of the Software. 173 | +PATCHED 174 | 175 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 176 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 177 | "#; 178 | let p = project() 179 | .file("Cargo.toml", manifest) 180 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 181 | .file("test.patch", patch) 182 | .build(); 183 | 184 | p.process(common::cargo_patch_exe()) 185 | .cwd(p.root()) 186 | .with_stdout("Patched serde: LICENSE-MIT\n") 187 | .run(); 188 | 189 | let license_mit = p 190 | .build_dir() 191 | .join("patch") 192 | .join("serde-1.0.110") 193 | .join("LICENSE-MIT"); 194 | let licenses = 195 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 196 | assert!(licenses.contains("PATCHED")); 197 | } 198 | 199 | #[allow(deprecated)] 200 | #[cargo_test] 201 | fn patch_git_workspace_root() { 202 | let manifest = r#" 203 | [package] 204 | name = "example" 205 | version = "0.1.0" 206 | authors = ["wycats@example.com"] 207 | 208 | [workspace] 209 | members = ["test"] 210 | 211 | [package.metadata.patch.serde] 212 | patches = [ 213 | "test.patch" 214 | ] 215 | "#; 216 | let test_manifest = r#" 217 | [package] 218 | name = "example_test" 219 | version = "0.1.0" 220 | authors = ["wycats@example.com"] 221 | 222 | [dependencies] 223 | serde = { version = "=1.0.110", features = ["derive"] } 224 | "#; 225 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 226 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 227 | @@ -8,9 +8,7 @@ 228 | is furnished to do so, subject to the following 229 | conditions: 230 | 231 | -The above copyright notice and this permission notice 232 | -shall be included in all copies or substantial portions 233 | -of the Software. 234 | +PATCHED 235 | 236 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 237 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 238 | "#; 239 | let p = project() 240 | .file("Cargo.toml", manifest) 241 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 242 | .file("test.patch", patch) 243 | .file("test/Cargo.toml", test_manifest) 244 | .file("test/src/main.rs", &main_file(r#""i am foo""#, &[])) 245 | .build(); 246 | 247 | p.process(common::cargo_patch_exe()) 248 | .with_stdout("Patched serde: LICENSE-MIT\n") 249 | .run(); 250 | 251 | let license_mit = p 252 | .build_dir() 253 | .join("patch") 254 | .join("serde-1.0.110") 255 | .join("LICENSE-MIT"); 256 | let licenses = 257 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 258 | assert!(licenses.contains("PATCHED")); 259 | } 260 | 261 | #[allow(deprecated)] 262 | #[cargo_test] 263 | fn patch_git_workspace_metadata() { 264 | let manifest = r#" 265 | [workspace] 266 | members = ["test"] 267 | 268 | [workspace.metadata.patch.serde] 269 | patches = [ 270 | "test.patch" 271 | ] 272 | "#; 273 | let test_manifest = r#" 274 | [package] 275 | name = "example_test" 276 | version = "0.1.0" 277 | authors = ["wycats@example.com"] 278 | 279 | [dependencies] 280 | serde = { version = "=1.0.110", features = ["derive"] } 281 | "#; 282 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 283 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 284 | @@ -8,9 +8,7 @@ 285 | is furnished to do so, subject to the following 286 | conditions: 287 | 288 | -The above copyright notice and this permission notice 289 | -shall be included in all copies or substantial portions 290 | -of the Software. 291 | +PATCHED 292 | 293 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 294 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 295 | "#; 296 | let p = project() 297 | .file("Cargo.toml", manifest) 298 | .file("test.patch", patch) 299 | .file("test/Cargo.toml", test_manifest) 300 | .file("test/src/main.rs", &main_file(r#""i am foo""#, &[])) 301 | .build(); 302 | 303 | p.process(common::cargo_patch_exe()) 304 | .with_stdout("Patched serde: LICENSE-MIT\n") 305 | .run(); 306 | 307 | let license_mit = p 308 | .build_dir() 309 | .join("patch") 310 | .join("serde-1.0.110") 311 | .join("LICENSE-MIT"); 312 | let licenses = 313 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 314 | assert!(licenses.contains("PATCHED")); 315 | } 316 | -------------------------------------------------------------------------------- /tests/patch_create_and_delete.rs: -------------------------------------------------------------------------------- 1 | use cargo_test_macro::cargo_test; 2 | use cargo_test_support::{main_file, project, Execs, Project}; 3 | 4 | mod common; 5 | 6 | static TEST_CONTENT: &str = r#"first 7 | 8 | second 9 | 10 | third"#; 11 | 12 | fn gen_execs(patch: &str) -> (Execs, Project) { 13 | static MANIFEST: &str = r#" 14 | [package] 15 | name = "example" 16 | version = "0.1.0" 17 | authors = ["empty"] 18 | 19 | [dependencies] 20 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 21 | 22 | [workspace.metadata.patch.serde] 23 | patches = ["test.patch"] 24 | "#; 25 | 26 | let p = project() 27 | .file("Cargo.toml", MANIFEST) 28 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 29 | .file("test.patch", patch) 30 | .build(); 31 | 32 | (p.process(common::cargo_patch_exe()), p) 33 | } 34 | 35 | #[allow(deprecated)] 36 | #[cargo_test] 37 | fn patch_create_file() { 38 | let (mut e, p) = gen_execs( 39 | r#"--- /dev/null 40 | +++ test.txt 41 | @@ -0,0 +1,5 @@ 42 | +first 43 | + 44 | +second 45 | + 46 | +third 47 | "#, 48 | ); 49 | 50 | e.with_stdout("Patched serde: /dev/null -> test.txt").run(); 51 | 52 | let file = p.build_dir().join("patch").join("serde").join("test.txt"); 53 | 54 | let content = std::fs::read_to_string(file).expect("Unable to read test file"); 55 | assert_eq!(content.as_str(), TEST_CONTENT); 56 | } 57 | 58 | #[allow(deprecated)] 59 | #[cargo_test] 60 | fn patch_delete_file() { 61 | let (mut e, p) = gen_execs( 62 | r#"--- /dev/null 63 | +++ test.txt 64 | @@ -0,0 +1,5 @@ 65 | +first 66 | + 67 | +second 68 | + 69 | +third 70 | --- test.txt 71 | +++ /dev/null 72 | @@ -1,5 +0,0 @@ 73 | -first 74 | - 75 | -second 76 | - 77 | -third 78 | "#, 79 | ); 80 | 81 | e.with_stdout( 82 | "Patched serde: /dev/null -> test.txt\nPatched serde: test.txt -> /dev/null", 83 | ) 84 | .run(); 85 | 86 | let file = p.build_dir().join("patch").join("serde").join("test.txt"); 87 | assert!(!file.exists()) 88 | } 89 | 90 | #[allow(deprecated)] 91 | #[cargo_test] 92 | fn patch_invalid_both_empty() { 93 | let (mut e, _) = gen_execs( 94 | r#"--- /dev/null 95 | +++ /dev/null 96 | @@ -0,0 +1,5 @@ 97 | +first 98 | + 99 | +second 100 | + 101 | +third 102 | "#, 103 | ); 104 | 105 | e.with_stderr("Error: Both old and new file are all empty.") 106 | .with_status(1) 107 | .run(); 108 | } 109 | -------------------------------------------------------------------------------- /tests/patch_empty.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use cargo_test_macro::cargo_test; 4 | use cargo_test_support::{main_file, project}; 5 | 6 | #[allow(deprecated)] 7 | #[cargo_test] 8 | fn patch_empty_no_config() { 9 | let p = project().build(); 10 | 11 | p.process(common::cargo_patch_exe()) 12 | .with_stderr_contains("Error: failed to parse manifest at [..]") 13 | .with_status(1) 14 | .run(); 15 | } 16 | 17 | #[allow(deprecated)] 18 | #[cargo_test] 19 | fn patch_empty_no_src() { 20 | let manifest = r#" 21 | [package] 22 | name = "example" 23 | version = "0.1.0" 24 | authors = ["wycats@example.com"] 25 | "#; 26 | let p = project().file("Cargo.toml", manifest).build(); 27 | 28 | p.process(common::cargo_patch_exe()) 29 | .with_stderr_contains("Error: failed to parse manifest at [..]") 30 | .with_status(1) 31 | .run(); 32 | } 33 | 34 | #[allow(deprecated)] 35 | #[cargo_test] 36 | fn patch_empty_simple() { 37 | let manifest = r#" 38 | [package] 39 | name = "example" 40 | version = "0.1.0" 41 | authors = ["wycats@example.com"] 42 | "#; 43 | let p = project() 44 | .file("Cargo.toml", manifest) 45 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 46 | .build(); 47 | 48 | p.process(common::cargo_patch_exe()) 49 | .with_stdout("No patches found\n") 50 | .run(); 51 | } 52 | 53 | #[allow(deprecated)] 54 | #[cargo_test] 55 | fn patch_empty_missing_dependency() { 56 | let manifest = r#" 57 | [package] 58 | name = "example" 59 | version = "0.1.0" 60 | authors = ["wycats@example.com"] 61 | 62 | [package.metadata.patch.serde] 63 | patches = [] 64 | "#; 65 | let p = project() 66 | .file("Cargo.toml", manifest) 67 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 68 | .build(); 69 | 70 | p.process(common::cargo_patch_exe()) 71 | .with_stderr("Unable to find package serde in dependencies\n") 72 | .run(); 73 | } 74 | -------------------------------------------------------------------------------- /tests/patch_err.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use cargo_test_macro::cargo_test; 4 | use cargo_test_support::{main_file, project}; 5 | 6 | const MANIFEST: &str = r#" 7 | [package] 8 | name = "example" 9 | version = "0.1.0" 10 | authors = ["wycats@example.com"] 11 | 12 | [dependencies] 13 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 14 | 15 | [workspace.metadata.patch.serde] 16 | patches = ["test.patch"] 17 | "#; 18 | 19 | #[allow(deprecated)] 20 | #[cargo_test] 21 | fn patch_context_mismatch() { 22 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 23 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 24 | @@ -8,9 +8,7 @@ 25 | this line of context doesn't match 26 | neither does this one 27 | or this 28 | -The above copyright notice and this permission notice 29 | -shall be included in all copies or substantial portions 30 | -of the Software. 31 | +PATCHED 32 | 33 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 34 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 35 | "#; 36 | let p = project() 37 | .file("Cargo.toml", MANIFEST) 38 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 39 | .file("test.patch", patch) 40 | .build(); 41 | 42 | p.process(common::cargo_patch_exe()) 43 | .with_stderr("Error: failed to apply patch to LICENSE-MIT on line 8") 44 | .with_status(1) 45 | .run(); 46 | } 47 | 48 | #[allow(deprecated)] 49 | #[cargo_test] 50 | fn patch_deleted_mismatch() { 51 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 52 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 53 | @@ -8,9 +8,7 @@ 54 | is furnished to do so, subject to the following 55 | conditions: 56 | 57 | -The above copyright notice and this permission notice 58 | -this is a line which doesn't match the source file 59 | -therefore this patch should fail. 60 | +PATCHED 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 63 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 64 | "#; 65 | let p = project() 66 | .file("Cargo.toml", MANIFEST) 67 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 68 | .file("test.patch", patch) 69 | .build(); 70 | 71 | p.process(common::cargo_patch_exe()) 72 | .with_stderr("Error: failed to apply patch to LICENSE-MIT on line 12") 73 | .with_status(1) 74 | .run(); 75 | } 76 | -------------------------------------------------------------------------------- /tests/patch_git.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use cargo_test_macro::cargo_test; 4 | use cargo_test_support::{main_file, project}; 5 | 6 | #[allow(deprecated)] 7 | #[cargo_test] 8 | fn patch_git_invalid_dependency() { 9 | let manifest = r#" 10 | [package] 11 | name = "example" 12 | version = "0.1.0" 13 | authors = ["wycats@example.com"] 14 | 15 | [dependencies] 16 | asdf = { git = "https://github.com/mettke/asdf.git" } 17 | 18 | [package.metadata.patch.asdf] 19 | patches = [ 20 | "test.patch" 21 | ] 22 | "#; 23 | let p = project() 24 | .file("Cargo.toml", manifest) 25 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 26 | .file("test.patch", r#""#) 27 | .build(); 28 | 29 | p.process(common::cargo_patch_exe()) 30 | .with_stderr_contains( 31 | "Error: failed to get `asdf` as a dependency of package [..]", 32 | ) 33 | .with_status(1) 34 | .run(); 35 | } 36 | 37 | #[allow(deprecated)] 38 | #[cargo_test] 39 | fn patch_git_missing_patch() { 40 | let manifest = r#" 41 | [package] 42 | name = "example" 43 | version = "0.1.0" 44 | authors = ["wycats@example.com"] 45 | 46 | [dependencies] 47 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 48 | 49 | [package.metadata.patch.serde] 50 | patches = [ 51 | "test.patch" 52 | ] 53 | "#; 54 | let p = project() 55 | .file("Cargo.toml", manifest) 56 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 57 | .build(); 58 | 59 | p.process(common::cargo_patch_exe()) 60 | .with_stderr("Error: Unable to find patch file with path: \"test.patch\"\n") 61 | .with_status(1) 62 | .run(); 63 | } 64 | 65 | #[allow(deprecated)] 66 | #[cargo_test] 67 | fn patch_git_invalid_patch() { 68 | let manifest = r#" 69 | [package] 70 | name = "example" 71 | version = "0.1.0" 72 | authors = ["wycats@example.com"] 73 | 74 | [dependencies] 75 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 76 | 77 | [package.metadata.patch.serde] 78 | patches = [ 79 | "test.patch" 80 | ] 81 | "#; 82 | let p = project() 83 | .file("Cargo.toml", manifest) 84 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 85 | .file("test.patch", r#""#) 86 | .build(); 87 | 88 | p.process(common::cargo_patch_exe()) 89 | .with_stderr("Error: Unable to parse patch file\n") 90 | .with_status(1) 91 | .run(); 92 | } 93 | 94 | #[allow(deprecated)] 95 | #[cargo_test] 96 | fn patch_git_detailed() { 97 | let manifest = r#" 98 | [package] 99 | name = "example" 100 | version = "0.1.0" 101 | authors = ["wycats@example.com"] 102 | 103 | [dependencies] 104 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 105 | 106 | [package.metadata.patch.serde] 107 | patches = [ 108 | "test.patch" 109 | ] 110 | "#; 111 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 112 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 113 | @@ -8,9 +8,7 @@ 114 | is furnished to do so, subject to the following 115 | conditions: 116 | 117 | -The above copyright notice and this permission notice 118 | -shall be included in all copies or substantial portions 119 | -of the Software. 120 | +PATCHED 121 | 122 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 123 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 124 | "#; 125 | let p = project() 126 | .file("Cargo.toml", manifest) 127 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 128 | .file("test.patch", patch) 129 | .build(); 130 | 131 | p.process(common::cargo_patch_exe()) 132 | .with_stdout("Patched serde: LICENSE-MIT\n") 133 | .run(); 134 | 135 | let license_mit = p 136 | .build_dir() 137 | .join("patch") 138 | .join("serde") 139 | .join("LICENSE-MIT"); 140 | let licenses = 141 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 142 | assert!(licenses.contains("PATCHED")); 143 | } 144 | 145 | #[allow(deprecated)] 146 | #[cargo_test] 147 | fn patch_git_workspace_root() { 148 | let manifest = r#" 149 | [package] 150 | name = "example" 151 | version = "0.1.0" 152 | authors = ["wycats@example.com"] 153 | 154 | [workspace] 155 | members = ["test"] 156 | 157 | [package.metadata.patch.serde] 158 | patches = [ 159 | "test.patch" 160 | ] 161 | "#; 162 | let test_manifest = r#" 163 | [package] 164 | name = "example_test" 165 | version = "0.1.0" 166 | authors = ["wycats@example.com"] 167 | 168 | [dependencies] 169 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 170 | "#; 171 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 172 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 173 | @@ -8,9 +8,7 @@ 174 | is furnished to do so, subject to the following 175 | conditions: 176 | 177 | -The above copyright notice and this permission notice 178 | -shall be included in all copies or substantial portions 179 | -of the Software. 180 | +PATCHED 181 | 182 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 183 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 184 | "#; 185 | let p = project() 186 | .file("Cargo.toml", manifest) 187 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 188 | .file("test.patch", patch) 189 | .file("test/Cargo.toml", test_manifest) 190 | .file("test/src/main.rs", &main_file(r#""i am foo""#, &[])) 191 | .build(); 192 | 193 | p.process(common::cargo_patch_exe()) 194 | .with_stdout("Patched serde: LICENSE-MIT\n") 195 | .run(); 196 | 197 | let license_mit = p 198 | .build_dir() 199 | .join("patch") 200 | .join("serde") 201 | .join("LICENSE-MIT"); 202 | let licenses = 203 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 204 | assert!(licenses.contains("PATCHED")); 205 | } 206 | 207 | #[allow(deprecated)] 208 | #[cargo_test] 209 | fn patch_git_workspace_metadata() { 210 | let manifest = r#" 211 | [workspace] 212 | members = ["test"] 213 | 214 | [workspace.metadata.patch.serde] 215 | patches = [ 216 | "test.patch" 217 | ] 218 | "#; 219 | let test_manifest = r#" 220 | [package] 221 | name = "example_test" 222 | version = "0.1.0" 223 | authors = ["wycats@example.com"] 224 | 225 | [dependencies] 226 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 227 | "#; 228 | let patch = r#"--- LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 229 | +++ LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 230 | @@ -8,9 +8,7 @@ 231 | is furnished to do so, subject to the following 232 | conditions: 233 | 234 | -The above copyright notice and this permission notice 235 | -shall be included in all copies or substantial portions 236 | -of the Software. 237 | +PATCHED 238 | 239 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 240 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 241 | "#; 242 | let p = project() 243 | .file("Cargo.toml", manifest) 244 | .file("test.patch", patch) 245 | .file("test/Cargo.toml", test_manifest) 246 | .file("test/src/main.rs", &main_file(r#""i am foo""#, &[])) 247 | .build(); 248 | 249 | p.process(common::cargo_patch_exe()) 250 | .with_stdout("Patched serde: LICENSE-MIT\n") 251 | .run(); 252 | 253 | let license_mit = p 254 | .build_dir() 255 | .join("patch") 256 | .join("serde") 257 | .join("LICENSE-MIT"); 258 | let licenses = 259 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 260 | assert!(licenses.contains("PATCHED")); 261 | } 262 | -------------------------------------------------------------------------------- /tests/patch_github_pr_diff.rs: -------------------------------------------------------------------------------- 1 | use cargo_test_macro::cargo_test; 2 | use cargo_test_support::{main_file, project, Execs, Project}; 3 | 4 | mod common; 5 | 6 | fn gen_execs(patch: &str) -> (Execs, Project) { 7 | static MANIFEST: &str = r#" 8 | [package] 9 | name = "example" 10 | version = "0.1.0" 11 | authors = ["empty"] 12 | 13 | [dependencies] 14 | serde = { git = "https://github.com/serde-rs/serde.git", tag = "v1.0.110" } 15 | 16 | [workspace.metadata.patch.serde] 17 | patches = [{ path = "test.patch", source = "GithubPrDiff" }] 18 | "#; 19 | 20 | let p = project() 21 | .file("Cargo.toml", MANIFEST) 22 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 23 | .file("test.patch", patch) 24 | .build(); 25 | 26 | (p.process(common::cargo_patch_exe()), p) 27 | } 28 | 29 | #[allow(deprecated)] 30 | #[cargo_test] 31 | fn patch_file() { 32 | let (mut e, p) = gen_execs( 33 | r#"--- a/LICENSE-MIT 2020-05-20 18:44:09.709027472 +0200 34 | +++ b/LICENSE-MIT 2020-05-20 18:58:46.253762666 +0200 35 | @@ -8,9 +8,7 @@ Patch license 36 | is furnished to do so, subject to the following 37 | conditions: 38 | 39 | -The above copyright notice and this permission notice 40 | -shall be included in all copies or substantial portions 41 | -of the Software. 42 | +PATCHED 43 | 44 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF 45 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 46 | "# 47 | .replace("\n\n", "\n \n") // ide is deleting the prefix space in empty line 48 | .as_str(), 49 | ); 50 | 51 | e.with_stdout("Patched serde: LICENSE-MIT").run(); 52 | 53 | let license_mit = p 54 | .build_dir() 55 | .join("patch") 56 | .join("serde") 57 | .join("LICENSE-MIT"); 58 | let license = 59 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 60 | assert!(license.contains("PATCHED")); 61 | } 62 | -------------------------------------------------------------------------------- /tests/patch_using_build_rs.rs: -------------------------------------------------------------------------------- 1 | mod common; 2 | 3 | use cargo_test_macro::cargo_test; 4 | use cargo_test_support::{main_file, project}; 5 | use std::fmt; 6 | 7 | #[cargo_test] 8 | fn patch_using_build_rs() { 9 | let memchr_version = "2.7.4"; 10 | let manifest = format!( 11 | r#" 12 | [package] 13 | name = "example" 14 | version = "0.1.0" 15 | authors = ["wycats@example.com"] 16 | 17 | [dependencies] 18 | memchr = "={memchr_version}" 19 | 20 | [build-dependencies] 21 | cargo-patch = {{ path = "{cargo_patch_path}" }} 22 | 23 | [package.metadata.patch.memchr] 24 | patches = [ 25 | "patches/test.patch" 26 | ] 27 | "#, 28 | cargo_patch_path = common::cargo_patch_lib() 29 | ); 30 | let patch = r#"--- LICENSE-MIT 2023-07-30 15:38:00.598467733 +0200 31 | +++ LICENSE-MIT 2023-07-30 15:39:01.284727222 +0200 32 | @@ -9,8 +9,7 @@ 33 | copies of the Software, and to permit persons to whom the Software is 34 | furnished to do so, subject to the following conditions: 35 | 36 | -The above copyright notice and this permission notice shall be included in 37 | -all copies or substantial portions of the Software. 38 | +PATCHED 39 | 40 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 41 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 42 | "#; 43 | let p = project() 44 | .file("Cargo.toml", &manifest) 45 | .file("src/main.rs", &main_file(r#""i am foo""#, &[])) 46 | .file("patches/test.patch", patch) 47 | .file("build.rs", common::build_rs()) 48 | .build(); 49 | 50 | p.process("cargo").arg("build").cwd(p.root()).run(); 51 | 52 | let license_mit = p 53 | .build_dir() 54 | .join("patch") 55 | .join(fmt::format(format_args!("memchr-{}", memchr_version))) 56 | .join("LICENSE-MIT"); 57 | let license = 58 | std::fs::read_to_string(license_mit).expect("Unable to read license file"); 59 | assert!(license.contains("PATCHED")); 60 | } 61 | --------------------------------------------------------------------------------