# Crates which require permission to patch upstream

Crates in this directory don't fall under Google's [patching policy]. Googlers who wish to
contribute to the upstream projects here must seek approval by filing a bug under the `OSRB`
component.

Crates moved to this directory should not be modified from their upstream contents, except
to add a single `#![allow(warnings)]` to the crate's `lib.rs` to prevent repeated warnings
when operated on by Cargo. If you need to make code changes, move the crate to
`//third_party/rust_crates/forks/<crate_name>` and add a `README.fuchsia` file explaining
the changes *and* this upstream patching policy restriction.

To update a crate in this directory:

1. Comment out its line in the `[patch.crates-io]` section of `//third_party/rust_crates/Cargo.toml`.
2. Run `fx update-rustc-third-party`.
3. Delete all of `//third_party/rust_crates/ask2patch/<crate_name>` except the `OWNERS` file.
4. Move the contents of `//third_party/rust_crates/vendor/<crate_name>/*` to
   `//third_party/rust_crates/ask2patch/<crate_name>/*` and delete the directory in `vendor/`.
5. Undo (1), uncommenting the crate's line in `//third_party/rust_crates/Cargo.toml`.
6. Repeat (2).

[patching policy]: https://opensource.google/docs/patching/
