How to contribute

Version 52 (Daniil Osokin, 2014-07-14 06:01 pm)

1 13 Daniil Osokin
{{>toc}}
2 13 Daniil Osokin
3 1
h1. How to contribute
4 1
5 16 Daniil Osokin
We suppose that you've seen the http://opencv.org/contribute.html page, and now, as an enthusiastic coder, want to contribute some code. For that purpose OpenCV project now has a mirror on the GitHub, to simplify everybody's life! All the bug fixes, new functionality, new tutorials etc. should be submitted via the GitHub's mechanism of pull requests.
6 1
7 16 Daniil Osokin
If you are not familiar with the mechanism - do not worry, it's very simple. Keep reading.
8 1
9 24 Daniil Osokin
h2. "Fork & Pull Request model" for code contribution
10 13 Daniil Osokin
11 44 Daniil Osokin
h3. "Step-by-step" guides for popular systems and clients
12 39 Daniil Osokin
13 39 Daniil Osokin
* [[Windows 7 and TortoiseGit contribution guide]]
14 39 Daniil Osokin
15 50 Daniil Osokin
h3. *The instruction in brief*
16 32 Daniil Osokin
17 16 Daniil Osokin
# Install [[Git]].
18 16 Daniil Osokin
# Register at GitHub. Create your fork of OpenCV repository https://github.com/Itseez/opencv (see https://help.github.com/articles/fork-a-repo for details).
19 29 Daniil Osokin
# Choose a task for youself. It could be a "bugfix":http://www.code.opencv.org/projects/opencv/issues?query_id=5, or some new code.
20 30 Daniil Osokin
# Choose a base branch for your work. You have two options:
21 30 Daniil Osokin
## *2.4* - the branch that will be used for future minor releases in the 2.4.x line. Choose it when fixing a bug that's reproducible in this branch, or when making performance optimizations relevant to it. 2.4 has been feature-frozen; as such, new functionality will _not_ be accepted.
22 30 Daniil Osokin
## *master* - the branch that will be used for the next major release of OpenCV (tentatively, 3.0). Choose it when adding new functionality, or for bugfixes/optimizations that don't apply to 2.4.
23 42 Daniil Osokin
# Clone your fork to your computer. *Install the default pre-commit hook by renaming @opencv/.git/hooks/pre-commit.sample@ to @opencv/.git/hooks/pre-commit@ - this will prevent you from committing whitespace errors.*
24 32 Daniil Osokin
# Create a new branch (with a meaningful name) from the base branch you chose.
25 32 Daniil Osokin
# Modify/add the code following our [[Coding Style Guide]].
26 51 Daniil Osokin
# Run testsuite locally:
27 51 Daniil Osokin
## get the required sample data by cloning git://code.opencv.org/opencv_extra.git (choose corresponding branch)
28 51 Daniil Osokin
## export OPENCV_TEST_DATA_PATH=<path to opencv_extra/testdata>
29 51 Daniil Osokin
## execute each test binary from the build directory, e.g. bin/opencv_test_core
30 34 Daniil Osokin
# When you are done, push your branch to your GitHub fork; then create a pull request from your branch to the base branch (see https://help.github.com/articles/using-pull-requests for details).
31 32 Daniil Osokin
32 31 Daniil Osokin
h2. Making a good pull request
33 31 Daniil Osokin
34 31 Daniil Osokin
Following these guidelines will increase the likelihood of your pull request being accepted:
35 31 Daniil Osokin
36 31 Daniil Osokin
# Scope your PR to one issue. Before submitting, make sure the diff contains no unrelated changes. If you want to cover more than one issue, submit your changes for each as separate pull requests.
37 31 Daniil Osokin
# If you have added new functionality, you should update/create the relevant documentation, as well as add tests for it to the testsuite.
38 31 Daniil Osokin
# Try not to include "oops" commits - ones that just fix an error in the previous commit. If you have those, then before submitting "squash":http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits those fixes directly into the commits where they belong.
39 38 Daniil Osokin
# Make sure to choose the right base branch and to follow the [[Coding Style Guide]] for your code.
40 31 Daniil Osokin
41 16 Daniil Osokin
h2. Testing and merging of pull requests
42 4 Daniil Osokin
43 16 Daniil Osokin
# Your pull request will be automatically tested by OpenCV's buildbot (testing status can be checked here: http://pullrequest.opencv.org). If any builders are failed, you should fix the issue. As you fix the code and push changes to your branch at github, buildbot reruns automatically. _No need to close pull request and open a new one!_
44 16 Daniil Osokin
# Once all the builders are "green", one of OpenCV developers will review your code. Reviewer could ask you to modify your pull request. Please provide timely response for reviewers (within weeks, not months), otherwise you submission could be postponed or even rejected.
45 9 Daniil Osokin
46 18 Daniil Osokin
h3. Here is the flow-chart of the process:
47 19 Daniil Osokin
48 4 Daniil Osokin
!https://docs.google.com/drawings/pub?id=1_m7oVQ4CvoMxZn63N1_TyhhazmLLWY5uLEGUyPCERLo&w=960&h=720!
49 4 Daniil Osokin
50 36 Daniil Osokin
h2. Happy End
51 36 Daniil Osokin
52 36 Daniil Osokin
# As soon as the reviewer is fine with the pull request and BuildBot likes your code, the special comment  ":+1:" or ":shipit:" is put, which signals OpenCV maintainers that they can merge your pull request.
53 36 Daniil Osokin
# The last, but not least. Make sure you got credits. We try to memorize all the contributions and list major ones in the [[ChangeLog]] and release announcements, but we may forget to do that, unintentionally. Please, do not hesitate to remind us, and we will update opencv.org and the ChangeLog accordingly.
54 43 Daniil Osokin
55 43 Daniil Osokin
h2. FAQ
56 43 Daniil Osokin
57 44 Daniil Osokin
h3. Q1. I was asked to change the target branch for my pull request, but why?
58 1
59 52 Daniil Osokin
Please read "this":http://code.opencv.org/projects/opencv/wiki/How_to_contribute#The-instruction-in-brief, read the "Choose a base branch..." section.
60 1
61 44 Daniil Osokin
h3. Q2. I was asked to change the target branch for my pull request, how can I do that?
62 44 Daniil Osokin
63 44 Daniil Osokin
You can use @git cherry-pick@ command to move individual commits between branches. Here is the overall algorithm: you close the existing pull request, you create a new branch properly (from either `2.4` or `master`), you cherry-pick necessary commits into it, push changes to your GitHub branch, then make a new pull request.
64 44 Daniil Osokin
65 44 Daniil Osokin
h3. Q3. I was asked to remove whitespace issues, how can I do that?
66 44 Daniil Osokin
67 44 Daniil Osokin
Just resolve the issues, commit changes, and push them to the same branch you used to create a pull request.
68 44 Daniil Osokin
69 44 Daniil Osokin
Next time we suggest you to do the following. Install the default pre-commit hook by renaming @opencv/.git/hooks/pre-commit.sample@ to @opencv/.git/hooks/pre-commit@ - this will prevent you from committing whitespace errors.
70 44 Daniil Osokin
<pre>
71 44 Daniil Osokin
cd opencv
72 44 Daniil Osokin
mv opencv/.git/hooks/pre-commit.sample opencv/.git/hooks/pre-commit
73 44 Daniil Osokin
</pre>
74 44 Daniil Osokin
75 45 Daniil Osokin
Also, you can check for whitespace errors before the commit using this command:
76 44 Daniil Osokin
<pre>
77 44 Daniil Osokin
git diff --check
78 44 Daniil Osokin
</pre>