2018-08-01 20:05:57 +00:00
|
|
|
# Contributing to Go Protocol Buffers
|
|
|
|
|
|
|
|
Go protocol buffers is an open source project and accepts contributions.
|
|
|
|
The source of truth for this repository is at
|
|
|
|
[go.googlesource.com/protobuf](https://go.googlesource.com/protobuf).
|
|
|
|
The code review tool used is
|
|
|
|
[Gerrit Code Review](https://www.gerritcodereview.com/).
|
|
|
|
|
|
|
|
|
|
|
|
## Becoming a contributor
|
|
|
|
|
|
|
|
The first step is to configure your environment.
|
|
|
|
Please follow the steps outlined in
|
|
|
|
[Becoming a contributor](https://golang.org/doc/contribute.html#contributor)
|
|
|
|
as the setup for contributing to the `protobuf` project is identical
|
|
|
|
to that for contributing to the `go` project.
|
|
|
|
|
|
|
|
|
|
|
|
## Before contributing code
|
|
|
|
|
|
|
|
The project welcomes submissions, but to make sure things are well coordinated
|
|
|
|
we ask that everyone discuss any significant changes before starting work.
|
|
|
|
Best practice is to connect your work to the
|
|
|
|
[issue tracker](https://github.com/golang/protobuf/issues),
|
|
|
|
either by filing a new issue or by claiming an existing issue.
|
|
|
|
Issues related to the new API should have a "APIv2:" prefix in the title.
|
|
|
|
|
|
|
|
|
|
|
|
## Sending a change via Gerrit
|
|
|
|
|
|
|
|
The `protobuf` project performs development in Gerrit.
|
|
|
|
Unfortunately, we are not currently able to accept GitHub pull requests.
|
|
|
|
Below are the steps to send a change using Gerrit.
|
|
|
|
|
|
|
|
|
|
|
|
**Step 1:** Clone the Go source code:
|
|
|
|
```
|
2018-08-07 23:18:02 +00:00
|
|
|
$ git clone https://go.googlesource.com/protobuf
|
2018-08-01 20:05:57 +00:00
|
|
|
```
|
|
|
|
|
2018-08-07 23:18:02 +00:00
|
|
|
**Step 2:** Setup a Git hook:
|
|
|
|
Setup a hook to run the tests prior to submitting changes to Gerrit:
|
|
|
|
```
|
|
|
|
$ (cd protobuf/.git/hooks && echo -e '#!/bin/bash\n./test.bash' > pre-push && chmod a+x pre-push)
|
|
|
|
```
|
|
|
|
|
|
|
|
**Step 3:** Prepare changes in a new branch, created from the `master` branch.
|
2018-08-01 20:05:57 +00:00
|
|
|
To commit the changes, use `git codereview change`;
|
|
|
|
that will create or amend a single commit in the branch.
|
|
|
|
|
|
|
|
```
|
|
|
|
$ git checkout -b mybranch
|
|
|
|
$ [edit files...]
|
|
|
|
$ git add [files...]
|
|
|
|
$ git codereview change # create commit in the branch
|
|
|
|
$ [edit again...]
|
|
|
|
$ git add [files...]
|
|
|
|
$ git codereview change # amend the existing commit with new changes
|
|
|
|
$ [etc.]
|
|
|
|
```
|
|
|
|
|
2018-08-07 23:18:02 +00:00
|
|
|
**Step 4:** Send the changes for review to Gerrit using `git codereview mail`.
|
2018-08-01 20:05:57 +00:00
|
|
|
```
|
|
|
|
$ git codereview mail # send changes to Gerrit
|
|
|
|
```
|
|
|
|
|
2018-08-07 23:18:02 +00:00
|
|
|
**Step 5:** After a review, there may be changes that are required.
|
2018-08-01 20:05:57 +00:00
|
|
|
Do so by applying changes to the same commit and mail them to Gerrit again:
|
|
|
|
```
|
|
|
|
$ [edit files...]
|
|
|
|
$ git add [files...]
|
|
|
|
$ git codereview change # update same commit
|
|
|
|
$ git codereview mail # send to Gerrit again
|
|
|
|
```
|
|
|
|
|
2018-08-07 23:18:02 +00:00
|
|
|
When calling `git codereview mail`, it will call `git push` under the hood,
|
|
|
|
which will trigger the test hook that was setup in step 2.
|
|
|
|
|
2018-08-01 20:05:57 +00:00
|
|
|
The [Contribution Guidelines](https://golang.org/doc/contribute.html) for the
|
|
|
|
Go project provides additional details that are also relevant to
|
|
|
|
contributing to the Go `protobuf` project.
|