Code

git.git
15 years agoxutils: Fix hashing an incomplete line with whitespaces at the end
Junio C Hamano [Sun, 23 Aug 2009 07:51:09 +0000 (00:51 -0700)]
xutils: Fix hashing an incomplete line with whitespaces at the end

Upon seeing a whitespace, xdl_hash_record_with_whitespace() first skipped
the run of whitespaces (excluding LF) that begins there, ensuring that the
pointer points at the last whitespace character in the run, and assumed
that the next character must be LF at the end of the line.  This does not
work when hashing an incomplete line, which lacks the LF at the end.

Introduce "at_eol" variable that is true when either we are at the end of
line (looking at LF) or at the end of an incomplete line, and use that
instead throughout the code.

Noticed by Thell Fowler.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sat, 8 Aug 2009 03:44:02 +0000 (20:44 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  verify-pack -v: do not report "chain length 0"
  t5510: harden the way verify-pack is used

15 years agoverify-pack -v: do not report "chain length 0"
Junio C Hamano [Fri, 7 Aug 2009 22:36:31 +0000 (15:36 -0700)]
verify-pack -v: do not report "chain length 0"

When making a histogram of delta chain length in the pack, the program
collects number of objects whose delta depth exceeds the MAX_CHAIN limit
in histogram[0], and showed it as the number of items that exceeds the
limit correctly.  HOWEVER, it also showed the same number labeled as
"chain length = 0".

In fact, we are not showing the number of objects whose chain length is
zero, i.e. the base objects.  Correct this.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agot5510: harden the way verify-pack is used
Junio C Hamano [Sat, 8 Aug 2009 03:12:13 +0000 (20:12 -0700)]
t5510: harden the way verify-pack is used

The test ignored the exit status from verify pack command, and also relied
on not seeing any delta chain statistics.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sun, 21 Jun 2009 06:48:21 +0000 (23:48 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  git-show-ref.txt: remove word and make consistent
  git-svn documentation: fix typo in 'rebase vs. pull/merge' section
  use xstrdup, not strdup in ll-merge.c

15 years agogit-show-ref.txt: remove word and make consistent
Stephen Boyd [Sun, 21 Jun 2009 04:40:45 +0000 (21:40 -0700)]
git-show-ref.txt: remove word and make consistent

Under is better than in because of the nested nature of the .git
directory.

"also using" sounds a little odd, plus we say combined with later on so
just use that.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-svn documentation: fix typo in 'rebase vs. pull/merge' section
Miklos Vajna [Sat, 20 Jun 2009 11:27:15 +0000 (13:27 +0200)]
git-svn documentation: fix typo in 'rebase vs. pull/merge' section

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agouse xstrdup, not strdup in ll-merge.c
Jim Meyering [Sun, 14 Jun 2009 19:47:54 +0000 (21:47 +0200)]
use xstrdup, not strdup in ll-merge.c

Otherwise, a fluky allocation failure would cause merge
configuration settings to be silently ignored.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sun, 14 Jun 2009 00:09:45 +0000 (17:09 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  git-rerere.txt: grammatical fixups and cleanups
  http-push.c::remove_locks(): fix use after free

15 years agogit-rerere.txt: grammatical fixups and cleanups
Stephen Boyd [Sat, 13 Jun 2009 18:20:00 +0000 (11:20 -0700)]
git-rerere.txt: grammatical fixups and cleanups

Rewrite the gc section using unresolved and resolved instead of "not
recorded". Add plurals and missing articles. Make some sentences have
consistent tense. Try and be more active by removing "that" and
simplifying sentences.

The terms "hand-resolve" and "hand resolve" were used, so just use "hand
resolve" to be more consistent.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agohttp-push.c::remove_locks(): fix use after free
Alex Riesen [Sun, 24 May 2009 13:16:49 +0000 (15:16 +0200)]
http-push.c::remove_locks(): fix use after free

Noticed and reported by Serhat Şevki Dinçer.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Acked-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Thu, 14 May 2009 04:05:59 +0000 (21:05 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  ls-tree manpage: output of ls-tree is compatible with update-index
  ls-tree manpage: use "unless" instead of "when ... is not"

15 years agols-tree manpage: output of ls-tree is compatible with update-index
Alex Riesen [Sun, 10 May 2009 16:14:49 +0000 (18:14 +0200)]
ls-tree manpage: output of ls-tree is compatible with update-index

Such format relationships are very useful things to remember for
script writers.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agols-tree manpage: use "unless" instead of "when ... is not"
Alex Riesen [Sun, 10 May 2009 16:13:45 +0000 (18:13 +0200)]
ls-tree manpage: use "unless" instead of "when ... is not"

Delayed negation in a statement is harder to spot and keep in mind.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sat, 9 May 2009 04:12:41 +0000 (21:12 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  dir.c: Fix two minor grammatical errors in comments

15 years agodir.c: Fix two minor grammatical errors in comments
Allan Caffee [Mon, 4 May 2009 17:37:30 +0000 (13:37 -0400)]
dir.c: Fix two minor grammatical errors in comments

Signed-off-by: Allan Caffee <allan.caffee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoGIT 1.6.1.4 v1.6.1.4
Junio C Hamano [Sun, 3 May 2009 22:20:03 +0000 (15:20 -0700)]
GIT 1.6.1.4

With a handful of fixes backmerged from 1.6.2.X series

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'jc/maint-1.6.0-keep-pack' into maint-1.6.1
Junio C Hamano [Sun, 3 May 2009 22:01:31 +0000 (15:01 -0700)]
Merge branch 'jc/maint-1.6.0-keep-pack' into maint-1.6.1

* jc/maint-1.6.0-keep-pack:
  pack-objects: don't loosen objects available in alternate or kept packs
  t7700: demonstrate repack flaw which may loosen objects unnecessarily
  Remove --kept-pack-only option and associated infrastructure
  pack-objects: only repack or loosen objects residing in "local" packs
  git-repack.sh: don't use --kept-pack-only option to pack-objects
  t7700-repack: add two new tests demonstrating repacking flaws
  is_kept_pack(): final clean-up
  Simplify is_kept_pack()
  Consolidate ignore_packed logic more
  has_sha1_kept_pack(): take "struct rev_info"
  has_sha1_pack(): refactor "pretend these packs do not exist" interface
  git-repack: resist stray environment variable

15 years agoMerge branch 'jc/maint-1.6.0-diff-borrow-carefully' into maint-1.6.1
Junio C Hamano [Sun, 3 May 2009 22:01:26 +0000 (15:01 -0700)]
Merge branch 'jc/maint-1.6.0-diff-borrow-carefully' into maint-1.6.1

* jc/maint-1.6.0-diff-borrow-carefully:
  diff --cached: do not borrow from a work tree when a path is marked as assume-unchanged

15 years agoMerge branch 'bs/maint-1.6.0-tree-walk-prefix' into maint-1.6.1
Junio C Hamano [Sun, 3 May 2009 22:01:19 +0000 (15:01 -0700)]
Merge branch 'bs/maint-1.6.0-tree-walk-prefix' into maint-1.6.1

* bs/maint-1.6.0-tree-walk-prefix:
  match_tree_entry(): a pathspec only matches at directory boundaries
  tree_entry_interesting: a pathspec only matches at directory boundary

15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Wed, 29 Apr 2009 20:43:13 +0000 (13:43 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  diff -c -p: do not die on submodules

15 years agodiff -c -p: do not die on submodules
Junio C Hamano [Wed, 29 Apr 2009 19:49:52 +0000 (12:49 -0700)]
diff -c -p: do not die on submodules

The combine diff logic knew only about blobs (and their checked-out form
in the work tree, either regular files or symlinks), and barfed when fed
submodules.  This "externalizes" gitlinks in the same way as the normal
patch generation codepath does (i.e. "Subproject commit Xxx\n") to fix the
issue.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Tue, 28 Apr 2009 07:46:20 +0000 (00:46 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  grep: fix segfault when "git grep '('" is given
  Documentation: fix a grammatical error in api-builtin.txt
  builtin-merge: fix a typo in an error message

15 years agogrep: fix segfault when "git grep '('" is given
Linus Torvalds [Mon, 27 Apr 2009 18:10:24 +0000 (11:10 -0700)]
grep: fix segfault when "git grep '('" is given

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: fix a grammatical error in api-builtin.txt
Allan Caffee [Mon, 13 Apr 2009 18:11:21 +0000 (14:11 -0400)]
Documentation: fix a grammatical error in api-builtin.txt

Signed-off-by: Allan Caffee <allan.caffee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobuiltin-merge: fix a typo in an error message
Allan Caffee [Mon, 13 Apr 2009 18:10:08 +0000 (14:10 -0400)]
builtin-merge: fix a typo in an error message

Signed-off-by: Allan Caffee <allan.caffee@gmail.com>
Acked-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sat, 25 Apr 2009 05:49:34 +0000 (22:49 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  test-genrandom: Add newline to usage string

15 years agotest-genrandom: Add newline to usage string
Stephen Boyd [Thu, 23 Apr 2009 07:25:33 +0000 (00:25 -0700)]
test-genrandom: Add newline to usage string

A minor fix to place the terminal input on a new line if test-genrandom
is run with no arguments.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sat, 18 Apr 2009 21:43:24 +0000 (14:43 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  doc/git-daemon: add missing arguments to options
  init: Do not segfault on big GIT_TEMPLATE_DIR environment variable

15 years agodoc/git-daemon: add missing arguments to options
Markus Heidelberg [Sat, 18 Apr 2009 09:46:06 +0000 (11:46 +0200)]
doc/git-daemon: add missing arguments to options

Also fix some spellings and typos.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoinit: Do not segfault on big GIT_TEMPLATE_DIR environment variable
Frank Lichtenheld [Sat, 18 Apr 2009 14:14:02 +0000 (16:14 +0200)]
init: Do not segfault on big GIT_TEMPLATE_DIR environment variable

Signed-off-by: Frank Lichtenheld <flichtenheld@astaro.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sat, 18 Apr 2009 04:06:11 +0000 (21:06 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  Fix buffer overflow in config parser

15 years agoFix buffer overflow in config parser
Thomas Jarosch [Fri, 17 Apr 2009 12:05:11 +0000 (14:05 +0200)]
Fix buffer overflow in config parser

When interpreting a config value, the config parser reads in 1+ space
character(s) and puts -one- space character in the buffer as soon as
the first non-space character is encountered (if not inside quotes).

Unfortunately the buffer size check lacks the extra space character
which gets inserted at the next non-space character, resulting in
a crash with a specially crafted config entry.

The unit test now uses Java to compile a platform independent
.NET framework to output the test string in C# :o)

    Read: Thanks to Johannes Sixt for the correct printf call
    which replaces the perl invocation.

Signed-off-by: Thomas Jarosch <thomas.jarosch@intra2net.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sun, 12 Apr 2009 22:20:29 +0000 (15:20 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  State the effect of filter-branch on graft explicitly
  process_{tree,blob}: Remove useless xstrdup calls

15 years agoState the effect of filter-branch on graft explicitly
Daniel Cheng (aka SDiZ) [Fri, 10 Apr 2009 06:26:49 +0000 (14:26 +0800)]
State the effect of filter-branch on graft explicitly

Signed-off-by: Daniel Cheng (aka SDiZ) <j16sdiz+freenet@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoprocess_{tree,blob}: Remove useless xstrdup calls
Linus Torvalds [Fri, 10 Apr 2009 22:20:18 +0000 (15:20 -0700)]
process_{tree,blob}: Remove useless xstrdup calls

On Wed, 8 Apr 2009, Björn Steinbrink wrote:
>
> The name of the processed object was duplicated for passing it to
> add_object(), but that already calls path_name, which allocates a new
> string anyway. So the memory allocated by the xstrdup calls just went
> nowhere, leaking memory.

Ack, ack.

There's another easy 5% or so for the built-in object walker: once we've
created the hash from the name, the name isn't interesting any more, and
so something trivial like this can help a bit.

Does it matter? Probably not on its own. But a few more memory saving
tricks and it might all make a difference.

Linus

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Thu, 9 Apr 2009 06:22:05 +0000 (23:22 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  process_{tree,blob}: Remove useless xstrdup calls

15 years agoMerge branch 'jc/maint-1.6.0-blame-s' into maint-1.6.1
Junio C Hamano [Thu, 9 Apr 2009 06:02:17 +0000 (23:02 -0700)]
Merge branch 'jc/maint-1.6.0-blame-s' into maint-1.6.1

* jc/maint-1.6.0-blame-s:
  blame: read custom grafts given by -S before calling setup_revisions()

Conflicts:
builtin-blame.c

15 years agoMerge branch 'bc/maint-1.6.1-branch-deleted-was' into maint-1.6.1
Junio C Hamano [Thu, 9 Apr 2009 06:01:15 +0000 (23:01 -0700)]
Merge branch 'bc/maint-1.6.1-branch-deleted-was' into maint-1.6.1

* bc/maint-1.6.1-branch-deleted-was:
  git-branch: display "was sha1" on branch deletion rather than just "sha1"

15 years agoMerge branch 'js/maint-1.6.0-exec-path-env' into maint-1.6.1
Junio C Hamano [Thu, 9 Apr 2009 06:01:10 +0000 (23:01 -0700)]
Merge branch 'js/maint-1.6.0-exec-path-env' into maint-1.6.1

* js/maint-1.6.0-exec-path-env:
  Propagate --exec-path setting to external commands via GIT_EXEC_PATH

15 years agoMerge branch 'tr/maint-1.6.1-doc-format-patch--root' into maint-1.6.1
Junio C Hamano [Thu, 9 Apr 2009 06:00:21 +0000 (23:00 -0700)]
Merge branch 'tr/maint-1.6.1-doc-format-patch--root' into maint-1.6.1

* tr/maint-1.6.1-doc-format-patch--root:
  Documentation: format-patch --root clarifications

15 years agoprocess_{tree,blob}: Remove useless xstrdup calls
Björn Steinbrink [Wed, 8 Apr 2009 11:28:54 +0000 (13:28 +0200)]
process_{tree,blob}: Remove useless xstrdup calls

The name of the processed object was duplicated for passing it to
add_object(), but that already calls path_name, which allocates a new
string anyway. So the memory allocated by the xstrdup calls just went
nowhere, leaking memory.

This reduces the RSS usage for a "rev-list --all --objects" by about 10% on
the gentoo repo (fully packed) as well as linux-2.6.git:

    gentoo:
                    | old           | new
    ----------------|-------------------------------
    RSS             |       1537284 |       1388408
    VSZ             |       1816852 |       1667952
    time elapsed    |       1:49.62 |       1:48.99
    min. page faults|        417178 |        379919

    linux-2.6.git:
                    | old           | new
    ----------------|-------------------------------
    RSS             |        324452 |        292996
    VSZ             |        491792 |        460376
    time elapsed    |       0:14.53 |       0:14.28
    min. page faults|         89360 |         81613

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Wed, 8 Apr 2009 05:51:14 +0000 (22:51 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  Documentation: clarify .gitattributes search
  git-checkout.txt: clarify that <branch> applies when no path is given.
  git-checkout.txt: fix incorrect statement about HEAD and index

15 years agoDocumentation: clarify .gitattributes search
Jason Merrill [Mon, 6 Apr 2009 15:03:36 +0000 (11:03 -0400)]
Documentation: clarify .gitattributes search

Use the term "toplevel of the work tree" in gitattributes.txt and
gitignore.txt to define the limits of the search for those files.

Signed-off-by: Jason Merrill <jason@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-checkout.txt: clarify that <branch> applies when no path is given.
Matthieu Moy [Tue, 7 Apr 2009 12:43:53 +0000 (14:43 +0200)]
git-checkout.txt: clarify that <branch> applies when no path is given.

Otherwise, the sentence "Defaults to HEAD." can be mis-read to mean
that "git checkout -- hello.c" checks-out from HEAD.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-checkout.txt: fix incorrect statement about HEAD and index
Matthieu Moy [Mon, 6 Apr 2009 20:45:21 +0000 (22:45 +0200)]
git-checkout.txt: fix incorrect statement about HEAD and index

The command "git checkout" checks out from the index by default, not
HEAD (the introducing comment were correct, but the detailled
explanation added below were not).

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sun, 5 Apr 2009 08:04:38 +0000 (01:04 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  commit: abort commit if interactive add failed
  git-repack: use non-dashed update-server-info

Conflicts:
builtin-commit.c

15 years agocommit: abort commit if interactive add failed
Jeff King [Fri, 3 Apr 2009 19:28:56 +0000 (15:28 -0400)]
commit: abort commit if interactive add failed

Previously we ignored the result of calling add_interactive,
which meant that if an error occurred we simply committed
whatever happened to be in the index.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-repack: use non-dashed update-server-info
Dan McGee [Sat, 4 Apr 2009 16:59:55 +0000 (11:59 -0500)]
git-repack: use non-dashed update-server-info

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Thu, 2 Apr 2009 05:35:57 +0000 (22:35 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  Documentation: Remove an odd "instead"

15 years agomatch_tree_entry(): a pathspec only matches at directory boundaries
Junio C Hamano [Thu, 2 Apr 2009 02:34:03 +0000 (19:34 -0700)]
match_tree_entry(): a pathspec only matches at directory boundaries

Previously the code did a simple prefix match, which means that a path in
a directory "frotz/" would have matched with pathspec "f".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agotree_entry_interesting: a pathspec only matches at directory boundary
Björn Steinbrink [Tue, 31 Mar 2009 15:05:01 +0000 (17:05 +0200)]
tree_entry_interesting: a pathspec only matches at directory boundary

Previously the code did a simple prefix match, which means that a
path in a directory "frotz/" would have matched with pathspec "f".

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: Remove an odd "instead"
Holger Weiß [Tue, 31 Mar 2009 16:57:01 +0000 (18:57 +0200)]
Documentation: Remove an odd "instead"

Signed-off-by: Holger Weiß <holger@zedat.fu-berlin.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Mon, 30 Mar 2009 20:23:53 +0000 (13:23 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  Fix bash completion in path with spaces
  bash completion: only show 'log --merge' if merging
  git-tag(1): add hint about commit messages
  Documentation: update graph api example.

15 years agoFix bash completion in path with spaces
Daniel Cheng (aka SDiZ) [Mon, 30 Mar 2009 11:27:37 +0000 (19:27 +0800)]
Fix bash completion in path with spaces

Signed-off-by: Daniel Cheng (aka SDiZ) <j16sdiz+freenet@gmail.com>
Trivially-acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobash completion: only show 'log --merge' if merging
Thomas Rast [Mon, 16 Feb 2009 16:34:57 +0000 (17:34 +0100)]
bash completion: only show 'log --merge' if merging

The gitk completion only shows --merge if MERGE_HEAD is present.
Do it the same way for git-log completion.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-tag(1): add hint about commit messages
Nico -telmich- Schottelius [Mon, 30 Mar 2009 11:58:21 +0000 (13:58 +0200)]
git-tag(1): add hint about commit messages

If a tag is not annotated, git tag displays the commit message
instead. Add this hint to the manpage to unhide this secret.

Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: update graph api example.
Allan Caffee [Mon, 30 Mar 2009 14:13:45 +0000 (10:13 -0400)]
Documentation: update graph api example.

As of commit 03300c0 the graph API uses '*' for all nodes including merges.
This updates the example in the documentation to match.

Signed-off-by: Allan Caffee <allan.caffee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Mon, 30 Mar 2009 06:11:03 +0000 (23:11 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  import-zips: fix thinko

15 years agoimport-zips: fix thinko
Johannes Schindelin [Sun, 29 Mar 2009 20:42:27 +0000 (22:42 +0200)]
import-zips: fix thinko

Embarrassingly, the common prefix calculation did not work properly, due
to a mistake in the assignment: instead of assigning the dirname of the
current file name, the dirname of the current common prefix needs to
be assigned to common prefix, when the current prefix does not match the
current file name.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agotest-lib: Clean up comments and Makefile.
Emil Sit [Sat, 28 Mar 2009 01:57:18 +0000 (21:57 -0400)]
test-lib: Clean up comments and Makefile.

Bring documentation in test-lib and clean target
in Makefile in-line with abc5d372.

Signed-off-by: Emil Sit <sit@emilsit.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: format-patch --root clarifications
Thomas Rast [Thu, 26 Mar 2009 17:29:25 +0000 (18:29 +0100)]
Documentation: format-patch --root clarifications

Users were confused about the meaning and use of the --root option.
Notably, since 68c2ec7 (format-patch: show patch text for the root
commit, 2009-01-10), --root has nothing to do with showing the patch
text for the root commit any more.

Shorten and clarify the corresponding paragraph in the DESCRIPTION
section, document --root under OPTIONS, and add an explicit note that
root commits are formatted regardless.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agodiff --no-index: Do not generate patch output if other output is requested
Johannes Sixt [Wed, 25 Mar 2009 17:19:46 +0000 (18:19 +0100)]
diff --no-index: Do not generate patch output if other output is requested

Previously, 'git diff --no-index --stat a b' generated patch output in
addition to the --stat output (or whatever other output format was
requested). Now only the requested output is generated, and patch
output remains the default.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Tue, 24 Mar 2009 22:31:15 +0000 (15:31 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  close_sha1_file(): make it easier to diagnose errors
  avoid possible overflow in delta size filtering computation

15 years agoclose_sha1_file(): make it easier to diagnose errors
Linus Torvalds [Tue, 24 Mar 2009 19:31:36 +0000 (12:31 -0700)]
close_sha1_file(): make it easier to diagnose errors

A bug report with "unable to write sha1 file" made us realize that we do
not have enough information to guess why close() is failing.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoavoid possible overflow in delta size filtering computation
Nicolas Pitre [Tue, 24 Mar 2009 19:56:12 +0000 (15:56 -0400)]
avoid possible overflow in delta size filtering computation

On a 32-bit system, the maximum possible size for an object is less than
4GB, while 64-bit systems may cope with larger objects.  Due to this
limitation, variables holding object sizes are using an unsigned long
type (32 bits on 32-bit systems, or 64 bits on 64-bit systems).

When large objects are encountered, and/or people play with large delta
depth values, it is possible for the maximum allowed delta size
computation to overflow, especially on a 32-bit system.  When this
occurs, surviving result bits may represent a value much smaller than
what it is supposed to be, or even zero.  This prevents some objects
from being deltified although they do get deltified when a smaller depth
limit is used.  Fix this by always performing a 64-bit multiplication.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Sun, 22 Mar 2009 22:40:55 +0000 (15:40 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  everyday: use the dashless form of git-init

15 years agodiff --cached: do not borrow from a work tree when a path is marked as assume-unchanged
Junio C Hamano [Sun, 22 Mar 2009 22:26:07 +0000 (15:26 -0700)]
diff --cached: do not borrow from a work tree when a path is marked as assume-unchanged

When the index says that the file in the work tree that corresponds to the
blob object that is used for comparison is known to be unchanged, "diff"
reads from the file and applies convert_to_git(), instead of inflating the
object, to feed the internal diff engine with, because an earlier
benchnark found that it tends to be faster to use this optimization.

However, the index can lie when the path is marked as assume-unchanged.
Disable the optimization for such paths.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoeveryday: use the dashless form of git-init
David Aguilar [Sun, 22 Mar 2009 09:15:13 +0000 (02:15 -0700)]
everyday: use the dashless form of git-init

The 'Everyday GIT' guide was using the old dashed form
of git-init.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'js/maint-1.6.0-path-normalize' into maint-1.6.1
Junio C Hamano [Sun, 22 Mar 2009 05:59:19 +0000 (22:59 -0700)]
Merge branch 'js/maint-1.6.0-path-normalize' into maint-1.6.1

* js/maint-1.6.0-path-normalize:
  Remove unused normalize_absolute_path()
  Test and fix normalize_path_copy()
  Fix GIT_CEILING_DIRECTORIES on Windows
  Move sanitary_path_copy() to path.c and rename it to normalize_path_copy()
  Make test-path-utils more robust against incorrect use

15 years agoMerge branch 'jc/maint-1.6.0-pack-directory' into maint-1.6.1
Junio C Hamano [Sun, 22 Mar 2009 05:53:36 +0000 (22:53 -0700)]
Merge branch 'jc/maint-1.6.0-pack-directory' into maint-1.6.1

* jc/maint-1.6.0-pack-directory:
  Fix odb_mkstemp() on AIX
  Make sure objects/pack exists before creating a new pack

Conflicts:
wrapper.c

15 years agopack-objects: don't loosen objects available in alternate or kept packs
Brandon Casey [Sat, 21 Mar 2009 22:26:11 +0000 (17:26 -0500)]
pack-objects: don't loosen objects available in alternate or kept packs

If pack-objects is called with the --unpack-unreachable option then it
will unpack (i.e. loosen) all unreferenced objects from local not-kept
packs, including those that also exist in packs residing in an alternate
object database or a locally kept pack.  The only user of this option is
git-repack.

In this case, repack will follow the call to pack-objects with a call to
prune-packed, which will delete these newly loosened objects, making the
act of loosening a waste of time.  The unnecessary loosening can be
avoided by checking whether an object exists in a non-local pack or a
locally kept pack before loosening it.

This fixes the 'local packed unreachable obs that exist in alternate ODB
are not loosened' test in t7700.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoPropagate --exec-path setting to external commands via GIT_EXEC_PATH
Johannes Sixt [Sat, 21 Mar 2009 22:21:18 +0000 (23:21 +0100)]
Propagate --exec-path setting to external commands via GIT_EXEC_PATH

Let PATH0=$PATH that was set before the invocation.
Let /foo be a build directory.
Let /pfx be the installation prefix.
Let pfxexecpath=/pfx/libexec/git-core.

The following is going on when 'git --exec-path=/foo gc' is invoked:

1. git sets PATH=/foo:$PATH0 using the path from --exec-path

2. gc execs 'git repack' (note: no dash).

3. Since there is a git in /foo (it's a build directory), /foo/git is
   taken.

4. No explicit exec-path is set this time, hence, this secondary git sets
   PATH=$pfxexecpath:/foo:$PATH

5. Since 'repack' is not a built-in, execv_dashed_external execs
   'git-repack' (note: dash).

6. There is a $pfxexecpath/git-repack, and it is taken.

7. This git-repack runs 'git pack-objects' (note: no dash).

8. There is no git in $pfxexecpath, but there is one in /foo. Hence,
   /foo/git is run.

9. pack-objects is a builtin, hence, in effect /foo/git-pack-objects
   is run.

As you can see, the way in which we previously set the PATH allowed to
mix gits of different vintage.  By setting GIT_EXEC_PATH when --exec-path
was given on the command line, we reduce the confusion.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agot7700: demonstrate repack flaw which may loosen objects unnecessarily
Brandon Casey [Sat, 21 Mar 2009 22:25:30 +0000 (17:25 -0500)]
t7700: demonstrate repack flaw which may loosen objects unnecessarily

If an unreferenced object exists in both a local pack and in either a pack
residing in an alternate object database or a local kept pack, then the
pack-objects call made by repack will loosen that object only to have it
immediately pruned by repack's call to prune-packed.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-branch: display "was sha1" on branch deletion rather than just "sha1"
Brandon Casey [Sun, 22 Mar 2009 00:09:17 +0000 (19:09 -0500)]
git-branch: display "was sha1" on branch deletion rather than just "sha1"

Make it more pleasant to read about a branch deletion by adding "was".
Jeff King suggested this, and I ignored it.  He was right.

Update t3200 test again to match the change in output.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoRemove --kept-pack-only option and associated infrastructure
Brandon Casey [Fri, 20 Mar 2009 03:47:54 +0000 (22:47 -0500)]
Remove --kept-pack-only option and associated infrastructure

This option to pack-objects/rev-list was created to improve the -A and -a
options of repack.  It was found to be lacking in that it did not provide
the ability to differentiate between local and non-local kept packs, and
found to be unnecessary since objects residing in local kept packs can be
filtered out by the --honor-pack-keep option.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agopack-objects: only repack or loosen objects residing in "local" packs
Brandon Casey [Fri, 20 Mar 2009 03:47:52 +0000 (22:47 -0500)]
pack-objects: only repack or loosen objects residing in "local" packs

These two features were invented for use by repack when repack will delete
the local packs that have been made redundant.  The packs accessible
through alternates are not deleted by repack, so the objects contained in
them are still accessible after the local packs are deleted.  They do not
need to be repacked into the new pack or loosened.  For the case of
loosening they would immediately be deleted by the subsequent prune-packed
that is called by repack anyway.

This fixes the test
'packed unreachable obs in alternate ODB are not loosened' in t7700.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-repack.sh: don't use --kept-pack-only option to pack-objects
Brandon Casey [Fri, 20 Mar 2009 03:47:51 +0000 (22:47 -0500)]
git-repack.sh: don't use --kept-pack-only option to pack-objects

The --kept-pack-only option to pack-objects treats all kept packs as equal.
This results in objects that reside in an alternate pack that has a .keep
file, not being packed into a newly created pack when the user specifies the
-a option to repack.  Since the user may not have any control over the
alternate database, git should not refrain from repacking those objects
even though they are in a pack with a .keep file.

This fixes the 'packed obs in alternate ODB kept pack are repacked' test in
t7700.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agot7700-repack: add two new tests demonstrating repacking flaws
Brandon Casey [Fri, 20 Mar 2009 03:47:50 +0000 (22:47 -0500)]
t7700-repack: add two new tests demonstrating repacking flaws

1) The new --kept-pack-only mechansim of rev-list/pack-objects has
     replaced --unpacked=.  This new mechansim does not operate solely on
     "local" packs now.  The result is that objects residing in an alternate
     pack which has a .keep file will not be repacked with repack -a.

     This flaw is only apparent when a commit object is the one residing in
     an alternate kept pack.

  2) The 'repack unpacked objects' and 'loosen unpacked objects' mechanisms
     of pack-objects, i.e. --keep-unreachable and --unpack-unreachable,
     now do not operate solely on local packs.  The --keep-unreachable
     option no longer has any callers, but --unpack-unreachable is used when
     repack is called with '-A -d' and the local repo has existing packs.
     In this case, objects residing in alternate, not-kept packs will be
     loosened, and then immediately deleted by repack's call to
     prune-packed.

     The test must manually call pack-objects to avoid the call to
     prune-packed that is made by repack when -d is used.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoblame: read custom grafts given by -S before calling setup_revisions()
Junio C Hamano [Wed, 18 Mar 2009 07:13:03 +0000 (00:13 -0700)]
blame: read custom grafts given by -S before calling setup_revisions()

setup_revisions() while getting the command line arguments parses the
given commits from the command line, which means their direct parents will
not be rewritten by the custom graft file.

Call read_ancestry() early to work around this issue.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 06:36:57 +0000 (23:36 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  bisect: fix another instance of eval'ed string
  bisect: fix quoting TRIED revs when "bad" commit is also "skip"ped
  Support "\" in non-wildcard exclusion entries

Conflicts:
git-bisect.sh

15 years agoMerge branch 'en/maint-1.6.1-hash-object' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 06:11:23 +0000 (23:11 -0700)]
Merge branch 'en/maint-1.6.1-hash-object' into maint-1.6.1

* en/maint-1.6.1-hash-object:
  Ensure proper setup of git_dir for git-hash-object

15 years agoMerge branch 'ks/maint-1.6.0-mailinfo-folded' into maint-1.6.0
Junio C Hamano [Fri, 13 Mar 2009 04:48:43 +0000 (21:48 -0700)]
Merge branch 'ks/maint-1.6.0-mailinfo-folded' into maint-1.6.0

* ks/maint-1.6.0-mailinfo-folded:
  mailinfo: tests for RFC2047 examples
  mailinfo: add explicit test for mails like '<a.u.thor@example.com> (A U Thor)'
  mailinfo: 'From:' header should be unfold as well
  mailinfo: correctly handle multiline 'Subject:' header

15 years agoMerge branch 'cc/maint-1.6.0-bisect-fix' into maint-1.6.0
Junio C Hamano [Fri, 13 Mar 2009 04:48:26 +0000 (21:48 -0700)]
Merge branch 'cc/maint-1.6.0-bisect-fix' into maint-1.6.0

* cc/maint-1.6.0-bisect-fix:
  bisect: fix another instance of eval'ed string
  bisect: fix quoting TRIED revs when "bad" commit is also "skip"ped

15 years agoMerge branch 'fg/maint-1.6.0-exclude-bq' into maint-1.6.0
Junio C Hamano [Fri, 13 Mar 2009 04:48:07 +0000 (21:48 -0700)]
Merge branch 'fg/maint-1.6.0-exclude-bq' into maint-1.6.0

* fg/maint-1.6.0-exclude-bq:
  Support "\" in non-wildcard exclusion entries

15 years agoMerge branch 'js/maint-1.6.1-filter-branch-submodule' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:46:50 +0000 (21:46 -0700)]
Merge branch 'js/maint-1.6.1-filter-branch-submodule' into maint-1.6.1

* js/maint-1.6.1-filter-branch-submodule:
  filter-branch: do not consider diverging submodules a 'dirty worktree'

15 years agoMerge branch 'gt/maint-1.6.1-utf8-width' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:46:35 +0000 (21:46 -0700)]
Merge branch 'gt/maint-1.6.1-utf8-width' into maint-1.6.1

* gt/maint-1.6.1-utf8-width:
  builtin-blame.c: Use utf8_strwidth for author's names
  utf8: add utf8_strwidth()

15 years agoMerge branch 'js/maint-1.6.1-remote-remove-mirror' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:45:56 +0000 (21:45 -0700)]
Merge branch 'js/maint-1.6.1-remote-remove-mirror' into maint-1.6.1

* js/maint-1.6.1-remote-remove-mirror:
  builtin-remote: make rm operation safer in mirrored repository
  builtin-remote: make rm() use properly named variable to hold return value

15 years agoMerge branch 'ek/maint-1.6.1-filter-branch-bare' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:45:21 +0000 (21:45 -0700)]
Merge branch 'ek/maint-1.6.1-filter-branch-bare' into maint-1.6.1

* ek/maint-1.6.1-filter-branch-bare:
  filter-branch: Fix fatal error on bare repositories

15 years agoMerge branch 'jc/maint-1.6.1-add-u-remove-conflicted' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:45:14 +0000 (21:45 -0700)]
Merge branch 'jc/maint-1.6.1-add-u-remove-conflicted' into maint-1.6.1

* jc/maint-1.6.1-add-u-remove-conflicted:
  add -u: do not fail to resolve a path as deleted

15 years agoMerge branch 'js/maint-1.6.1-rebase-i-submodule' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:45:02 +0000 (21:45 -0700)]
Merge branch 'js/maint-1.6.1-rebase-i-submodule' into maint-1.6.1

* js/maint-1.6.1-rebase-i-submodule:
  Fix submodule squashing into unrelated commit
  rebase -i squashes submodule changes into unrelated commit

15 years agoMerge branch 'jc/maint-1.6.1-allow-uninteresting-missing' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:44:48 +0000 (21:44 -0700)]
Merge branch 'jc/maint-1.6.1-allow-uninteresting-missing' into maint-1.6.1

* jc/maint-1.6.1-allow-uninteresting-missing:
  revision traversal: allow UNINTERESTING objects to be missing

15 years agoMerge branch 'ks/maint-1.6.0-mailinfo-folded' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:44:00 +0000 (21:44 -0700)]
Merge branch 'ks/maint-1.6.0-mailinfo-folded' into maint-1.6.1

* ks/maint-1.6.0-mailinfo-folded:
  mailinfo: tests for RFC2047 examples
  mailinfo: add explicit test for mails like '<a.u.thor@example.com> (A U Thor)'
  mailinfo: 'From:' header should be unfold as well
  mailinfo: correctly handle multiline 'Subject:' header

15 years agoMerge branch 'jk/maint-1.6.1-cleanup-after-exec-failure' into maint-1.6.1
Junio C Hamano [Fri, 13 Mar 2009 04:43:38 +0000 (21:43 -0700)]
Merge branch 'jk/maint-1.6.1-cleanup-after-exec-failure' into maint-1.6.1

* jk/maint-1.6.1-cleanup-after-exec-failure:
  git: use run_command() to execute dashed externals
  run_command(): help callers distinguish errors
  run_command(): handle missing command errors more gracefully
  git: s/run_command/run_builtin/

15 years agoMerge branch 'jc/maint-1.6.0-split-diff-metainfo' into maint-1.6.0
Junio C Hamano [Fri, 13 Mar 2009 03:01:28 +0000 (20:01 -0700)]
Merge branch 'jc/maint-1.6.0-split-diff-metainfo' into maint-1.6.0

* jc/maint-1.6.0-split-diff-metainfo:
  diff.c: output correct index lines for a split diff

15 years agobuiltin-revert.c: release index lock when cherry-picking an empty commit
Chris Johnsen [Sat, 7 Mar 2009 09:30:51 +0000 (03:30 -0600)]
builtin-revert.c: release index lock when cherry-picking an empty commit

When a cherry-pick of an empty commit is done, release the lock
held on the index.

The fix is the same as was applied to similar code in 4271666046.

Signed-off-by: Chris Johnsen <chris_johnsen@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: minor grammatical fixes.
David J. Mellor [Sat, 28 Feb 2009 21:12:59 +0000 (13:12 -0800)]
Documentation: minor grammatical fixes.

Signed-off-by: David J. Mellor <dmellor@whistlingcat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoEnsure proper setup of git_dir for git-hash-object
Elijah Newren [Sat, 28 Feb 2009 19:56:49 +0000 (12:56 -0700)]
Ensure proper setup of git_dir for git-hash-object

Call setup_git_directory() before git_config() to make sure git_dir is set
to the proper value.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.0' into maint
Junio C Hamano [Sat, 28 Feb 2009 22:05:09 +0000 (14:05 -0800)]
Merge branch 'maint-1.6.0' into maint

* maint-1.6.0:
  added missing backtick in git-apply.txt

15 years agoadded missing backtick in git-apply.txt
Danijel Tasov [Sat, 28 Feb 2009 20:03:54 +0000 (21:03 +0100)]
added missing backtick in git-apply.txt

Signed-off-by: Danijel Tasov <dt@korn.shell.la>
Signed-off-by: Junio C Hamano <gitster@pobox.com>