cargo-patch 0.3.2

Cargo Subcommand for patching dependencies using patch files
Documentation
# cargo-patch

`Cargo-Patch` is a Cargo Subcommand which allows
patching dependencies using patch files.

## Installation

Simply run:

```sh
cargo install cargo-patch
```

This is not necessary when patching via `build.rs` file

## Usage

To patch a dependency one has to add the following
to `Cargo.toml`:

```toml
[package.metadata.patch.serde]
version = "1.0"
patches = [
    "test.patch"
]
```

It specifies which dependency to patch (in this case
serde) and one or more patchfiles to apply. Running:

```sh
cargo patch
```

will download the serde package specified in the
dependency section to the `target/patch` folder
and apply the given patches. To use the patched
version one has to override the dependency using
`replace` like this

```toml
[patch.crates-io]
serde = { path = './target/patch/serde-1.0.110' }
```

Instead of running `cargo patch` its also possible to add a `build.rs` file like this:

```rust
fn main() {
    println!("cargo:rerun-if-changed=Cargo.toml");
    println!("cargo:rerun-if-changed=patches/");
    cargo_patch::patch().expect("Failed while patching");
}
```

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

```tomlusing the
[build-dependencies]
cargo-patch = "0.3"
```

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.

## Patch format

You can either use [diff](http://man7.org/linux/man-pages/man1/diff.1.html) or
[git](https://linux.die.net/man/1/git) to create patch files. Important is that
file paths are relative and inside the dependency.

#### Using diff file generated by GitHub pull request

```toml
[package.metadata.patch.serde]
version = "1.0"
patches = [
    { path = "generatedByGithub.patch", source = "GithubPrDiff" },
    { path = "generatedByGithub2.patch", source = "GithubPrDiff" },
    "test.patch",
    "test2.patch"
]
```

## Limitations

It's only possible to patch dependencies of binary crates as it is not possible
for a subcommand to intercept the build process.