Code

git.git
18 years agogit-pickaxe: optimize by avoiding repeated read_sha1_file().
Junio C Hamano [Sun, 5 Nov 2006 19:51:41 +0000 (11:51 -0800)]
git-pickaxe: optimize by avoiding repeated read_sha1_file().

It turns out that pickaxe reads the same blob repeatedly while
blame can reuse the blob already read for the parent when
handling a child commit when it's parent's turn to pass its
blame to the grandparent.  Have a cache in the origin structure
to keep the blob there, which will be garbage collected when the
origin loses the last reference to it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-blame: add internal statistics to count read blobs.
Junio C Hamano [Sun, 5 Nov 2006 19:47:53 +0000 (11:47 -0800)]
git-blame: add internal statistics to count read blobs.

18 years agogit-pickaxe: fix origin refcounting
Junio C Hamano [Sun, 5 Nov 2006 03:18:50 +0000 (19:18 -0800)]
git-pickaxe: fix origin refcounting

When we introduced the cached origin per commit, we gave up proper
garbage collecting because it meant that commits hold onto their
cached copy.  There is no need to do so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: re-scan the blob after making progress with -C
Junio C Hamano [Sun, 5 Nov 2006 00:39:03 +0000 (16:39 -0800)]
git-pickaxe: re-scan the blob after making progress with -C

The reason to do this is the same as in the previous change for
line copy detection within the same file (-M).

Also this fixes -C and -C -C (aka find-copies-harder) logic; in
this application we are not interested in the similarity
matching diffcore-rename makes, because we are only interested
in scanning files that were modified, or in the case of -C -C,
scanning all files in the parent and we want to do that
ourselves.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: re-scan the blob after making progress with -M
Junio C Hamano [Sat, 4 Nov 2006 20:37:02 +0000 (12:37 -0800)]
git-pickaxe: re-scan the blob after making progress with -M

Otherwise we would miss copied lines that are contained in the
parts before or after the part that we find after splitting the
blame_entry (i.e. split[0] and split[2]).

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: simplify Octopus merges further
Junio C Hamano [Sat, 4 Nov 2006 20:20:09 +0000 (12:20 -0800)]
git-pickaxe: simplify Octopus merges further

If more than one parents in an Octopus merge have the same
origin, ignore later ones because it would not make any
difference in the outcome.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: rename detection optimization
Junio C Hamano [Thu, 2 Nov 2006 08:02:11 +0000 (00:02 -0800)]
git-pickaxe: rename detection optimization

The idea is that we are interested in renaming into only one path, so
we do not care about renames that happen elsewhere.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: work properly in a subdirectory.
Jeff King [Thu, 2 Nov 2006 07:22:49 +0000 (02:22 -0500)]
git-pickaxe: work properly in a subdirectory.

We forgot to add prefix to the given path.

[jc: interestingly enough, Jeff King had the same idea after I
 pushed mine out to "pu", and his patch was cleaner, so I dropped
 mine.]

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoIntroduce a new revision set operator <rev>^!
Junio C Hamano [Tue, 31 Oct 2006 22:22:34 +0000 (14:22 -0800)]
Introduce a new revision set operator <rev>^!

This is a shorthand for "<rev> --not <rev>^@", i.e. "include
this commit but exclude any of its parents".

When a new file $F is introduced by revision $R, this notation
can be used to find a copy-and-paste from existing file in the
parents of that revision without annotating the ancestry of the
lines that were copied from:

git pickaxe -f -C $R^! -- $F

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: cache one already found path per commit.
Junio C Hamano [Tue, 31 Oct 2006 09:00:01 +0000 (01:00 -0800)]
git-pickaxe: cache one already found path per commit.

Depending on how bushy the commit DAG is, this saves calls to
the internal diff-tree for fork-point commits.  For example,
annotating Makefile in the kernel repository saves about a third
of such diff-tree calls.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: split find_origin() into find_rename() and find_origin().
Junio C Hamano [Tue, 31 Oct 2006 01:17:41 +0000 (17:17 -0800)]
git-pickaxe: split find_origin() into find_rename() and find_origin().

When a merge adds a new file from the second parent, the
earlier code tried to find renames in the first parent before
noticing that the vertion from the second parent was added
without modification.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: tighten sanity checks.
Junio C Hamano [Mon, 30 Oct 2006 22:27:52 +0000 (14:27 -0800)]
git-pickaxe: tighten sanity checks.

When compiled for debugging, make sure that refcnt sanity check
code detects underflows in origin reference counting.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: refcount origin correctly in find_copy_in_parent()
Junio C Hamano [Mon, 30 Oct 2006 07:56:12 +0000 (23:56 -0800)]
git-pickaxe: refcount origin correctly in find_copy_in_parent()

This makes "git-pickaxe -C master -- revision.c" to finish with
proper refcounts for all origins.  I am reasonably happy with
it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: allow -Ln,m as well as -L n,m
Junio C Hamano [Mon, 30 Oct 2006 07:50:38 +0000 (23:50 -0800)]
git-pickaxe: allow -Ln,m as well as -L n,m

The command rejects -L1,10 as an invalid line range specifier
and I got frustrated enough by it, so this makes it allow both
forms of input.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: WIP to refcount origin structure.
Junio C Hamano [Sun, 29 Oct 2006 11:07:40 +0000 (03:07 -0800)]
git-pickaxe: WIP to refcount origin structure.

The origin structure is allocated for each commit and path while
the code traverse down it is copied into different blame entries.
To avoid leaks, try refcounting them.

This still seems to leak, which I haven't tracked down fully yet.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: swap comparison loop used for -C
Junio C Hamano [Sat, 21 Oct 2006 10:30:53 +0000 (03:30 -0700)]
git-pickaxe: swap comparison loop used for -C

When assigning blames for code movements across file boundaries,
we used to iterate over blame entries (i.e. groups of lines to
be blamed) in the outer loop and compared each entry with paths
in the parent commit in an inner loop.  This meant that we
opened the blob data from each path number of times.

Reorganize the loop so that we read the same path only once, and
compare it against all relevant blame entries.

This should perform better, but seems to give mixed results,
though.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: get rid of wasteful find_origin().
Junio C Hamano [Sat, 21 Oct 2006 09:56:33 +0000 (02:56 -0700)]
git-pickaxe: get rid of wasteful find_origin().

After finding out which path in the parent to scan to pass
blames, using get_tree_entry() to extract the blob information
again was quite wasteful, since diff-tree already gave us that
information.  Separate the function to create an origin out as
get_origin().

You'll never know what is more efficient unless you try and/or
think hard.  I somehow thought that extracting one known path
out of commit's tree is cheaper than running a diff-tree for the
current path between the commit and its parent, but it is not
the case.  In real, non-toy projects, most commits do not touch
the path you are interested in, and if the path is a few levels
away from the toplevel, whole-subdirectory comparison logic
diff-tree allows us to skip opening lower subdirectories.

This commit rewrites find_origin() function to use a single-path
diff-tree to see if the parent has the same blob as the current
suspect, which is cheaper than extracting the blob information
using get_tree_entry() and comparing it with what the current
suspect has.  This shaves about 6% overhead when annotating
kernel/sched.c in the Linux kernel repository on my machine.
The saving rises to 25% for arch/i386/kernel/Makefile.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: do not confuse two origins that are the same.
Junio C Hamano [Sat, 21 Oct 2006 07:41:38 +0000 (00:41 -0700)]
git-pickaxe: do not confuse two origins that are the same.

It used to be that we can compare the address of the origin
structure to determine if they are the same because they are
always registered with scoreboard.  After introduction of the
loop to try finding the best split, that is not true anymore.

The current code has rather serious leaks with origin structure,
but more importantly it gets confused when two origins that
points at the same commit and same path.

We might eventually have to refcount and gc origin, but let's
fix the correctness issue first.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: do not keep commit buffer.
Junio C Hamano [Sat, 21 Oct 2006 06:49:31 +0000 (23:49 -0700)]
git-pickaxe: do not keep commit buffer.

We need the commit buffer data while generating the final result,
but until then we do not need them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: introduce heuristics to avoid "trivial" chunks
Junio C Hamano [Fri, 20 Oct 2006 22:37:12 +0000 (15:37 -0700)]
git-pickaxe: introduce heuristics to avoid "trivial" chunks

This adds scoring logic to blame_entry to prevent blames on very
trivial chunks (e.g. lots of empty lines, indent followed by a
closing brace) from being passed down to unrelated lines in the
parent.

The current heuristics are quite simple and may need to be
tweaked later, but we need to start somewhere.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: improve "best match" heuristics
Junio C Hamano [Fri, 20 Oct 2006 21:51:12 +0000 (14:51 -0700)]
git-pickaxe: improve "best match" heuristics

Instead of comparing number of lines matched, look at the
matched characters and count alnums, so that we do not pass
blame on not-so-interesting lines, such as an empty line and
a line that is indentation followed by a closing brace.

Add an option --score-debug to show the score of each
blame_entry while we cook this further on the "next" branch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: fix nth_line()
Junio C Hamano [Sat, 21 Oct 2006 01:48:18 +0000 (18:48 -0700)]
git-pickaxe: fix nth_line()

We would want to be able to refer to the end of the file as
"the beginning of Nth line" for a file that is N lines long.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: pagenate output by default.
Junio C Hamano [Sat, 21 Oct 2006 01:37:10 +0000 (18:37 -0700)]
git-pickaxe: pagenate output by default.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe -C: blame cut-and-pasted lines.
Junio C Hamano [Fri, 20 Oct 2006 01:50:17 +0000 (18:50 -0700)]
git-pickaxe -C: blame cut-and-pasted lines.

This completes the initial round of git-pickaxe.  In addition to
the detection of line movements we already have, this finds new
lines that were created by moving or cutting-and-pasting lines
from different files in the parent.

With this,

git pickaxe -f -n -C v1.4.0 -- revision.c

finds that a major part of that file actually came from
rev-list.c when Linus split the latter at commit ae563642 and
blames them to earlier commits that touch rev-list.c.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe -M: blame line movements within a file.
Junio C Hamano [Fri, 20 Oct 2006 01:49:30 +0000 (18:49 -0700)]
git-pickaxe -M: blame line movements within a file.

This makes pickaxe more intelligent than the classic blame.

A typical example is a change that moves one static C function
from lower part of the file to upper part of the same file,
because you added a new caller in the middle.

The versions in the parent and the child would look like this:

        parent            child

        A                 static foo() {
        B                 ...
        C                 }
        D                 A
        E                 B
        F                 C
        G                 D
        static foo() {    ... call foo();
        ...               E
        }                 F
        H                 G
                          H

With the classic blame algorithm, we can blame lines A B C D E F
G and H to the parent.  The child is guilty of introducing the
line "... call foo();", and the blame is placed on the child.
However, the classic blame algorithm fails to notice that the
implementation of foo() at the top of the file is not new, and
moved from the lower part of the parent.

This commit introduces detection of such line movements, and
correctly blames the lines that were simply moved in the file to
the parent.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-pickaxe: blame rewritten.
Junio C Hamano [Thu, 19 Oct 2006 23:00:04 +0000 (16:00 -0700)]
git-pickaxe: blame rewritten.

Currently it does what git-blame does, but only faster.

More importantly, its internal structure is designed to support
content movement (aka cut-and-paste) more easily by allowing
more than one paths to be taken from the same commit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMerge branch 'maint'
Junio C Hamano [Fri, 20 Oct 2006 04:28:12 +0000 (21:28 -0700)]
Merge branch 'maint'

* maint:
  git-apply: prepare for upcoming GNU diff -u format change.

18 years agogit-apply: prepare for upcoming GNU diff -u format change.
Linus Torvalds [Fri, 20 Oct 2006 02:26:08 +0000 (19:26 -0700)]
git-apply: prepare for upcoming GNU diff -u format change.

The latest GNU diff from CVS emits an empty line to express
an empty context line, instead of more traditional "single
white space followed by a newline".  Do not get broken by it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoDon't use $author_name undefined when $from contains no /\s</.
Jim Meyering [Thu, 19 Oct 2006 08:33:01 +0000 (10:33 +0200)]
Don't use $author_name undefined when $from contains no /\s</.

I noticed a case not handled in a recent patch.
Demonstrate it like this:

  $ touch new-file
  $ git-send-email --dry-run --from j --to k new-file 2>err
  new-file
  OK. Log says:
  Date: Thu, 19 Oct 2006 10:26:24 +0200
  Sendmail: /usr/sbin/sendmail
  From: j
  Subject:
  Cc:
  To: k

  Result: OK
  $ cat err
  Use of uninitialized value in pattern match (m//) at /p/bin/git-send-email line 416.
  Use of uninitialized value in concatenation (.) or string at /p/bin/git-send-email line 420.
  Use of uninitialized value in concatenation (.) or string at /p/bin/git-send-email line 468.

There's a patch for the $author_name part below.

The example above shows that $subject may also be used uninitialized.
That should be easy to fix, too.

Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMerge branch 'mw/pathinfo'
Junio C Hamano [Thu, 19 Oct 2006 05:09:11 +0000 (22:09 -0700)]
Merge branch 'mw/pathinfo'

* mw/pathinfo:
  gitweb: Fix search form when PATH_INFO is enabled
  gitweb: Document features better
  gitweb: warn if feature cannot be overridden.
  gitweb: start to generate PATH_INFO URLs.

Conflicts:

gitweb/README

18 years agoMerge branch 'js/diff'
Junio C Hamano [Thu, 19 Oct 2006 05:09:03 +0000 (22:09 -0700)]
Merge branch 'js/diff'

* js/diff:
  Turn on recursive with --summary

18 years agoMerge branch 'jc/send-email'
Junio C Hamano [Thu, 19 Oct 2006 05:09:00 +0000 (22:09 -0700)]
Merge branch 'jc/send-email'

* jc/send-email:
  Make git-send-email detect mbox-style patches more readily
  git-send-email: real name with period need to be dq-quoted on From: line
  git-send-email: do not drop custom headers the user prepared

18 years agoMerge branch 'jc/grep'
Junio C Hamano [Thu, 19 Oct 2006 05:08:58 +0000 (22:08 -0700)]
Merge branch 'jc/grep'

* jc/grep:
  teach revision walker about --all-match.
  grep --all-match

18 years agoMerge early part of branch 'jc/diff-apply-patch'
Junio C Hamano [Thu, 19 Oct 2006 05:08:46 +0000 (22:08 -0700)]
Merge early part of branch 'jc/diff-apply-patch'

18 years agoMerge branch 'jc/diff-numstat'
Junio C Hamano [Thu, 19 Oct 2006 05:08:42 +0000 (22:08 -0700)]
Merge branch 'jc/diff-numstat'

* jc/diff-numstat:
  diff --numstat

18 years agoMerge branch 'pb/bisect'
Junio C Hamano [Thu, 19 Oct 2006 05:08:39 +0000 (22:08 -0700)]
Merge branch 'pb/bisect'

* pb/bisect:
  bisect reset: Leave the tree in usable state if git-checkout failed

18 years agoMerge branch 'mw/send-email'
Junio C Hamano [Thu, 19 Oct 2006 05:08:37 +0000 (22:08 -0700)]
Merge branch 'mw/send-email'

* mw/send-email:
  Add --dry-run option to git-send-email

18 years agoMerge branch 'rs/rebase'
Junio C Hamano [Thu, 19 Oct 2006 05:08:31 +0000 (22:08 -0700)]
Merge branch 'rs/rebase'

* rs/rebase:
  git-rebase: Add a -v option to show a diffstat of the changes upstream at the start of a rebase.
  git-rebase: Use --ignore-if-in-upstream option when executing git-format-patch.

18 years agoMerge branch 'sb/fetch'
Junio C Hamano [Thu, 19 Oct 2006 05:08:29 +0000 (22:08 -0700)]
Merge branch 'sb/fetch'

* sb/fetch:
  merge and resolve: Output short hashes and .. in "Updating ..."
  fetch: Misc output cleanup

18 years agoMerge branch 'sk/svn'
Junio C Hamano [Thu, 19 Oct 2006 05:08:26 +0000 (22:08 -0700)]
Merge branch 'sk/svn'

* sk/svn:
  git-svnimport.perl: copying directory from original SVN place

18 years agoMerge branch 'rs/zip'
Junio C Hamano [Thu, 19 Oct 2006 05:08:24 +0000 (22:08 -0700)]
Merge branch 'rs/zip'

* rs/zip:
  git-archive --format=zip: add symlink support
  git-archive --format=zip: use default version ID

18 years agoAdd revspec documentation for ':path', ':[0-3]:path' and git-describe
pclouds@gmail.com [Thu, 19 Oct 2006 03:04:55 +0000 (10:04 +0700)]
Add revspec documentation for ':path', ':[0-3]:path' and git-describe

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoReject hexstring longer than 40-bytes in get_short_sha1()
pclouds@gmail.com [Thu, 19 Oct 2006 01:34:41 +0000 (08:34 +0700)]
Reject hexstring longer than 40-bytes in get_short_sha1()

Such a string can never be a valid object name.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoreduce delta head inflated size
Nicolas Pitre [Wed, 18 Oct 2006 19:56:22 +0000 (15:56 -0400)]
reduce delta head inflated size

Supposing that both the base and result sizes were both full size 64-bit
values, their encoding would occupy only 9.2 bytes each.  Therefore
inflating 64 bytes is way overkill.  Limit it to 20 bytes instead which
should be plenty enough for a couple years to come.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-imap-send: Strip smtp From_ header from imap message. v1.4.3
Markus Amsler [Thu, 12 Oct 2006 22:19:35 +0000 (00:19 +0200)]
git-imap-send: Strip smtp From_ header from imap message.

Cyrus imap refuses messages with a 'From ' Header.

[jc: Mike McCormack says this is fine with Courier as well.]

Signed-off-by: Markus Amsler <markus.amsler@oribi.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoadd proper dependancies on the xdiff source
Andy Whitcroft [Tue, 17 Oct 2006 18:08:08 +0000 (19:08 +0100)]
add proper dependancies on the xdiff source

We are not rebuilding the xdiff library when its header files change.
Add dependancies for those to the main Makefile.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Acked-by: Ryan Anderson <ryan@google.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agobisect reset: Leave the tree in usable state if git-checkout failed
Petr Baudis [Mon, 16 Oct 2006 00:59:25 +0000 (02:59 +0200)]
bisect reset: Leave the tree in usable state if git-checkout failed

I had local modifications in the tree and doing bisect reset required me to
manually edit .git/HEAD.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMerge branch 'maint'
Junio C Hamano [Tue, 17 Oct 2006 04:58:54 +0000 (21:58 -0700)]
Merge branch 'maint'

* maint:
  Fix hash function in xdiff library

18 years agoFix hash function in xdiff library v1.4.2.4
Linus Torvalds [Tue, 17 Oct 2006 02:58:54 +0000 (19:58 -0700)]
Fix hash function in xdiff library

Jim Mayering noticed that xdiff library took insanely long time
when comparing files with many identical lines.

This was because the hash function used in the library is broken
on 64-bit architectures and caused too many collisions.

http://thread.gmane.org/gmane.comp.version-control.git/28962/focus=28994

Acked-by: Davide Libenzi <davidel@xmaliserver.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agosvnimport: Fix broken tags being generated
Petr Baudis [Mon, 16 Oct 2006 01:00:37 +0000 (03:00 +0200)]
svnimport: Fix broken tags being generated

Currently git-svnimport generates broken tags missing the timespec in the
'tagger' line. This is a random stab at a minimal fix.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoReplace open-coded version of hash_sha1_file()
Rene Scharfe [Sun, 15 Oct 2006 12:02:18 +0000 (14:02 +0200)]
Replace open-coded version of hash_sha1_file()

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMake write_sha1_file_prepare() void
Rene Scharfe [Sun, 15 Oct 2006 12:02:03 +0000 (14:02 +0200)]
Make write_sha1_file_prepare() void

Move file name generation from write_sha1_file_prepare() to the one
caller that cares and make it a void function.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoRevert "move pack creation to version 3"
Junio C Hamano [Sun, 15 Oct 2006 06:37:41 +0000 (23:37 -0700)]
Revert "move pack creation to version 3"

This reverts commit 16854571aae6302f457c5fbee41ac64669b09595.
Git as recent as v1.1.6 do not understand version 3 delta.

v1.2.0 is Ok and I personally would say it is old enough, but
the improvement between version 2 and version 3 delta is not
bit enough to justify breaking older clients.

We should resurrect this later, but when we do so we shold
make it conditional.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMerge branch 'jc/http' v1.4.3-rc3
Junio C Hamano [Sun, 15 Oct 2006 01:25:28 +0000 (18:25 -0700)]
Merge branch 'jc/http'

* jc/http:
  Add WEBDAV timeout to http-fetch.

18 years agoclone: the given repository dir should be relative to $PWD
Yasushi SHOJI [Sat, 14 Oct 2006 12:02:51 +0000 (21:02 +0900)]
clone: the given repository dir should be relative to $PWD

the repository argument for git-clone should be relative to $PWD
instead of the given target directory.  The old behavior gave us
surprising success and you need a few minute to know why it worked.

GIT_DIR is already exported so no need to cd into $D. And this makes
$PWD for git-fetch-pack, which is the actual command to take the given
repository dir, the same as git-clone.

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agocvsserver: fix "cvs diff" in a subdirectory
Johannes Schindelin [Tue, 10 Oct 2006 22:33:28 +0000 (00:33 +0200)]
cvsserver: fix "cvs diff" in a subdirectory

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agocvsserver: Show correct letters for modified, removed and added files
Johannes Schindelin [Tue, 10 Oct 2006 22:20:43 +0000 (00:20 +0200)]
cvsserver: Show correct letters for modified, removed and added files

Earlier, cvsserver showed always an 'U', sometimes even without a space
between the 'U' and the name. Now, the correct letter is shown, with a
space.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: reduce memory usage for large commits
Eric Wong [Sat, 14 Oct 2006 22:48:35 +0000 (15:48 -0700)]
git-svn: reduce memory usage for large commits

apply_textdelta and send_stream can use a separate pool from the
rest of the editor interface, so we'll use a separate SVN::Pool
for them and clear the pool after each file is sent to SVN.

This drastically reduces memory usage per-changeset committed,
and makes large commits (and initial imports) of several
thousand files possible.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoFix tracing when GIT_TRACE is set to an empty string.
Christian Couder [Sat, 14 Oct 2006 14:05:25 +0000 (16:05 +0200)]
Fix tracing when GIT_TRACE is set to an empty string.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMake write_sha1_file_prepare() static
Rene Scharfe [Sat, 14 Oct 2006 10:45:45 +0000 (12:45 +0200)]
Make write_sha1_file_prepare() static

There are no callers of write_sha1_file_prepare() left outside of
sha1_file.c, so make it static.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoAdd hash_sha1_file()
Rene Scharfe [Sat, 14 Oct 2006 10:45:36 +0000 (12:45 +0200)]
Add hash_sha1_file()

Most callers of write_sha1_file_prepare() are only interested in the
resulting hash but don't care about the returned file name or the header.
This patch adds a simple wrapper named hash_sha1_file() which does just
that, and converts potential callers.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: fix commits over svn+ssh://
Eric Wong [Sat, 14 Oct 2006 09:02:37 +0000 (02:02 -0700)]
git-svn: fix commits over svn+ssh://

Once a get_commit_editor has been called from an SVN session, RA
layer operations are not allowed (well, unless you're using
file:// or http(s)://).  So we'll pass an alternate SVN::Ra
object to our editor object for running 'check-path'.

This should fix commits over svnserve (svn:// without ssh, too).

Closes Debian bug #392702, thanks to Pierre Habouzit for
reporting the bug.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agodiff --numstat
Junio C Hamano [Thu, 12 Oct 2006 10:01:00 +0000 (03:01 -0700)]
diff --numstat

[jc: with documentation from Jakub]

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agot4015: work-around here document problem on Cygwin.
Junio C Hamano [Fri, 13 Oct 2006 21:20:27 +0000 (14:20 -0700)]
t4015: work-around here document problem on Cygwin.

Signed-off-by: Junio C Hamano <junio@twinsun.com>
18 years agoDocumentation: add missing second colons and remove a typo
Rene Scharfe [Thu, 12 Oct 2006 16:26:34 +0000 (18:26 +0200)]
Documentation: add missing second colons and remove a typo

It takes two colons to mark text as item label.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agodiff: fix 2 whitespace issues
Johannes Schindelin [Thu, 12 Oct 2006 12:22:14 +0000 (14:22 +0200)]
diff: fix 2 whitespace issues

When whitespace or whitespace change was ignored, the function
xdl_recmatch() returned memcmp() style differences, which is wrong,
since it should return 0 on non-match.

Also, there were three horrible off-by-one bugs, even leading to wrong
hashes in the whitespace special handling.

The issue was noticed by Ray Lehtiniemi.

For good measure, this commit adds a test.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoapply --numstat -z: line termination fix.
Junio C Hamano [Thu, 12 Oct 2006 09:57:39 +0000 (02:57 -0700)]
apply --numstat -z: line termination fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: add a message encouraging use of SVN::* libraries
Eric Wong [Thu, 12 Oct 2006 01:19:55 +0000 (18:19 -0700)]
git-svn: add a message encouraging use of SVN::* libraries

I'm using svn 1.4.0-4 in Debian unstable and apparently there's
a regression on the SVN side that prevents a symlink from
becoming a regular file (which git supports, of course).

It's not a noticeable regression for most people, but this broke
the full-svn-tests target in t/Makefile for me.

The SVN::* Perl libraries seem to have matured and improved over
the past year, and git-svn has supported them for several months
now, so with that I encourage all users to start using the
SVN::* Perl libraries with git-svn.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agocommit: fix a segfault when displaying a commit with unreachable parents
Eric Wong [Wed, 11 Oct 2006 23:16:02 +0000 (16:16 -0700)]
commit: fix a segfault when displaying a commit with unreachable parents

I was running git show on various commits found by fsck-objects
when I found this bug.  Since find_unique_abbrev() cannot find
an abbreviation for an object not in the database, it will
return NULL, which is bad to run strlen() on.  So instead, we'll
just display the unabbreviated sha1 that we referenced in the
commit.

I'm not sure that this is the best 'fix' for it because the
commit I was trying to show was broken, but I don't think a
program should segfault even if the user tries to do something
stupid.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: -h(elp) message formatting fixes
Eric Wong [Wed, 11 Oct 2006 21:53:36 +0000 (14:53 -0700)]
git-svn: -h(elp) message formatting fixes

'graft-branches' is slightly longer than the rest of the
commands, so the text was squished together in the formatted
output.  This patch just adds some more whitespace to make
the text look more pleasant.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoDocumentation/git-svn: document some of the newer features
Eric Wong [Wed, 11 Oct 2006 21:53:35 +0000 (14:53 -0700)]
Documentation/git-svn: document some of the newer features

I've forgotten to document many of the features added along the
way in the manpages.  This fills in some holes in the
documentation and adds updates some outdated information.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: Fix search form when PATH_INFO is enabled
Petr Baudis [Wed, 11 Oct 2006 20:31:15 +0000 (22:31 +0200)]
gitweb: Fix search form when PATH_INFO is enabled

Currently that was broken. Ideal fix would make the search form use
PATH_INFO too, but it's just one insignificant place so it's no big deal if
we don't for now... This at least makes it work.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: log command fixes
Eric Wong [Wed, 11 Oct 2006 18:53:22 +0000 (11:53 -0700)]
git-svn: log command fixes

Change the --verbose flag to more closely match svn.  I was
somehow under the impression that --summary included --raw diff
output, but I was wrong.  We now pass -r --raw --name-status as
arguments if passed -v/--verbose.

-r (recursive) is passed by default, since users usually want
it, and accepting it causes difficulty with the -r<revision>
option used by svn users.  A --non-recursive switch has been
added to disable this.

Of course, --summary, --raw, -p and any other git-log options
can still be passed directly (without --name-status).

Also, several warnings about referencing undefined variables
have been fixed.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svn: multi-init saves and reuses --tags and --branches arguments
Eric Wong [Wed, 11 Oct 2006 18:53:21 +0000 (11:53 -0700)]
git-svn: multi-init saves and reuses --tags and --branches arguments

This should make it much easier to track newly added tags and
branches.  Re-running multi-init without command-line arguments
should now detect new-tags and branches.

--trunk shouldn't change often, but running multi-init on it
is now idempotent.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoatomic write for sideband remote messages
Nicolas Pitre [Wed, 11 Oct 2006 15:49:15 +0000 (11:49 -0400)]
atomic write for sideband remote messages

It has been a few times that I ended up with such a confusing display:

|remote: Generating pack...
|remote: Done counting 17 objects.
|remote: Result has 9 objects.
|remote: Deltifying 9 objects.
|remote:  100% (9/9) done
|remote: Unpacking 9 objects
|Total 9, written 9 (delta 8), reused 0 (delta 0)
| 100% (9/9) done

The confusion can be avoided in most cases by writing the remote message
in one go to prevent interleacing with local messages.  The buffer
declaration has been moved inside recv_sideband() to avoid extra string
copies.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoAdd --dry-run option to git-send-email
Matthew Wilcox [Tue, 10 Oct 2006 14:58:23 +0000 (08:58 -0600)]
Add --dry-run option to git-send-email

Add a --dry-run option to git-send-email due to having made too many
mistakes with it in the past week.  I like having a safety catch on my
machine gun.

Signed-off-by: Matthew @ilcox <matthew@wil.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit.spec.in: perl subpackage is installed in perl_vendorlib not vendorarch
Junio C Hamano [Wed, 11 Oct 2006 07:57:17 +0000 (07:57 +0000)]
git.spec.in: perl subpackage is installed in perl_vendorlib not vendorarch

Signed-off-by: Junio C Hamano <junio@hera.kernel.org>
18 years agogit-pull: we say commit X, not X commit.
Junio C Hamano [Wed, 11 Oct 2006 06:00:29 +0000 (23:00 -0700)]
git-pull: we say commit X, not X commit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-fetch --update-head-ok typofix
Junio C Hamano [Wed, 11 Oct 2006 05:29:02 +0000 (22:29 -0700)]
git-fetch --update-head-ok typofix

Martin Waitz noticed that one of the case arms had an impossible
choice.  It turns out that what it was checking was redundant and
the typo did not have any effect.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agopaginate git-diff by default
Martin Waitz [Tue, 10 Oct 2006 19:16:25 +0000 (21:16 +0200)]
paginate git-diff by default

18 years agoadd commit count options to git-shortlog v1.4.3-rc2
Nicolas Pitre [Fri, 6 Oct 2006 19:39:09 +0000 (15:39 -0400)]
add commit count options to git-shortlog

This patch does 3 things:

1) Output the number of commits along with the name for each author
   (nice to know for long lists spending more than a screen worth of
   commit lines).

2) Provide a switch (-n) to sort authors according to their number of
   commits instead of author alphabetic order.

3) Provide a switch (-s) to supress commit lines and only keep a
   summary of authors and the number of commits for each of them.

And for good measure a short usage is displayed with -h.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoFix git-revert
Junio C Hamano [Tue, 10 Oct 2006 02:19:45 +0000 (19:19 -0700)]
Fix git-revert

Defaulting to $replay for the sake of fixing cherry-pick was not
done conditionally, which broke git-revert.

Noticed by Luben.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-svnimport.perl: copying directory from original SVN place
Sasha Khapyorsky [Sun, 8 Oct 2006 21:31:18 +0000 (23:31 +0200)]
git-svnimport.perl: copying directory from original SVN place

When copying whole directory, if source directory is not in already
imported tree, try to get it from original SVN location. This happens
when source directory is not matched by provided 'trunk' and/or
'tags/branches' templates or when it is not part of specified SVN
sub-project.

Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoAdd WEBDAV timeout to http-fetch.
Junio C Hamano [Sun, 8 Oct 2006 19:56:19 +0000 (12:56 -0700)]
Add WEBDAV timeout to http-fetch.

Sean <seanlkml@sympatico.ca> writes:

> On Sat, 07 Oct 2006 21:52:02 -0700
> Junio C Hamano <junkio@cox.net> wrote:
>
>> Using DAV, if it works with the server, has the advantage of not
>> having to keep objects/info/packs up-to-date from repository
>> owner's point of view.  But the repository owner ends up keeping
>> up-to-date as a side effect of keeping info/refs up-to-date
>> anyway (as I do not see a code to read that information over
>> DAV), so there is no point doing this over DAV in practice.
>>
>> Perhaps we should remove call to remote_ls() from
>> fetch_indices() unconditionally, not just protected with
>> NO_EXPAT and be done with it?
>
> That makes a lot of sense.  A server really has to always provide
> a objects/info/packs anyway, just to be fetchable today by clients
> that are compiled with NO_EXPAT.

And even for an isolated group where everybody knows that
everybody else runs DAV-enabled clients, they need info/refs
prepared for ls-remote and git-fetch script, which means you
will run update-server-info to keep objects/info/packs up to
date.

Nick, do you see holes in my logic?

-- >8 --
http-fetch.c: drop remote_ls()

While doing remote_ls() over DAV potentially allows the server
side not to keep objects/info/pack up-to-date, misconfigured or
buggy servers can silently ignore or not to respond to DAV
requests and makes the client hang.

The server side (unfortunately) needs to run git-update-server-info
even if remote_ls() removes the need to keep objects/info/pack file
up-to-date, because the caller of git-http-fetch (git-fetch) and other
clients that interact with the repository (e.g. git-ls-remote) need to
read from info/refs file (there is no code to make that unnecessary by
using DAV yet).

Perhaps the right solution in the longer-term is to make info/refs
also unnecessary by using DAV, and we would want to resurrect the
code this patch removes when we do so, but let's drop remote_ls()
implementation for now.  It is causing problems without really
helping anything yet.

git will keep it for us until we need it next time.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: Cleanup Git logo and Git logo target generation
Jakub Narebski [Fri, 6 Oct 2006 10:31:05 +0000 (12:31 +0200)]
gitweb: Cleanup Git logo and Git logo target generation

Rename $githelp_url and $githelp_label to $logo_url and $logo_label to
be more obvious what they refer to; while at it add commented out
previous contents (git documentation at kernel.org). Add comment about
logo size.

Use $cgi->a(...) to generate Git logo link; it automatically escapes
attribute values when it is needed.  Escape href attribute using
esc_url instead of (incorrect!) esc_html.

Move styling of git logo <img> element from "style" attribute to CSS
via setting class to "logo".  Perhaps we should set it by id rather
than by class.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-tar-tree: don't RUN_SETUP
Rene Scharfe [Sun, 8 Oct 2006 13:44:50 +0000 (15:44 +0200)]
git-tar-tree: don't RUN_SETUP

Noted by Jiri Slaby, git-tar-tree --remote doesn't need to be run
from inside of a git archive.  Since git-tar-tree is now only a
wrapper for git-archive, which calls setup_git_directory() as
needed, we should drop the flag RUN_SETUP.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoMake git-send-email detect mbox-style patches more readily
Junio C Hamano [Sat, 7 Oct 2006 10:09:05 +0000 (03:09 -0700)]
Make git-send-email detect mbox-style patches more readily

Earlier we insisted that mbox file to begin with "From ".  That
is fine as long as you feed format-patch output, but if you
handcraft the input file, this is unnecessary burden.  We should
detect lines that look like e-mail headers and say that is also
a mbox file.

The other input file format is traditional "send lots of email",
whose first line would never look like e-mail headers, so this
is a safe change.

The original patch was done by Matthew Wilcox, which checked
explicitly for headers the script pays attention to.

Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-archive --format=zip: add symlink support
Rene Scharfe [Fri, 6 Oct 2006 23:47:35 +0000 (01:47 +0200)]
git-archive --format=zip: add symlink support

Add symlink support to ZIP file creation, and a few tests.

This implementation sets the "version made by" field
(creator_version) to Unix for symlinks, only; regular files and
directories are still marked as originating from FAT/VFAT/NTFS.

Also set "external file attributes" (attr2) to 0 for regular
files and 16 for directories (FAT attribute), and to the file
mode for symlinks.

We could always set the creator_version to Unix and include the
mode, but then Info-ZIP unzip would set the mode of the extracted
files to *exactly* the value stored in attr2.  The FAT trick
makes it apply the umask instead.  Note: FAT has no executable
bit, so this information is not stored in the ZIP file.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-archive --format=zip: use default version ID
Rene Scharfe [Fri, 6 Oct 2006 23:47:24 +0000 (01:47 +0200)]
git-archive --format=zip: use default version ID

Use 10 for the "version needed to extract" field.  This is the
default value, and we want to use it because we don't do anything
special.  Info-ZIP's zip uses it, too.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: Document features better
Petr Baudis [Sat, 7 Oct 2006 13:17:47 +0000 (15:17 +0200)]
gitweb: Document features better

This expands gitweb/README to talk some more about GITWEB_CONFIG, moves
feature-specific documentation in gitweb.cgi to the inside of the %features
array, and adds some short description of all the features.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agotest-lib: separate individual test better in verbose mode.
Martin Waitz [Sat, 7 Oct 2006 19:27:46 +0000 (21:27 +0200)]
test-lib: separate individual test better in verbose mode.

When running tests with --verbose it is difficult to see where
one test starts and where it ends because everything is printed
in one big lump.
Fix that by printing one single newline between each test.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-commit: fix coding style.
Martin Waitz [Sat, 7 Oct 2006 19:07:40 +0000 (21:07 +0200)]
git-commit: fix coding style.

git-commit.sh was using a mixture of spaces and tabs for indentation.
This is changed to one tab per indentation level.
No code changes.

Signed-off-by: Martin Waitz <tali@admingilde.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: [commit view] Do not suppress commitdiff link in root commit
Petr Baudis [Fri, 6 Oct 2006 16:59:33 +0000 (18:59 +0200)]
gitweb: [commit view] Do not suppress commitdiff link in root commit

There's no reason for that, the commitdiff view is meaningful for the
root commit as well and we link to it everywhere else.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: Handle commits with empty commit messages more reasonably
Petr Baudis [Fri, 6 Oct 2006 16:55:04 +0000 (18:55 +0200)]
gitweb: Handle commits with empty commit messages more reasonably

Currently those look very weird, you can't get easily at the commit view
etc. This patch makes their title '(no commit message)'.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: Separate (new) and (deleted) in commitdiff by a space
Petr Baudis [Fri, 6 Oct 2006 16:00:17 +0000 (18:00 +0200)]
gitweb: Separate (new) and (deleted) in commitdiff by a space

Currently it's pasted to the sha1 of the blob and looks ugly.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoShow snapshot link in shortlog only if have_snapsho
Petr Baudis [Fri, 6 Oct 2006 13:57:52 +0000 (15:57 +0200)]
Show snapshot link in shortlog only if have_snapsho

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogitweb: refactor decode() for utf8 conversion
Yasushi SHOJI [Sun, 1 Oct 2006 21:21:33 +0000 (06:21 +0900)]
gitweb: refactor decode() for utf8 conversion

we already had a few place using decode() to convert perl internal
encode to utf8.  added a new thin wrapper to do just that.

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agoAdd default values for --window and --depth to the docs
Dennis Stosberg [Fri, 6 Oct 2006 09:15:03 +0000 (11:15 +0200)]
Add default values for --window and --depth to the docs

Currently, you actually have to read the source to find out the
default values. While at it, fix two typos and suggest that these
options actually take a parameter in git-pack-objects.txt.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
18 years agogit-send-email: real name with period need to be dq-quoted on From: line
Junio C Hamano [Fri, 6 Oct 2006 06:40:15 +0000 (23:40 -0700)]
git-send-email: real name with period need to be dq-quoted on From: line

An author name like 'A. U. Thor <a.u.thor@example.com>" is not a
valid RFC 2822 address; when placing it on From: line, we would
need to quote it, like this:

Signed-off-by: "Junio C. Hamano" <junkio@cox.net>
18 years agogit-send-email: do not drop custom headers the user prepared
Junio C Hamano [Thu, 5 Oct 2006 23:36:49 +0000 (16:36 -0700)]
git-send-email: do not drop custom headers the user prepared

The command picked up only Subject, CC, and From headers in the
incoming mbox text.  Sending out patches prepared by
git-format-patch with user's custom headers was impossible with
that.

Just keep the ones it does not need to look at and add them to
the header of the message when sending it out.

Signed-off-by: Junio C Hamano <junkio@cox.net>