# How to Contribute

We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.

## Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution;
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.
You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.

## Code reviews

The googleurl repository is currently not set up to accept pull requests directly.
If you would like to make a contribution, please follow these steps:
1.  Sign the Contributor License Agreement (see above).
2.  Create a Gerrit pull request at <https://quiche-review.googlesource.com>, or
    a GitHub pull request at <https://github.com/google/gurl/pulls>.
3.  Email a link to your pull request to <quiche-contribution@google.com>.
4.  An engineer will review your pull request and merge it internally.

## Community Guidelines

This project follows
[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/).

