#patch-file #patch #cargo #dependencies #patchfile

bin+lib patch-crate

patch-crate lets rust developer instantly make and keep fixes to rust crate dependencies. It's a vital band-aid for those of us living on the bleeding edge.

10 releases

0.1.10 Jul 27, 2024
0.1.9 Dec 16, 2023
0.1.6 Nov 6, 2023
0.1.5 Oct 27, 2023

#1256 in Command line utilities

Download history 130/week @ 2024-08-16 49/week @ 2024-08-23 178/week @ 2024-08-30 148/week @ 2024-09-06 122/week @ 2024-09-13 158/week @ 2024-09-20 158/week @ 2024-09-27 383/week @ 2024-10-04 288/week @ 2024-10-11 306/week @ 2024-10-18 212/week @ 2024-10-25 247/week @ 2024-11-01 282/week @ 2024-11-08 296/week @ 2024-11-15 296/week @ 2024-11-22 540/week @ 2024-11-29

1,454 downloads per month

MIT license

27KB
305 lines

Patch-Crate

patch-crate lets rust app developer instantly make and keep fixes to rust crate dependencies. It's a vital band-aid for those of us living on the bleeding edge.

# fix a bug in one of your dependencies
vim target/patch/brokencrate

# run patch-crate to create a .patch file
cargo patch-crate some-crate

# commit the patch file to share the fix with your team
git add patches/some-crate+3.14.15.patch
git commit -m "fix broken_file.rs in some-crate"

Checkout our example at here.

Get started

  1. Install command patch-crate

    cargo install patch-crate
    
  2. Add broken crate in your Cargo.toml

    
    [package.metadata.patch]
    crates = ["some-crate"]
    
    [patch.crates-io]
    some-crate = { path="./target/patch/some-crate-1.0.110" }
    
  3. Download the crate's source code into target/patch

    cargo patch-crate
    
  4. Fix the broken code in target/patch/some-crate directly.

  5. Create a crate-patch

    cargo patch-crate some-crate
    
  6. Commit the patch file to share the fix with your team

    git add patches/some-crate+1.0.110.patch
    git commit -m "fix broken-code in some-crate"
    
  7. Instead of running cargo patch-crate its also possible to add a build.rs file like this:

    fn main() {
       println!("cargo:rerun-if-changed=Cargo.toml");
       patch_crate::run().expect("Failed while patching");
    }
    

    To make it work, add the patch-crate library to the build-dependencies

    patch-crate = "0.1"
    

Command explanation

  • cargo patch-crate

    Apply patch files in ./patches to ./target/patch/crate-xxx if it not exist.

  • cargo patch-crate --force

    Clean up ./target/patch/ and apply patch files in ./patches to ./target/patch/crate-xxx.

  • crate patch-crate <crate name1> <crate name2> ...

    Create patch file of specific crate from ./target/patch/crate-xxx and save to ./patches

Credits

License

Licensed under either of

at your option.

Dependencies

~88MB
~1.5M SLoC