Merge refs/heads/master from .
This commit is contained in:
commit
933693da77
@ -73,14 +73,25 @@ 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.
|
||||
you to re-send them using MIME, that is OK.
|
||||
|
||||
Note that your maintainer does not subscribe to the git mailing
|
||||
list (he reads it via mail-to-news gateway). If your patch is
|
||||
for discussion first, send it "To:" the mailing list, and
|
||||
optoinally "cc:" him. If it is trivially correct or after list
|
||||
discussion reached consensus, send it "To:" the maintainer and
|
||||
optionally "cc:" the list.
|
||||
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.
|
||||
|
||||
|
||||
(6) Sign your work
|
||||
@ -128,3 +139,152 @@ then you just add a line saying
|
||||
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
|
||||
git.git public repository:
|
||||
|
||||
$ git fetch http://kernel.org/pub/scm/git/git.git master:test-apply
|
||||
$ git checkout test-apply
|
||||
$ git reset --hard
|
||||
$ git applymbox 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;
|
||||
|
||||
|
||||
|
||||
Thunderbird
|
||||
-----------
|
||||
|
||||
(A Large Angry SCM)
|
||||
|
||||
Here are some hints on how to successfully submit patches inline using
|
||||
Thunderbird. [*3*]
|
||||
|
||||
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.5.4
|
||||
http://extensionroom.mozdev.org/more-info/exteditor
|
||||
|
||||
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 => 999
|
||||
|
||||
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
|
||||
|
||||
*3* Even after following these hints, Thunderbird will still trim
|
||||
trailing whitespace from each line. I currently have no work around for
|
||||
for this issue.
|
||||
|
||||
|
@ -3,26 +3,24 @@ git-mailsplit(1)
|
||||
|
||||
NAME
|
||||
----
|
||||
git-mailsplit - Some git command not yet documented.
|
||||
|
||||
git-mailsplit - Totally braindamaged mbox splitter program.
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-mailsplit' [ --option ] <args>...
|
||||
'git-mailsplit' <mbox> <directory>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Does something not yet documented.
|
||||
|
||||
Splits a mbox file into a list of files: "0001" "0002" .. in the specified
|
||||
directory so you can process them further from there.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
--option::
|
||||
Some option not yet documented.
|
||||
|
||||
<args>...::
|
||||
Some argument not yet documented.
|
||||
<mbox>::
|
||||
Mbox file to split.
|
||||
|
||||
<directory>::
|
||||
Directory in which to place the individual messages.
|
||||
|
||||
Author
|
||||
------
|
||||
|
@ -3,26 +3,21 @@ git-stripspace(1)
|
||||
|
||||
NAME
|
||||
----
|
||||
git-stripspace - Some git command not yet documented.
|
||||
git-stripspace - Fileter out empty lines.
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-stripspace' [ --option ] <args>...
|
||||
'git-stripspace' < <stream>
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Does something not yet documented.
|
||||
|
||||
Remove multiple empty lines, and empty lines at beginning and end.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
--option::
|
||||
Some option not yet documented.
|
||||
|
||||
<args>...::
|
||||
Some argument not yet documented.
|
||||
|
||||
<stream>::
|
||||
Byte stream to act on.
|
||||
|
||||
Author
|
||||
------
|
||||
|
2
apply.c
2
apply.c
@ -387,7 +387,7 @@ static char *git_header_name(char *line)
|
||||
default:
|
||||
continue;
|
||||
case '\n':
|
||||
break;
|
||||
return NULL;
|
||||
case '\t': case ' ':
|
||||
second = name+len;
|
||||
for (;;) {
|
||||
|
@ -195,8 +195,8 @@ else
|
||||
fi
|
||||
if [ "$?" != "0" -a ! -f $GIT_DIR/MERGE_HEAD ]
|
||||
then
|
||||
sed -ne '/^#/p' .editmsg
|
||||
rm .editmsg
|
||||
rm -f .editmsg
|
||||
git-status-script
|
||||
exit 1
|
||||
fi
|
||||
case "$no_edit" in
|
||||
|
@ -26,6 +26,10 @@ do
|
||||
esac
|
||||
shift
|
||||
done
|
||||
case "$#" in
|
||||
0)
|
||||
die "Where would you want to push today?" ;;
|
||||
esac
|
||||
|
||||
. git-parse-remote-script
|
||||
remote=$(get_remote_url "$@")
|
||||
|
@ -11,7 +11,6 @@ die() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
[ -d "$GIT_DIR" ] &&
|
||||
[ -h "$GIT_DIR/HEAD" ] &&
|
||||
[ -d "$GIT_DIR/refs" ] &&
|
||||
[ -d "$GIT_OBJECT_DIRECTORY" ] &&
|
||||
[ -d "$GIT_OBJECT_DIRECTORY/00" ]
|
||||
|
@ -1,4 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2005 Linus Torvalds
|
||||
#
|
||||
. git-sh-setup-script || die "Not a git archive"
|
||||
|
||||
report () {
|
||||
@ -28,19 +31,43 @@ report () {
|
||||
[ "$header" ]
|
||||
}
|
||||
|
||||
branch=`readlink "$GIT_DIR/HEAD"`
|
||||
case "$branch" in
|
||||
refs/heads/master) ;;
|
||||
*) echo "# On branch $branch" ;;
|
||||
esac
|
||||
|
||||
git-update-cache --refresh >/dev/null 2>&1
|
||||
git-diff-cache -M --cached HEAD | sed 's/^://' | report "Updated but not checked in" "will commit"
|
||||
|
||||
git-diff-cache -M --cached HEAD |
|
||||
sed 's/^://' |
|
||||
report "Updated but not checked in" "will commit"
|
||||
|
||||
committable="$?"
|
||||
git-diff-files | sed 's/^://' | report "Changed but not updated" "use git-update-cache to mark for commit"
|
||||
|
||||
git-diff-files |
|
||||
sed 's/^://' |
|
||||
report "Changed but not updated" "use git-update-cache to mark for commit"
|
||||
|
||||
if grep -v '^#' "$GIT_DIR/info/exclude" >/dev/null 2>&1
|
||||
then
|
||||
git-ls-files --others \
|
||||
--exclude-from="$GIT_DIR/info/exclude" \
|
||||
--exclude-per-directory=.gitignore |
|
||||
sed -e '
|
||||
1i\
|
||||
#\
|
||||
# Ignored files:\
|
||||
# (use "git add" to add to commit)\
|
||||
#
|
||||
s/^/# /
|
||||
$a\
|
||||
#'
|
||||
fi
|
||||
|
||||
if [ "$committable" == "0" ]
|
||||
then
|
||||
echo "nothing to commit"
|
||||
exit 1
|
||||
fi
|
||||
branch=`readlink "$GIT_DIR/HEAD"`
|
||||
case "$branch" in
|
||||
refs/heads/master) ;;
|
||||
*) echo "#
|
||||
# On branch $branch" ;;
|
||||
esac
|
||||
exit 0
|
||||
|
31
setup.c
31
setup.c
@ -72,6 +72,24 @@ const char **get_pathspec(const char *prefix, char **pathspec)
|
||||
return (const char **) pathspec;
|
||||
}
|
||||
|
||||
/*
|
||||
* Test it it looks like we're at the top
|
||||
* level git directory. We want to see a
|
||||
*
|
||||
* - a HEAD symlink and a refs/ directory under ".git"
|
||||
* - either a .git/objects/ directory _or_ the proper
|
||||
* GIT_OBJECT_DIRECTORY environment variable
|
||||
*/
|
||||
static int is_toplevel_directory(void)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
return !lstat(".git/HEAD", &st) &&
|
||||
S_ISLNK(st.st_mode) &&
|
||||
!access(".git/refs/", X_OK) &&
|
||||
(gitenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK));
|
||||
}
|
||||
|
||||
const char *setup_git_directory(void)
|
||||
{
|
||||
static char cwd[PATH_MAX+1];
|
||||
@ -89,17 +107,8 @@ const char *setup_git_directory(void)
|
||||
|
||||
offset = len = strlen(cwd);
|
||||
for (;;) {
|
||||
/*
|
||||
* We always want to see a .git/refs/ subdirectory
|
||||
*/
|
||||
if (!access(".git/refs/", X_OK)) {
|
||||
/*
|
||||
* Then we need either a GIT_OBJECT_DIRECTORY define
|
||||
* or a .git/objects/ directory
|
||||
*/
|
||||
if (gitenv(DB_ENVIRONMENT) || !access(".git/objects/", X_OK))
|
||||
break;
|
||||
}
|
||||
if (is_toplevel_directory())
|
||||
break;
|
||||
chdir("..");
|
||||
do {
|
||||
if (!offset)
|
||||
|
176
t/t4109-apply-multifrag.sh
Normal file
176
t/t4109-apply-multifrag.sh
Normal file
@ -0,0 +1,176 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2005 Junio C Hamano
|
||||
# Copyright (c) 2005 Robert Fitzsimons
|
||||
#
|
||||
|
||||
test_description='git-apply test patches with multiple fragments.
|
||||
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
# setup
|
||||
|
||||
cat > patch1.patch <<\EOF
|
||||
diff --git a/main.c b/main.c
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/main.c
|
||||
@@ -0,0 +1,23 @@
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+int func(int num);
|
||||
+void print_int(int num);
|
||||
+
|
||||
+int main() {
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < 10; i++) {
|
||||
+ print_int(func(i));
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int func(int num) {
|
||||
+ return num * num;
|
||||
+}
|
||||
+
|
||||
+void print_int(int num) {
|
||||
+ printf("%d", num);
|
||||
+}
|
||||
+
|
||||
EOF
|
||||
cat > patch2.patch <<\EOF
|
||||
diff --git a/main.c b/main.c
|
||||
--- a/main.c
|
||||
+++ b/main.c
|
||||
@@ -1,7 +1,9 @@
|
||||
+#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int func(int num);
|
||||
void print_int(int num);
|
||||
+void print_ln();
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
@@ -10,6 +12,8 @@
|
||||
print_int(func(i));
|
||||
}
|
||||
|
||||
+ print_ln();
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,3 +25,7 @@
|
||||
printf("%d", num);
|
||||
}
|
||||
|
||||
+void print_ln() {
|
||||
+ printf("\n");
|
||||
+}
|
||||
+
|
||||
EOF
|
||||
cat > patch3.patch <<\EOF
|
||||
diff --git a/main.c b/main.c
|
||||
--- a/main.c
|
||||
+++ b/main.c
|
||||
@@ -1,9 +1,7 @@
|
||||
-#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int func(int num);
|
||||
void print_int(int num);
|
||||
-void print_ln();
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
@@ -12,8 +10,6 @@
|
||||
print_int(func(i));
|
||||
}
|
||||
|
||||
- print_ln();
|
||||
-
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -25,7 +21,3 @@
|
||||
printf("%d", num);
|
||||
}
|
||||
|
||||
-void print_ln() {
|
||||
- printf("\n");
|
||||
-}
|
||||
-
|
||||
EOF
|
||||
cat > patch4.patch <<\EOF
|
||||
diff --git a/main.c b/main.c
|
||||
--- a/main.c
|
||||
+++ b/main.c
|
||||
@@ -1,13 +1,14 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int func(int num);
|
||||
-void print_int(int num);
|
||||
+int func2(int num);
|
||||
|
||||
int main() {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
- print_int(func(i));
|
||||
+ printf("%d", func(i));
|
||||
+ printf("%d", func3(i));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -17,7 +18,7 @@
|
||||
return num * num;
|
||||
}
|
||||
|
||||
-void print_int(int num) {
|
||||
- printf("%d", num);
|
||||
+int func2(int num) {
|
||||
+ return num * num * num;
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
test_expect_success "S = git-apply (1)" \
|
||||
'git-apply patch1.patch patch2.patch'
|
||||
mv main.c main.c.git
|
||||
|
||||
test_expect_success "S = patch (1)" \
|
||||
'cat patch1.patch patch2.patch | patch -p1'
|
||||
|
||||
test_expect_success "S = cmp (1)" \
|
||||
'cmp main.c.git main.c'
|
||||
|
||||
rm -f main.c main.c.git
|
||||
|
||||
test_expect_success "S = git-apply (2)" \
|
||||
'git-apply patch1.patch patch2.patch patch3.patch'
|
||||
mv main.c main.c.git
|
||||
|
||||
test_expect_success "S = patch (2)" \
|
||||
'cat patch1.patch patch2.patch patch3.patch | patch -p1'
|
||||
|
||||
test_expect_success "S = cmp (2)" \
|
||||
'cmp main.c.git main.c'
|
||||
|
||||
rm -f main.c main.c.git
|
||||
|
||||
test_expect_success "S = git-apply (3)" \
|
||||
'git-apply patch1.patch patch4.patch'
|
||||
mv main.c main.c.git
|
||||
|
||||
test_expect_success "S = patch (3)" \
|
||||
'cat patch1.patch patch4.patch | patch -p1'
|
||||
|
||||
test_expect_success "S = cmp (3)" \
|
||||
'cmp main.c.git main.c'
|
||||
|
||||
test_done
|
||||
|
101
t/t4110-apply-scan.sh
Normal file
101
t/t4110-apply-scan.sh
Normal file
@ -0,0 +1,101 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2005 Junio C Hamano
|
||||
# Copyright (c) 2005 Robert Fitzsimons
|
||||
#
|
||||
|
||||
test_description='git-apply test for patches which require scanning forwards and backwards.
|
||||
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
# setup
|
||||
|
||||
cat > patch1.patch <<\EOF
|
||||
diff --git a/new.txt b/new.txt
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/new.txt
|
||||
@@ -0,0 +1,12 @@
|
||||
+a1
|
||||
+a11
|
||||
+a111
|
||||
+a1111
|
||||
+b1
|
||||
+b11
|
||||
+b111
|
||||
+b1111
|
||||
+c1
|
||||
+c11
|
||||
+c111
|
||||
+c1111
|
||||
EOF
|
||||
cat > patch2.patch <<\EOF
|
||||
diff --git a/new.txt b/new.txt
|
||||
--- a/new.txt
|
||||
+++ b/new.txt
|
||||
@@ -1,7 +1,3 @@
|
||||
-a1
|
||||
-a11
|
||||
-a111
|
||||
-a1111
|
||||
b1
|
||||
b11
|
||||
b111
|
||||
EOF
|
||||
cat > patch3.patch <<\EOF
|
||||
diff --git a/new.txt b/new.txt
|
||||
--- a/new.txt
|
||||
+++ b/new.txt
|
||||
@@ -6,6 +6,10 @@
|
||||
b11
|
||||
b111
|
||||
b1111
|
||||
+b2
|
||||
+b22
|
||||
+b222
|
||||
+b2222
|
||||
c1
|
||||
c11
|
||||
c111
|
||||
EOF
|
||||
cat > patch4.patch <<\EOF
|
||||
diff --git a/new.txt b/new.txt
|
||||
--- a/new.txt
|
||||
+++ b/new.txt
|
||||
@@ -1,3 +1,7 @@
|
||||
+a1
|
||||
+a11
|
||||
+a111
|
||||
+a1111
|
||||
b1
|
||||
b11
|
||||
b111
|
||||
EOF
|
||||
cat > patch5.patch <<\EOF
|
||||
diff --git a/new.txt b/new.txt
|
||||
--- a/new.txt
|
||||
+++ b/new.txt
|
||||
@@ -10,3 +10,7 @@
|
||||
c11
|
||||
c111
|
||||
c1111
|
||||
+c2
|
||||
+c22
|
||||
+c222
|
||||
+c2222
|
||||
EOF
|
||||
|
||||
test_expect_success "S = git-apply scan" \
|
||||
'git-apply patch1.patch patch2.patch patch3.patch patch4.patch patch5.patch'
|
||||
mv new.txt apply.txt
|
||||
|
||||
test_expect_success "S = patch scan" \
|
||||
'cat patch1.patch patch2.patch patch3.patch patch4.patch patch5.patch | patch'
|
||||
mv new.txt patch.txt
|
||||
|
||||
test_expect_success "S = cmp" \
|
||||
'cmp apply.txt patch.txt'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user