Thank you for your interest in contributing to the Apache Thrift project! Information on why and how to contribute is available on the Apache Software Foundation (ASF) web site. In particular, we recommend the following to become acquainted with Apache Contributions:
This is the preferred method of submitting changes. When you submit a pull request through github, it activates the continuous integration (CI) build systems at Appveyor and Travis to build your changesxi on a variety of Linux and Windows configurations and run all the test suites. Follow these requirements for a successful pull request:
All significant changes require an Apache Jira THRIFT Issue ticket. Trivial changes such as fixing a typo or a compiler warning do not.
All pull requests should contain a single commit per issue, or we will ask you to squash it.
The pull request title must begin with the Jira THRIFT ticket identifier if it has an associated ticket, for example:
THRIFT-9999: an example pull request title
Commit messages must follow this pattern for code changes (deviations will not be merged):
THRIFT-9999: [summary of fix, one line if possible] Client: [language(s) affected, comma separated, for example: "cpp,erl,perl"]
Instructions:
Create a fork in your GitHub account of http://github.com/apache/thrift
Clone the fork to your development system.
Create a branch for your changes (best practice is issue as branch name, e.g. THRIFT-9999).
Modify the source to include the improvement/bugfix, and:
Squash your changes to a single commit. This maintains clean change history.
Commit and push changes to your branch (please use issue name and description as commit title, e.g. “THRIFT-9999: make it perfect”), with the affected languages on the next line of the description.
Use GitHub to create a pull request going from your branch to apache:master. Ensure that the Jira ticket number is at the beginning of the title of your pull request, same as the commit title.
Wait for other contributors or committers to review your new addition, and for a CI build to complete.
Wait for a committer to commit your patch. You can nudge the committers if necessary by sending a message to the Apache Thrift mailing list.
For Windows systems, see our detailed instructions on the CMake README.
For Windows Native C++ builds, see our detailed instructions on the WinCPP README.
For unix systems, see our detailed instructions on the Docker README.
project = THRIFT AND component in ("Erlang - Library") and status not in (resolved, closed)
will locate all the open Erlang Library issues.To create a patch from changes in your local directory:
git diff > ../THRIFT-NNNN.patch
then wait for contributors or committers to review your changes, and then for a committer to apply your patch. This is not the preferred way to submit changes and incurs additional overhead for committers who must then create a pull request for you.
Sometimes commmitters may ask you to take actions in your pull requests. Here are some recipes that will help you accomplish those requests. These examples assume you are working on Jira issue THRIFT-9999. You should also be familiar with the upstream repository concept.
If you have not submitted a pull request yet, or if you have not yet rebased your existing pull request, you can squash all your commits down to a single commit. This makes life easier for the committers. If your pull request on GitHub has more than one commit, you should do this.
git log
to identify how many commits you made since you began.git rebase -i HEAD~N
where N is the number of commits.If you already have a pull request outstanding, you will need to do a “force push” to overwrite it since you changed your commit history:
git push -u origin THRIFT-9999 --force
A more detailed walkthrough of a squash can be found at Git Ready.
If your pull request has a conflict with master, it needs to be rebased:
git checkout THRIFT-9999 git rebase upstream master (resolve any conflicts, make sure it builds) git push -u origin THRIFT-9999 --force
If your pull request contains commits that are not yours, then you should use the following technique to fix the bad merge in your branch:
git checkout master git pull upstream master git checkout -b THRIFT-9999-take-2 git cherry-pick ... (pick only your commits from your original pull request in ascending chronological order) squash your changes to a single commit if there is more than one (see above) git push -u origin THRIFT-9999-take-2:THRIFT-9999
This procedure will apply only your commits in order to the current master, then you will squash them to a single commit, and then you force push your local THRIFT-9999-take-2 into remote THRIFT-9999 which represents your pull request, replacing all the commits with the new one.