1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
============
Contributing
============
Setup
=====
Fork on GitHub
--------------
Before you do anything else, login/signup on GitHub and fork OAuthLib from the
`GitHub project`_.
Clone your fork locally
-----------------------
If you have git-scm installed, you now clone your git repo using the following
command-line argument where <my-github-name> is your account name on GitHub::
git clone git@github.com/<my-github-name>/oauthlib.git
Issues!
=======
The list of outstanding OAuthLib feature requests and bugs can be found on our
on our GitHub `issue tracker`_. Pick an unassigned issue that you think you can
accomplish, add a comment that you are attempting to do it, and shortly your own
personal label matching your GitHub ID will be assigned to that issue.
Feel free to propose issues that aren't described!
Setting up topic branches and generating pull requests
======================================================
While it's handy to provide useful code snippets in an issue, it is better for
you as a developer to submit pull requests. By submitting pull request your
contribution to OpenComparison will be recorded by Github.
In git it is best to isolate each topic or feature into a "topic branch". While
individual commits allow you control over how small individual changes are made
to the code, branches are a great way to group a set of commits all related to
one feature together, or to isolate different efforts when you might be working
on multiple topics at the same time.
While it takes some experience to get the right feel about how to break up
commits, a topic branch should be limited in scope to a single ``issue`` as
submitted to an issue tracker.
Also since GitHub pegs and syncs a pull request to a specific branch, it is the
**ONLY** way that you can submit more than one fix at a time. If you submit a
pull from your master branch, you can't make any more commits to your master
without those getting added to the pull.
To create a topic branch, its easiest to use the convenient ``-b`` argument to
``git checkout``::
git checkout -b fix-broken-thing
Switched to a new branch 'fix-broken-thing'
You should use a verbose enough name for your branch so it is clear what it is
about. Now you can commit your changes and regularly merge in the upstream
master as described below.
When you are ready to generate a pull request, either for preliminary review, or
for consideration of merging into the project you must first push your local
topic branch back up to GitHub::
git push origin fix-broken-thing
Now when you go to your fork on GitHub, you will see this branch listed under
the "Source" tab where it says "Switch Branches". Go ahead and select your topic
branch from this list, and then click the "Pull request" button.
Here you can add a comment about your branch. If this in response to a submitted
issue, it is good to put a link to that issue in this initial comment. The repo
managers will be notified of your pull request and it will be reviewed (see
below for best practices). Note that you can continue to add commits to your
topic branch (and push them up to GitHub) either if you see something that needs
changing, or in response to a reviewer's comments. If a reviewer asks for
changes, you do not need to close the pull and reissue it after making changes.
Just make the changes locally, push them to GitHub, then add a comment to the
discussion section of the pull request.
Pull upstream changes into your fork
====================================
It is critical that you pull upstream changes from master into your fork on a
regular basis. Nothing is worse than putting in a days of hard work into a pull
request only to have it rejected because it has diverged too far from master.
To pull in upstream changes::
git remote add upstream https://github.com/idan/oauthlib.git
git fetch upstream
Check the log to be sure that you actually want the changes, before merging::
git log upstream/master
Then merge the changes that you fetched::
git merge upstream/master
For more info, see http://help.github.com/fork-a-repo/
How to get your pull request accepted
=====================================
We want your submission. But we also want to provide a stable experience for our
users and the community. Follow these rules and you should succeed without a
problem!
Run the tests!
--------------
Before you submit a pull request, please run the entire OAuthLib test suite from
the project root via:
.. sourcecode:: bash
$ python -m unittest discover
The first thing the core committers will do is run this command. Any pull
request that fails this test suite will be **rejected**.
Testing multiple versions of Python
-----------------------------------
OAuthLib supports Python 2.6, 2.7, 3.2, 3.3 and experimentally PyPy. Testing
all versions conveniently can be done using `Tox`_.
.. sourcecode:: bash
$ tox
Tox requires you to have `virtualenv`_ installed as well as respective python
version. For Ubuntu you can easily install all after adding one ppa.
.. sourcecode:: bash
$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python2.6 python2.6-dev
$ sudo apt-get install python2.7 python2.7-dev
$ sudo apt-get install python3.2 python3.2-dev
$ sudo apt-get install python3.3 python3.3-dev
$ sudo apt-get install pypy pypy-dev
.. _`Tox`: http://tox.readthedocs.org/en/latest/install.html
.. _`virtualenv`: http://www.virtualenv.org/en/latest/#installation
If you add code you need to add tests!
--------------------------------------
We've learned the hard way that code without tests is undependable. If your pull
request reduces our test coverage because it lacks tests then it will be
**rejected**.
Also, keep your tests as simple as possible. Complex tests end up requiring
their own tests. We would rather see duplicated assertions across test methods
than cunning utility methods that magically determine which assertions are
needed at a particular stage. Remember: `Explicit is better than implicit`.
Don't mix code changes with whitespace cleanup
----------------------------------------------
If you change two lines of code and correct 200 lines of whitespace issues in a
file the diff on that pull request is functionally unreadable and will be
**rejected**. Whitespace cleanups need to be in their own pull request.
Keep your pull requests limited to a single issue
--------------------------------------------------
OauthLib pull requests should be as small/atomic as possible. Large,
wide-sweeping changes in a pull request will be **rejected**, with comments to
isolate the specific code in your pull request. Some examples:
#. If you are making spelling corrections in the docs, don't modify any Python
code.
#. If you are adding a new module don't '*cleanup*' other modules. That cleanup
in another pull request.
#. Changing any attributes of a module, such as permissions on a file should be
in its own pull request with explicit reasons why.
Follow PEP-8 and keep your code simple!
---------------------------------------
Memorize the Zen of Python::
>>> python -c 'import this'
Please keep your code as clean and straightforward as possible. When we see more
than one or two functions/methods starting with `_my_special_function` or things
like `__builtins__.object = str` we start to get worried. Rather than try and
figure out your brilliant work we'll just **reject** it and send along a request
for simplification.
Furthermore, the pixel shortage is over. We want to see:
* `package` instead of `pkg`
* `grid` instead of `g`
* `my_function_that_does_things` instead of `mftdt`
How pull requests are checked, tested, and done
===============================================
First we pull the code into a local branch::
git remote add <submitter-github-name> git@github.com:<submitter-github-name>/opencomparison.git
git fetch <submitter-github-name>
git checkout -b <branch-name> <submitter-github-name>/<branch-name>
Then we run the tests::
python -m unittest discover
We finish with a non-fastforward merge (to preserve the branch history) and push
to GitHub::
git checkout master
git merge --no-ff <branch-name>
git push upstream master
.. _installation: install.html
.. _GitHub project: https://github.com/idan/oauthlib
.. _issue tracker: https://github.com/idan/oauthlib/issues
|