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.
367 lines
13 KiB
367 lines
13 KiB
15 years ago
|
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.
|
||
|
|