You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
13 KiB
366 lines
13 KiB
Short Version: |
|
|
|
- Make small logical changes. |
|
- Provide a meaningful commit message. |
|
|
|
- Include your Signed-Off-By line to note you agree with the |
|
Developer's Certificate of Origin (see below). |
|
- Make sure all code is under the proper license: |
|
|
|
3-clause BSD |
|
|
|
- Use a subject prefix of "[PATCH JGIT ...]" when sending any |
|
patches directly by email. |
|
|
|
- Send by email to the maintainers, cc'ing the git mailing list |
|
which is currently used for both Git and JGit: |
|
|
|
maintainers : "Shawn O. Pearce" <spearce@spearce.org> |
|
Robin Rosenberg <robin.rosenberg@dewire.com> |
|
|
|
git list : git@vger.kernel.org |
|
|
|
git list info : http://vger.kernel.org/vger-lists.html#git |
|
|
|
Long Version: |
|
|
|
I wanted a file describing how to submit patches for JGit, |
|
so I started with the one found in the core Git distribution |
|
(Documentation/SubmittingPatches), which itself was based on the |
|
patch submission guidelines for the Linux kernel. |
|
|
|
However there are some differences, so please review and familiarize |
|
yourself with the following relevant bits: |
|
|
|
|
|
(1) Make separate commits for logically separate changes. |
|
|
|
Unless your patch is really trivial, you should not be sending |
|
out a patch that was generated between your working tree and your |
|
commit head. Instead, always make a commit with complete commit |
|
message and generate a series of patches from your repository. |
|
It is a good discipline. |
|
|
|
Describe the technical detail of the change(s). |
|
|
|
If your description starts to get too long, that's a sign that you |
|
probably need to split up your commit to finer grained pieces. |
|
|
|
I am very picky about formatting. Make sure your final version |
|
of every file was formatted using the Eclipse code formatter |
|
using the project specific settings (Properties->Java Code |
|
Style->Formatter->"Java Conventions [built-in]"). |
|
|
|
|
|
(2) Generate your patch using git tools out of your commits. |
|
|
|
git based diff tools (git, and StGIT included) generate unidiff, |
|
which is the only acceptable format. |
|
|
|
You do not have to be afraid to use -M option to "git diff" or "git |
|
format-patch", if your patch involves file renames. The receiving |
|
end can handle them just fine. |
|
|
|
Please make sure your patch does not include any extra files which |
|
do not belong in a patch submission. Make sure to review your |
|
patch after generating it, to ensure accuracy. Before sending out, |
|
please make sure it cleanly applies to the "master" branch head. |
|
|
|
|
|
(3) Sending your patches. |
|
|
|
People on the git mailing list need to be able to read and comment |
|
on the changes you are submitting. It is important for a developer |
|
to be able to "quote" your changes, using standard e-mail tools, so |
|
that they may comment on specific portions of your code. For this |
|
reason, all patches should be submitted "inline". WARNING: Be wary |
|
of your MUAs word-wrap corrupting your patch. Do not cut-n-paste |
|
your patch; you can lose tabs that way if you are not careful. |
|
|
|
It is a common convention to prefix your subject line with [PATCH]. |
|
This lets people easily distinguish patches from other e-mail |
|
discussions. |
|
|
|
"git format-patch" command follows the best current practice to |
|
format the body of an e-mail message. At the beginning of the patch |
|
should come your commit message, ending with the Signed-off-by: |
|
lines, and a line that consists of three dashes, followed by the |
|
diffstat information and the patch itself. If you are forwarding a |
|
patch from somebody else, optionally, at the beginning of the e-mail |
|
message just before the commit message starts, you can put a "From: |
|
" line to name that person. |
|
|
|
You often want to add additional explanation about the patch, |
|
other than the commit message itself. Place such "cover letter" |
|
material between the three dash lines and the diffstat. |
|
|
|
Do not attach the patch as a MIME attachment, compressed or not. |
|
Do not let your e-mail client send quoted-printable. Do not let your |
|
e-mail client send format=flowed which would destroy whitespaces |
|
in your patches. Many popular e-mail applications will not always |
|
transmit a MIME attachment as plain text, making it impossible to |
|
comment on your code. A MIME attachment also takes a bit more |
|
time to process. This does not decrease the likelihood of your |
|
MIME-attached change being accepted, but it makes it more likely |
|
that it will be postponed. |
|
|
|
Exception: If your mailer is mangling patches then someone may ask |
|
you to re-send them using MIME, that is OK. |
|
|
|
Do not PGP sign your patch, at least for now. Most likely, your |
|
maintainer or other people on the list would not have your PGP |
|
key and would not bother obtaining it anyway. Your patch is not |
|
judged by who you are; a good patch from an unknown origin has a |
|
far better chance of being accepted than a patch from a known, |
|
respected origin that is done poorly or does incorrect things. |
|
|
|
If you really really really really want to do a PGP signed |
|
patch, format it as "multipart/signed", not a text/plain message |
|
that starts with '-----BEGIN PGP SIGNED MESSAGE-----'. That is |
|
not a text/plain, it's something else. |
|
|
|
Note that your maintainer does not necessarily read everything |
|
on the git mailing list. If your patch is for discussion first, |
|
send it "To:" the mailing list, and optionally "cc:" him. If it |
|
is trivially correct or after the list reached a consensus, send it |
|
"To:" the maintainer and optionally "cc:" the list. |
|
|
|
|
|
(4) Check the license |
|
|
|
JGit is licensed under the 3-clause (new-style) BSD. |
|
|
|
Because of this licensing model *every* file within the project |
|
*must* list which license covers it in the header of the file. |
|
Any new contributions to an existing file *must* be submitted under |
|
the current license of that file. Any new files *must* clearly |
|
indicate which license they are provided under in the file header. |
|
|
|
Please verify that you are legally allowed and willing to submit your |
|
changes under the license covering each file *prior* to submitting |
|
your patch. It is virtually impossible to remove a patch once it |
|
has been applied and pushed out. |
|
|
|
|
|
(5) Sign your work |
|
|
|
To improve tracking of who did what, we've borrowed the "sign-off" |
|
procedure from the Linux kernel project on patches that are being |
|
emailed around. Although JGit is a lot smaller project it is |
|
a good discipline to follow it. |
|
|
|
The sign-off is a simple line at the end of the explanation for the |
|
patch, which certifies that you wrote it or otherwise have the right |
|
to pass it on as a open-source patch. The rules are pretty simple: |
|
if you can certify the below: |
|
|
|
Developer's Certificate of Origin 1.1 |
|
|
|
By making a contribution to this project, I certify that: |
|
|
|
(a) The contribution was created in whole or in part by me |
|
and I have the right to submit it under the open source |
|
license indicated in the file; or |
|
|
|
(b) The contribution is based upon previous work that, to the |
|
best of my knowledge, is covered under an appropriate |
|
open source license and I have the right under that |
|
license to submit that work with modifications, whether |
|
created in whole or in part by me, under the same open |
|
source license (unless I am permitted to submit under |
|
a different license), as indicated in the file; or |
|
|
|
(c) The contribution was provided directly to me by some |
|
other person who certified (a), (b) or (c) and I have |
|
not modified it. |
|
|
|
(d) I understand and agree that this project and the |
|
contribution are public and that a record of the |
|
contribution (including all personal information I |
|
submit with it, including my sign-off) is maintained |
|
indefinitely and may be redistributed consistent with |
|
this project or the open source license(s) involved. |
|
|
|
then you just add a line saying |
|
|
|
Signed-off-by: Random J Developer <random@developer.example.org> |
|
|
|
This line can be automatically added by git if you run the git-commit |
|
command with the -s option. |
|
|
|
Some people also put extra tags at the end. They'll just be ignored |
|
for now, but you can do this to mark internal company procedures |
|
or just point out some special detail about the sign-off. |
|
|
|
|
|
------------------------------------------------ |
|
MUA specific hints |
|
|
|
Some of patches I receive or pick up from the list share common |
|
patterns of breakage. Please make sure your MUA is set up |
|
properly not to corrupt whitespaces. Here are two common ones |
|
I have seen: |
|
|
|
* Empty context lines that do not have _any_ whitespace. |
|
|
|
* Non empty context lines that have one extra whitespace at the |
|
beginning. |
|
|
|
One test you could do yourself if your MUA is set up correctly is: |
|
|
|
* Send the patch to yourself, exactly the way you would, except |
|
To: and Cc: lines, which would not contain the list and |
|
maintainer address. |
|
|
|
* Save that patch to a file in UNIX mailbox format. Call it say |
|
a.patch. |
|
|
|
* Try to apply to the tip of the "master" branch from the |
|
egit.git public repository: |
|
|
|
$ git fetch git://repo.or.cz/egit.git master:test-apply |
|
$ git checkout test-apply |
|
$ git reset --hard |
|
$ git am a.patch |
|
|
|
If it does not apply correctly, there can be various reasons. |
|
|
|
* Your patch itself does not apply cleanly. That is _bad_ but |
|
does not have much to do with your MUA. Please rebase the |
|
patch appropriately. |
|
|
|
* Your MUA corrupted your patch; applymbox would complain that |
|
the patch does not apply. Look at .dotest/ subdirectory and |
|
see what 'patch' file contains and check for the common |
|
corruption patterns mentioned above. |
|
|
|
* While you are at it, check what are in 'info' and |
|
'final-commit' files as well. If what is in 'final-commit' is |
|
not exactly what you would want to see in the commit log |
|
message, it is very likely that your maintainer would end up |
|
hand editing the log message when he applies your patch. |
|
Things like "Hi, this is my first patch.\n", if you really |
|
want to put in the patch e-mail, should come after the |
|
three-dash line that signals the end of the commit message. |
|
|
|
|
|
Pine |
|
---- |
|
|
|
(Johannes Schindelin) |
|
|
|
I don't know how many people still use pine, but for those poor |
|
souls it may be good to mention that the quell-flowed-text is |
|
needed for recent versions. |
|
|
|
... the "no-strip-whitespace-before-send" option, too. AFAIK it |
|
was introduced in 4.60. |
|
|
|
(Linus Torvalds) |
|
|
|
And 4.58 needs at least this. |
|
|
|
--- |
|
diff-tree 8326dd8350be64ac7fc805f6563a1d61ad10d32c (from e886a61f76edf5410573e92e38ce22974f9c40f1) |
|
Author: Linus Torvalds <torvalds@g5.osdl.org> |
|
Date: Mon Aug 15 17:23:51 2005 -0700 |
|
|
|
Fix pine whitespace-corruption bug |
|
|
|
There's no excuse for unconditionally removing whitespace from |
|
the pico buffers on close. |
|
|
|
diff --git a/pico/pico.c b/pico/pico.c |
|
--- a/pico/pico.c |
|
+++ b/pico/pico.c |
|
@@ -219,7 +219,9 @@ PICO *pm; |
|
switch(pico_all_done){ /* prepare for/handle final events */ |
|
case COMP_EXIT : /* already confirmed */ |
|
packheader(); |
|
+#if 0 |
|
stripwhitespace(); |
|
+#endif |
|
c |= COMP_EXIT; |
|
break; |
|
|
|
|
|
(Daniel Barkalow) |
|
|
|
> A patch to SubmittingPatches, MUA specific help section for |
|
> users of Pine 4.63 would be very much appreciated. |
|
|
|
Ah, it looks like a recent version changed the default behavior to do the |
|
right thing, and inverted the sense of the configuration option. (Either |
|
that or Gentoo did it.) So you need to set the |
|
"no-strip-whitespace-before-send" option, unless the option you have is |
|
"strip-whitespace-before-send", in which case you should avoid checking |
|
it. |
|
|
|
|
|
Thunderbird |
|
----------- |
|
|
|
(A Large Angry SCM) |
|
|
|
Here are some hints on how to successfully submit patches inline using |
|
Thunderbird. |
|
|
|
This recipe appears to work with the current [*1*] Thunderbird from Suse. |
|
|
|
The following Thunderbird extensions are needed: |
|
AboutConfig 0.5 |
|
http://aboutconfig.mozdev.org/ |
|
External Editor 0.7.2 |
|
http://globs.org/articles.php?lng=en&pg=8 |
|
|
|
1) Prepare the patch as a text file using your method of choice. |
|
|
|
2) Before opening a compose window, use Edit->Account Settings to |
|
uncheck the "Compose messages in HTML format" setting in the |
|
"Composition & Addressing" panel of the account to be used to send the |
|
patch. [*2*] |
|
|
|
3) In the main Thunderbird window, _before_ you open the compose window |
|
for the patch, use Tools->about:config to set the following to the |
|
indicated values: |
|
mailnews.send_plaintext_flowed => false |
|
mailnews.wraplength => 0 |
|
|
|
4) Open a compose window and click the external editor icon. |
|
|
|
5) In the external editor window, read in the patch file and exit the |
|
editor normally. |
|
|
|
6) Back in the compose window: Add whatever other text you wish to the |
|
message, complete the addressing and subject fields, and press send. |
|
|
|
7) Optionally, undo the about:config/account settings changes made in |
|
steps 2 & 3. |
|
|
|
|
|
[Footnotes] |
|
*1* Version 1.0 (20041207) from the MozillaThunderbird-1.0-5 rpm of Suse |
|
9.3 professional updates. |
|
|
|
*2* It may be possible to do this with about:config and the following |
|
settings but I haven't tried, yet. |
|
mail.html_compose => false |
|
mail.identity.default.compose_html => false |
|
mail.identity.id?.compose_html => false |
|
|
|
|
|
|
|
Gnus |
|
---- |
|
|
|
'|' in the *Summary* buffer can be used to pipe the current |
|
message to an external program, and this is a handy way to drive |
|
"git am". However, if the message is MIME encoded, what is |
|
piped into the program is the representation you see in your |
|
*Article* buffer after unwrapping MIME. This is often not what |
|
you would want for two reasons. It tends to screw up non ASCII |
|
characters (most notably in people's names), and also |
|
whitespaces (fatal in patches). Running 'C-u g' to display the |
|
message in raw form before using '|' to run the pipe can work |
|
this problem around. |
|
|
|
|