git
10 years agoMerge branch 'rs/refresh-beyond-symlink'
Junio C Hamano [Tue, 9 Sep 2014 19:54:01 +0000 (12:54 -0700)] 
Merge branch 'rs/refresh-beyond-symlink'

"git add x" where x that used to be a directory has become a
symbolic link to a directory misbehaved.

* rs/refresh-beyond-symlink:
  read-cache: check for leading symlinks when refreshing index

10 years agoMerge branch 'la/init-doc'
Junio C Hamano [Tue, 9 Sep 2014 19:54:00 +0000 (12:54 -0700)] 
Merge branch 'la/init-doc'

* la/init-doc:
  Documentation: git-init: flesh out example
  Documentation: git-init: template directory: reword and cross-reference
  Documentation: git-init: reword parenthetical statements
  Documentation: git-init: --separate-git-dir: clarify
  Documentation: git-init: template directory: reword
  Documentation: git-init: list items facelift
  Documentation: git-init: typographical fixes

10 years agoMerge branch 'jk/stash-list-p'
Junio C Hamano [Tue, 9 Sep 2014 19:54:00 +0000 (12:54 -0700)] 
Merge branch 'jk/stash-list-p'

Teach "git stash list -p" to show the difference between the base
commit version and the working tree version, which is in line with
what "git show" gives.

* jk/stash-list-p:
  stash: default listing to working-tree diff

10 years agoMerge branch 'mm/log-branch-desc-plug-leak'
Junio C Hamano [Tue, 9 Sep 2014 19:53:59 +0000 (12:53 -0700)] 
Merge branch 'mm/log-branch-desc-plug-leak'

* mm/log-branch-desc-plug-leak:
  builtin/log.c: fix minor memory leak

10 years agoMerge branch 'lf/bundle-exclusion'
Junio C Hamano [Tue, 9 Sep 2014 19:53:58 +0000 (12:53 -0700)] 
Merge branch 'lf/bundle-exclusion'

"git bundle create" with date-range specification were meant to
exclude tags outside the range

* lf/bundle-exclusion:
  bundle: fix exclusion of annotated tags

10 years agoMerge branch 'jc/apply-ws-prefix'
Junio C Hamano [Tue, 9 Sep 2014 19:53:58 +0000 (12:53 -0700)] 
Merge branch 'jc/apply-ws-prefix'

Applying a patch not generated by Git in a subdirectory used to
check the whitespace breakage using the attributes for incorrect
paths. Also whitespace checks were performed even for paths
excluded via "git apply --exclude=<path>" mechanism.

* jc/apply-ws-prefix:
  apply: omit ws check for excluded paths
  apply: hoist use_patch() helper for path exclusion up
  apply: use the right attribute for paths in non-Git patches

10 years agoMerge branch 'jk/command-line-config-empty-string'
Junio C Hamano [Tue, 9 Sep 2014 19:53:56 +0000 (12:53 -0700)] 
Merge branch 'jk/command-line-config-empty-string'

"git -c section.var command" and "git -c section.var= command"
should pass the configuration differently (the former should be
a boolean true, the latter should be an empty string).

* jk/command-line-config-empty-string:
  config: teach "git -c" to recognize an empty string

10 years agoMerge branch 'bc/imap-send-doc'
Junio C Hamano [Tue, 9 Sep 2014 19:53:55 +0000 (12:53 -0700)] 
Merge branch 'bc/imap-send-doc'

* bc/imap-send-doc:
  imap-send doc: omit confusing "to use imap-send" modifier

10 years agoMerge branch 'jc/not-mingw-cygwin'
Junio C Hamano [Tue, 9 Sep 2014 19:53:54 +0000 (12:53 -0700)] 
Merge branch 'jc/not-mingw-cygwin'

We have been using NOT_{MINGW,CYGWIN} test prerequisites long
before Peff invented support for negated prerequisites e.g. !MINGW
and we still add more uses of the former.  Convert them to the
latter to avoid confusion.

* jc/not-mingw-cygwin:
  test prerequisites: enumerate with commas
  test prerequisites: eradicate NOT_FOO

10 years agoStart the post-2.1 cycle
Junio C Hamano [Tue, 2 Sep 2014 20:30:13 +0000 (13:30 -0700)] 
Start the post-2.1 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'rs/strbuf-getcwd'
Junio C Hamano [Tue, 2 Sep 2014 20:27:45 +0000 (13:27 -0700)] 
Merge branch 'rs/strbuf-getcwd'

Reduce the use of fixed sized buffer passed to getcwd() calls
by introducing xgetcwd() helper.

* rs/strbuf-getcwd:
  use strbuf_add_absolute_path() to add absolute paths
  abspath: convert absolute_path() to strbuf
  use xgetcwd() to set $GIT_DIR
  use xgetcwd() to get the current directory or die
  wrapper: add xgetcwd()
  abspath: convert real_path_internal() to strbuf
  abspath: use strbuf_getcwd() to remember original working directory
  setup: convert setup_git_directory_gently_1 et al. to strbuf
  unix-sockets: use strbuf_getcwd()
  strbuf: add strbuf_getcwd()

10 years agoMerge branch 'ta/pretty-parse-config'
Junio C Hamano [Tue, 2 Sep 2014 20:27:39 +0000 (13:27 -0700)] 
Merge branch 'ta/pretty-parse-config'

* ta/pretty-parse-config:
  pretty.c: make git_pretty_formats_config return -1 on git_config_string failure

10 years agoMerge branch 'bc/archive-pax-header-mode'
Junio C Hamano [Tue, 2 Sep 2014 20:27:12 +0000 (13:27 -0700)] 
Merge branch 'bc/archive-pax-header-mode'

Implementations of "tar" that do not understand an extended pax
header would extract the contents of it in a regular file; make
sure the permission bits of this file follows the same tar.umask
configuration setting.

* bc/archive-pax-header-mode:
  archive: honor tar.umask even for pax headers

10 years agoMerge branch 'pr/remotes-in-hashmap'
Junio C Hamano [Tue, 2 Sep 2014 20:26:37 +0000 (13:26 -0700)] 
Merge branch 'pr/remotes-in-hashmap'

Optimize remotes configuration look-up in a repository with very
many remotes defined.

* pr/remotes-in-hashmap:
  use a hashmap to make remotes faster

10 years agoMerge branch 'jk/pretty-empty-format'
Junio C Hamano [Tue, 2 Sep 2014 20:25:03 +0000 (13:25 -0700)] 
Merge branch 'jk/pretty-empty-format'

"git log --pretty/format=" with an empty format string did not mean
the more obvious "No output whatsoever" but "Use default format",
which was counterintuitive.

* jk/pretty-empty-format:
  pretty: make empty userformats truly empty
  pretty: treat "--format=" as an empty userformat
  revision: drop useless string offset when parsing "--pretty"

10 years agoMerge branch 'ta/config-set'
Junio C Hamano [Tue, 2 Sep 2014 20:24:17 +0000 (13:24 -0700)] 
Merge branch 'ta/config-set'

Add in-core caching layer to let us avoid reading the same
configuration files number of times.

* ta/config-set:
  test-config: add tests for the config_set API
  add `config_set` API for caching config-like files

10 years agoMerge branch 'rs/init-no-duplicate-real-path'
Junio C Hamano [Tue, 2 Sep 2014 20:24:04 +0000 (13:24 -0700)] 
Merge branch 'rs/init-no-duplicate-real-path'

* rs/init-no-duplicate-real-path:
  init: avoid superfluous real_path() calls

10 years agoMerge branch 'mm/config-edit-global'
Junio C Hamano [Tue, 2 Sep 2014 20:23:19 +0000 (13:23 -0700)] 
Merge branch 'mm/config-edit-global'

Start "git config --edit --global" from a skeletal per-user
configuration file contents, instead of a total blank, when the
user does not already have any.  This immediately reduces the need
for a later "Have you forgotten setting core.user?" and we can add
more to the template as we gain more experience.

* mm/config-edit-global:
  commit: advertise config --global --edit on guessed identity
  home_config_paths(): let the caller ignore xdg path
  config --global --edit: create a template file if needed

10 years agoMerge branch 'jc/reopen-lock-file'
Junio C Hamano [Tue, 2 Sep 2014 20:20:12 +0000 (13:20 -0700)] 
Merge branch 'jc/reopen-lock-file'

There are cases where you lock and open to write a file, close it to
show the updated contents to external processes, and then have to
update the file again while still holding the lock, but the lockfile
API lacked support for such an access pattern.

* jc/reopen-lock-file:
  lockfile: allow reopening a closed but still locked file

10 years agoMerge git://github.com/git-l10n/git-po
Junio C Hamano [Fri, 29 Aug 2014 17:18:22 +0000 (10:18 -0700)] 
Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
  po/TEAMS: add new members to German translation team
  l10n: de.po: translate 38 new messages

10 years agopo/TEAMS: add new members to German translation team
Ralf Thielow [Tue, 26 Aug 2014 16:54:30 +0000 (18:54 +0200)] 
po/TEAMS: add new members to German translation team

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
10 years agol10n: de.po: translate 38 new messages
Ralf Thielow [Fri, 20 Jun 2014 15:22:48 +0000 (17:22 +0200)] 
l10n: de.po: translate 38 new messages

Translate 38 new messages came from git.pot update in fe05e19
(l10n: git.pot: v2.1.0 round 1 (38 new, 9 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
10 years agoMerge branch 'jk/diff-tree-t-fix'
Junio C Hamano [Tue, 26 Aug 2014 18:16:26 +0000 (11:16 -0700)] 
Merge branch 'jk/diff-tree-t-fix'

Fix (rarely used) "git diff-tree -t" regression in 2.0.

* jk/diff-tree-t-fix:
  intersect_paths: respect mode in git's tree-sort

10 years agoMerge branch 'jk/pack-shallow-always-without-bitmap'
Junio C Hamano [Tue, 26 Aug 2014 18:16:25 +0000 (11:16 -0700)] 
Merge branch 'jk/pack-shallow-always-without-bitmap'

Reachability bitmaps do not work with shallow operations.
Fixes regression in 2.0.

* jk/pack-shallow-always-without-bitmap:
  pack-objects: turn off bitmaps when we see --shallow lines

10 years agoMerge branch 'jk/fix-profile-feedback-build'
Junio C Hamano [Tue, 26 Aug 2014 18:16:25 +0000 (11:16 -0700)] 
Merge branch 'jk/fix-profile-feedback-build'

Fix profile-feedback build broken in 2.1 for tarball releases.

* jk/fix-profile-feedback-build:
  Makefile: make perf tests optional for profile build

10 years agouse strbuf_add_absolute_path() to add absolute paths
René Scharfe [Mon, 28 Jul 2014 18:34:42 +0000 (20:34 +0200)] 
use strbuf_add_absolute_path() to add absolute paths

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoabspath: convert absolute_path() to strbuf
René Scharfe [Mon, 28 Jul 2014 18:33:55 +0000 (20:33 +0200)] 
abspath: convert absolute_path() to strbuf

Move most of the code of absolute_path() into the new function
strbuf_add_absolute_path() and in the process transform it to use
struct strbuf and xgetcwd() instead of a PATH_MAX-sized buffer,
which can be too small on some file systems.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agouse xgetcwd() to set $GIT_DIR
René Scharfe [Mon, 28 Jul 2014 18:31:57 +0000 (20:31 +0200)] 
use xgetcwd() to set $GIT_DIR

Instead of dying of a segmentation fault if getcwd() returns NULL, use
xgetcwd() to make sure to write a useful error message and then exit
in an orderly fashion.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agouse xgetcwd() to get the current directory or die
René Scharfe [Mon, 28 Jul 2014 18:30:39 +0000 (20:30 +0200)] 
use xgetcwd() to get the current directory or die

Convert several calls of getcwd() and die() to use xgetcwd() instead.
This way we get rid of fixed-size buffers (which can be too small
depending on the used file system) and gain consistent error messages.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agowrapper: add xgetcwd()
René Scharfe [Mon, 28 Jul 2014 18:29:50 +0000 (20:29 +0200)] 
wrapper: add xgetcwd()

Add the helper function xgetcwd(), which returns the current directory
or dies.  The returned string has to be free()d after use.

Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoabspath: convert real_path_internal() to strbuf
René Scharfe [Mon, 28 Jul 2014 18:28:30 +0000 (20:28 +0200)] 
abspath: convert real_path_internal() to strbuf

Use strbuf instead of fixed-sized buffers in real_path() in order to
avoid the size limitations of the latter.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoabspath: use strbuf_getcwd() to remember original working directory
René Scharfe [Mon, 28 Jul 2014 18:27:34 +0000 (20:27 +0200)] 
abspath: use strbuf_getcwd() to remember original working directory

Store the original working directory in a strbuf instead of in a
fixed-sized buffer, in order to be able to handle longer paths.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agosetup: convert setup_git_directory_gently_1 et al. to strbuf
René Scharfe [Mon, 28 Jul 2014 18:26:40 +0000 (20:26 +0200)] 
setup: convert setup_git_directory_gently_1 et al. to strbuf

Convert setup_git_directory_gently_1() and its helper functions
setup_explicit_git_dir(), setup_discovered_git_dir() and
setup_bare_git_dir() to use a struct strbuf to hold the current working
directory.  Replacing the PATH_MAX-sized buffer used before removes a
path length limition on some file systems.  The functions are converted
all in one go because they all read and write the variable cwd.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge git://github.com/git-l10n/git-po
Junio C Hamano [Mon, 25 Aug 2014 22:12:58 +0000 (15:12 -0700)] 
Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
  l10n: de.po: improve message when switching branches
  l10n: de.po: fix typo
  po/TEAMS: Add Catalan team
  l10n: Add Catalan translation
  l10n: fr.po (2257t) update for version 2.1.0
  l10n: sv.po: Update Swedish translation (2257t0f0u)
  l10n: vi.po (2257t): Update translation
  l10n: Updated Bulgarian translation of git (2257t,0f,0u)
  l10n: zh_CN: translations for git v2.1.0-rc0
  l10n: git.pot: v2.1.0 round 1 (38 new, 9 removed)
  l10n: Updated Bulgarian translation of git (2247t,0f,0u)
  l10n: Updated Bulgarian translation of git (2228t,0f,0u)
  l10n: Fix more typos in the Swedish translations

10 years agol10n: de.po: improve message when switching branches
Ralf Thielow [Thu, 12 Jun 2014 18:15:55 +0000 (20:15 +0200)] 
l10n: de.po: improve message when switching branches

Suggested-by: Stefan Beller <stefanbeller@gmail.com>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
10 years agol10n: de.po: fix typo
Ralf Thielow [Wed, 11 Jun 2014 16:10:45 +0000 (18:10 +0200)] 
l10n: de.po: fix typo

Reported-by: Hartmut Henkel
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
10 years agopo/TEAMS: Add Catalan team
Alex Henrie [Sat, 23 Aug 2014 02:10:30 +0000 (20:10 -0600)] 
po/TEAMS: Add Catalan team

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
10 years agol10n: Add Catalan translation
Alex Henrie [Sat, 23 Aug 2014 02:10:22 +0000 (20:10 -0600)] 
l10n: Add Catalan translation

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
10 years agointersect_paths: respect mode in git's tree-sort
Jeff King [Wed, 20 Aug 2014 02:14:30 +0000 (22:14 -0400)] 
intersect_paths: respect mode in git's tree-sort

When we do a combined diff, we individually diff against
each parent, and then use intersect_paths to do a parallel
walk through the sorted results and come up with a final
list of interesting paths.

The sort order here is that returned by the diffs, which
means it is in git's tree-order which sorts sub-trees as if
their paths have "/" at the end. When we do our parallel
walk, we need to use a comparison function which provides
the same order.

Since 8518ff8 (combine-diff: optimize combine_diff_path sets
intersection, 2014-01-20), we use a simple strcmp to
compare the pathnames, and get this wrong. It's somewhat
hard to trigger because normally a diff does not produce
tree entries at all, and therefore the sort order is the
same as a strcmp. However, if the "-t" option is used with
the diff, then we will produce diff_filepairs for both trees
and files.

We can use base_name_compare to do the comparison, just as
the tree-diff code does. Even though what we have are not
technically base names (they are full paths within the
tree), the end result is the same (we do not care about
interior slashes at all, only about the final character).

However, since we do not have the length of each path
stored, we take a slight shortcut: if neither of the entries
is a sub-tree then the comparison is equivalent to a strcmp.
This lets us skip the extra strlen calls in the common case
without having to reimplement base_name_compare from
scratch.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMakefile: make perf tests optional for profile build
Jeff King [Tue, 19 Aug 2014 06:12:03 +0000 (02:12 -0400)] 
Makefile: make perf tests optional for profile build

The perf tests need a repository to operate on; if none is
defined, we fall back to the repository containing our build
directory.  That fails, though, for an exported tarball of
git.git, which has no repository.

Since 5d7fd6d we run the perf tests as part of "make
profile". Therefore "make profile" fails out of the box on
released tarballs of v2.1.0.

We can fix this by making the perf tests optional; if they
are skipped, we still run the regular test suite, which
should give a lot of profile data (and is what we used to do
prior to 5d7fd6d anyway).

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoGit 2.1 v2.1.0
Junio C Hamano [Fri, 15 Aug 2014 22:09:12 +0000 (15:09 -0700)] 
Git 2.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agotests: fix negated test_i18ngrep calls
Johannes Sixt [Wed, 13 Aug 2014 19:30:11 +0000 (21:30 +0200)] 
tests: fix negated test_i18ngrep calls

The helper function test_i18ngrep pretends that it found the expected
results when it is running under GETTEXT_POISON. For this reason, it must
not be used negated like so

   ! test_i18ngrep foo bar

because the test case would fail under GETTEXT_POISON. The function offers
a special syntax to test that a pattern is *not* found:

   test_i18ngrep ! foo bar

Convert incorrect uses to this syntax.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agopack-objects: turn off bitmaps when we see --shallow lines
Jeff King [Tue, 12 Aug 2014 04:34:53 +0000 (00:34 -0400)] 
pack-objects: turn off bitmaps when we see --shallow lines

Reachability bitmaps do not work with shallow operations,
because they cache a view of the object reachability that
represents the true objects. Whereas a shallow repository
(or a shallow operation in a repository) is inherently
cutting off the object graph with a graft.

We explicitly disallow the use of bitmaps in shallow
repositories by checking is_repository_shallow(), and we
should continue to do that. However, we also want to
disallow bitmaps when we are serving a fetch to a shallow
client, since we momentarily take on their grafted view of
the world.

It used to be enough to call is_repository_shallow at the
start of pack-objects.  Upload-pack wrote the other side's
shallow state to a temporary file and pointed the whole
pack-objects process at this state with "git --shallow-file",
and from the perspective of pack-objects, we really were
in a shallow repo.  But since b790e0f (upload-pack: send
shallow info over stdin to pack-objects, 2014-03-11), we do
it differently: we send --shallow lines to pack-objects over
stdin, and it registers them itself.

This means that our is_repository_shallow check is way too
early (we have not been told about the shallowness yet), and
that it is insufficient (calling is_repository_shallow is
not enough, as the shallow grafts we register do not change
its return value). Instead, we can just turn off bitmaps
explicitly when we see these lines.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoread-cache: check for leading symlinks when refreshing index
René Scharfe [Sat, 9 Aug 2014 17:43:29 +0000 (19:43 +0200)] 
read-cache: check for leading symlinks when refreshing index

Don't add paths with leading symlinks to the index while refreshing; we
only track those symlinks themselves.  We already ignore them while
preloading (see read_index_preload.c).

Reported-by: Nikolay Avdeev <avdeev@math.vsu.ru>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'master' of git://ozlabs.org/~paulus/gitk
Junio C Hamano [Sun, 10 Aug 2014 18:03:03 +0000 (11:03 -0700)] 
Merge branch 'master' of git://ozlabs.org/~paulus/gitk

* 'master' of git://ozlabs.org/~paulus/gitk:
  gitk: Updated Bulgarian translation (302t,0f,0u)
  gitk: Add keybinding to switch to parent commit

10 years agoGit 2.1-rc2 v2.1.0-rc2
Junio C Hamano [Fri, 8 Aug 2014 20:52:16 +0000 (13:52 -0700)] 
Git 2.1-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: flesh out example
Linus Arver [Fri, 8 Aug 2014 17:29:20 +0000 (10:29 -0700)] 
Documentation: git-init: flesh out example

Add a third step `git commit` after adding files for the first time.

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: template directory: reword and cross-reference
Linus Arver [Fri, 8 Aug 2014 17:29:19 +0000 (10:29 -0700)] 
Documentation: git-init: template directory: reword and cross-reference

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: reword parenthetical statements
Linus Arver [Fri, 8 Aug 2014 17:29:18 +0000 (10:29 -0700)] 
Documentation: git-init: reword parenthetical statements

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: --separate-git-dir: clarify
Linus Arver [Fri, 8 Aug 2014 17:29:17 +0000 (10:29 -0700)] 
Documentation: git-init: --separate-git-dir: clarify

Use shorter sentences to describe what actually happens. We describe
what the term "Git symbolic link" actually means.

Also, we separate out the description of the behavioral change upon
reinitialization into its own paragraph.

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: template directory: reword
Linus Arver [Fri, 8 Aug 2014 17:29:16 +0000 (10:29 -0700)] 
Documentation: git-init: template directory: reword

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: list items facelift
Linus Arver [Fri, 8 Aug 2014 17:29:15 +0000 (10:29 -0700)] 
Documentation: git-init: list items facelift

No textual change.

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation: git-init: typographical fixes
Linus Arver [Fri, 8 Aug 2014 17:29:14 +0000 (10:29 -0700)] 
Documentation: git-init: typographical fixes

Use backticks when we quote something that the user should literally
use.

Signed-off-by: Linus Arver <linusarver@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agogitk: Updated Bulgarian translation (302t,0f,0u)
Alexander Shopov [Sun, 3 Aug 2014 12:36:43 +0000 (15:36 +0300)] 
gitk: Updated Bulgarian translation (302t,0f,0u)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
10 years agogitk: Add keybinding to switch to parent commit
Max Kirillov [Tue, 8 Jul 2014 20:45:35 +0000 (23:45 +0300)] 
gitk: Add keybinding to switch to parent commit

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
10 years agobundle: fix exclusion of annotated tags
Lukas Fleischer [Sat, 2 Aug 2014 08:39:06 +0000 (10:39 +0200)] 
bundle: fix exclusion of annotated tags

In commit c9a42c4 (bundle: allow rev-list options to exclude annotated
tags, 2009-01-02), support for excluding annotated tags outside the
specified date range was added. However, the wrong order of parameters
was chosen when calling memchr().

Fix this by swapping the character to search for with the maximum length
parameter.  Also cover this behavior with an additional test.

Signed-off-by: Lukas Fleischer <git@cryptocrack.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agostash: default listing to working-tree diff
Jeff King [Wed, 6 Aug 2014 18:35:25 +0000 (14:35 -0400)] 
stash: default listing to working-tree diff

When you list stashes, you can provide arbitrary git-log
options to change the display. However, adding just "-p"
does nothing, because each stash is actually a merge commit.

This implementation detail is easy to forget, leading to
confused users who think "-p" is not working. We can make
this easier by defaulting to "--first-parent -m", which will
show the diff against the working tree. This omits the
index portion of the stash entirely, but it's simple and it
matches what "git stash show" provides.

People who are more clueful about stash's true form can use
"--cc" to override the "-m", and the "--first-parent" will
then do nothing. For diffs, it only affects non-combined
diffs, so "--cc" overrides it. And for the traversal, we are
walking the linear reflog anyway, so we do not even care
about the parents.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agobuiltin/log.c: fix minor memory leak
Matthieu Moy [Thu, 7 Aug 2014 17:13:37 +0000 (19:13 +0200)] 
builtin/log.c: fix minor memory leak

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoapply: omit ws check for excluded paths
Junio C Hamano [Wed, 6 Aug 2014 20:09:05 +0000 (13:09 -0700)] 
apply: omit ws check for excluded paths

Whitespace breakages are checked while the patch is being parsed.
Disable them at the beginning of parse_chunk(), where each
individual patch is parsed, immediately after we learn the name of
the file the patch applies to and before we start parsing the diff
contained in the patch.

One may naively think that we should be able to not just skip the
whitespace checks but simply fast-forward to the next patch without
doing anything once use_patch() tells us that this patch is not
going to be used.  But in reality we cannot really skip much of the
parsing in order to do such a "fast-forward", primarily because
parsing "@@ -k,l +m,n @@" lines and counting the input lines is how
we determine the boundaries of individual patches.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoapply: hoist use_patch() helper for path exclusion up
Junio C Hamano [Wed, 6 Aug 2014 20:11:17 +0000 (13:11 -0700)] 
apply: hoist use_patch() helper for path exclusion up

We will be adding a caller to the function a bit earlier in this
file in a later patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoapply: use the right attribute for paths in non-Git patches
Junio C Hamano [Wed, 6 Aug 2014 21:26:24 +0000 (14:26 -0700)] 
apply: use the right attribute for paths in non-Git patches

We parse each patchfile and find the name of the path the patch
applies to, and then use that name to consult the attribute system
to find the whitespace rules to be used, and also the target file
(either in the working tree or in the index) to replay the changes
against.

Unlike a Git-generated patch, a non-Git patch is taken to have the
pathnames relative to the current working directory.  The names
found in such a patch are modified by prepending the prefix by the
prefix_patches() helper function introduced in 56185f49 (git-apply:
require -p<n> when working in a subdirectory., 2007-02-19).

However, this prefixing is done after the patch is fully parsed and
affects only what target files are patched.  Because the attributes
are checked against the names found in the patch during the parsing,
not against the final pathname, the whitespace check that is done
during parsing ends up using attributes for a wrong path for non-Git
patches.

Fix this by doing the prefix much earlier, immediately after the
header part of each patch is parsed and we learn the name of the
path the patch affects.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'mb/relnotes-2.1'
Junio C Hamano [Thu, 7 Aug 2014 16:44:17 +0000 (09:44 -0700)] 
Merge branch 'mb/relnotes-2.1'

* mb/relnotes-2.1:
  Release notes: grammatical fixes
  RelNotes: no more check_ref_format micro-optimization

10 years agoRelease notes: grammatical fixes
Marc Branchaud [Tue, 5 Aug 2014 16:50:45 +0000 (12:50 -0400)] 
Release notes: grammatical fixes

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agovarious contrib: Fix links in man pages
Stefan Beller [Thu, 7 Aug 2014 14:27:12 +0000 (16:27 +0200)] 
various contrib: Fix links in man pages

Inspired by 2147fa7e (2014-07-31 git-push: fix link in man page),
I grepped through the whole tree searching for 'gitlink:' occurrences.

Signed-off-by: Stefan Beller <stefanbeller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agol10n: fr.po (2257t) update for version 2.1.0
Jean-Noel Avila [Tue, 5 Aug 2014 17:23:50 +0000 (19:23 +0200)] 
l10n: fr.po (2257t) update for version 2.1.0

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
10 years agoimap-send doc: omit confusing "to use imap-send" modifier
brian m. carlson [Tue, 5 Aug 2014 02:56:50 +0000 (02:56 +0000)] 
imap-send doc: omit confusing "to use imap-send" modifier

It wouldn't make sense for these configuration variables to be
required for Git in general to function.  'Required' in this context
means required for git imap-send to work.

Noticed while trying to figure out what the sentence describing
imap.tunnel meant.

[jn: expanded to also simplify explanation of imap.folder and
 imap.host in the same way]

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoRelNotes: no more check_ref_format micro-optimization
Junio C Hamano [Tue, 5 Aug 2014 18:44:23 +0000 (11:44 -0700)] 
RelNotes: no more check_ref_format micro-optimization

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: teach "git -c" to recognize an empty string
Junio C Hamano [Mon, 4 Aug 2014 22:40:19 +0000 (15:40 -0700)] 
config: teach "git -c" to recognize an empty string

In a config file, you can do:

  [foo]
  bar

to turn the "foo.bar" boolean flag on, and you can do:

  [foo]
  bar=

to set "foo.bar" to the empty string. However, git's "-c"
parameter treats both:

  git -c foo.bar

and

  git -c foo.bar=

as the boolean flag, and there is no way to set a variable
to the empty string. This patch enables the latter form to
do that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge remote-tracking branch 'l10n/vi/vnwildman/master'
Jiang Xin [Tue, 5 Aug 2014 15:07:22 +0000 (23:07 +0800)] 
Merge remote-tracking branch 'l10n/vi/vnwildman/master'

* l10n/vi/vnwildman/master:
  l10n: vi.po (2257t): Update translation

10 years agoMerge branch 'master' of github.com:alshopov/git-po
Jiang Xin [Tue, 5 Aug 2014 14:41:00 +0000 (22:41 +0800)] 
Merge branch 'master' of github.com:alshopov/git-po

* 'master' of github.com:alshopov/git-po:
  l10n: Updated Bulgarian translation of git (2257t,0f,0u)

10 years agol10n: sv.po: Update Swedish translation (2257t0f0u)
Peter Krefting [Tue, 5 Aug 2014 12:49:51 +0000 (13:49 +0100)] 
l10n: sv.po: Update Swedish translation (2257t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
10 years agol10n: vi.po (2257t): Update translation
Tran Ngoc Quan [Tue, 5 Aug 2014 00:35:56 +0000 (07:35 +0700)] 
l10n: vi.po (2257t): Update translation

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
10 years agoGit 2.1.0-rc1 v2.1.0-rc1
Junio C Hamano [Mon, 4 Aug 2014 21:05:06 +0000 (14:05 -0700)] 
Git 2.1.0-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'tf/maint-doc-push'
Junio C Hamano [Mon, 4 Aug 2014 21:03:45 +0000 (14:03 -0700)] 
Merge branch 'tf/maint-doc-push'

* tf/maint-doc-push:
  git-push: fix link in man page

10 years agoMerge branch 'ta/doc-config'
Junio C Hamano [Mon, 4 Aug 2014 21:03:25 +0000 (14:03 -0700)] 
Merge branch 'ta/doc-config'

* ta/doc-config:
  add documentation for writing config files

10 years agopretty.c: make git_pretty_formats_config return -1 on git_config_string failure
Tanay Abhra [Mon, 4 Aug 2014 14:41:15 +0000 (07:41 -0700)] 
pretty.c: make git_pretty_formats_config return -1 on git_config_string failure

`git_pretty_formats_config()` continues without checking git_config_string's
return value which can lead to a SEGFAULT. Instead return -1 when
git_config_string fails signalling `git_config()` to die printing the location
of the erroneous variable.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoarchive: honor tar.umask even for pax headers
brian m. carlson [Sun, 3 Aug 2014 03:02:03 +0000 (03:02 +0000)] 
archive: honor tar.umask even for pax headers

git archive's tar format uses extended pax headers to encode metadata
into the archive.  Most tar implementations correctly treat these as
metadata, but some that do not understand the pax format extract these
as files instead.  Apply the tar.umask setting to these entries to
prevent tampering by other users.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agol10n: Updated Bulgarian translation of git (2257t,0f,0u)
Alexander Shopov [Sun, 3 Aug 2014 10:04:51 +0000 (13:04 +0300)] 
l10n: Updated Bulgarian translation of git (2257t,0f,0u)

Sync with tags v2.1.0-rc1 and v2.0.4

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
10 years agol10n: zh_CN: translations for git v2.1.0-rc0
Jiang Xin [Mon, 4 Aug 2014 08:23:15 +0000 (16:23 +0800)] 
l10n: zh_CN: translations for git v2.1.0-rc0

Translate 37 new messages (2257t0f0u) for git v2.1.0-rc0.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
10 years agoMerge commit 'bg/alshopov/master'
Jiang Xin [Mon, 4 Aug 2014 08:38:00 +0000 (16:38 +0800)] 
Merge commit 'bg/alshopov/master'

* commit 'bg/alshopov/master':
  l10n: Updated Bulgarian translation of git (2247t,0f,0u)
  l10n: Updated Bulgarian translation of git (2228t,0f,0u)

10 years agoMerge remote-tracking branch 'sv/nafmo/master'
Jiang Xin [Mon, 4 Aug 2014 08:33:18 +0000 (16:33 +0800)] 
Merge remote-tracking branch 'sv/nafmo/master'

* sv/nafmo/master:
  l10n: Fix more typos in the Swedish translations

10 years agol10n: git.pot: v2.1.0 round 1 (38 new, 9 removed)
Jiang Xin [Mon, 4 Aug 2014 06:51:24 +0000 (14:51 +0800)] 
l10n: git.pot: v2.1.0 round 1 (38 new, 9 removed)

Generate po/git.pot from v2.1.0-rc0 for git v2.1.0 l10n round 1.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
10 years agol10n: Updated Bulgarian translation of git (2247t,0f,0u)
Alexander Shopov [Sun, 3 Aug 2014 08:16:24 +0000 (11:16 +0300)] 
l10n: Updated Bulgarian translation of git (2247t,0f,0u)

Used make po/git.pot from git-l10n/git-po/master

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
10 years agol10n: Updated Bulgarian translation of git (2228t,0f,0u)
Alexander Shopov [Fri, 27 Jun 2014 12:04:51 +0000 (15:04 +0300)] 
l10n: Updated Bulgarian translation of git (2228t,0f,0u)

Used po/git.pot from git-l10n/git-po/master

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
10 years agogit-push: fix link in man page
Tony Finch [Thu, 31 Jul 2014 15:06:28 +0000 (16:06 +0100)] 
git-push: fix link in man page

Signed-off-by: Tony Finch <dot@dotat.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoSync with 2.0.4
Junio C Hamano [Wed, 30 Jul 2014 21:25:46 +0000 (14:25 -0700)] 
Sync with 2.0.4

* maint:
  Git 2.0.4
  commit --amend: test specifies authorship but forgets to check

10 years agoUpdate draft release notes to 2.1
Junio C Hamano [Wed, 30 Jul 2014 21:25:14 +0000 (14:25 -0700)] 
Update draft release notes to 2.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'jk/more-push-completion'
Junio C Hamano [Wed, 30 Jul 2014 21:21:13 +0000 (14:21 -0700)] 
Merge branch 'jk/more-push-completion'

* jk/more-push-completion:
  completion: complete `git push --force-with-lease=`
  completion: add some missing options to `git push`
  completion: complete "unstuck" `git push --recurse-submodules`

10 years agoMerge branch 'sk/mingw-tests-workaround'
Junio C Hamano [Wed, 30 Jul 2014 21:21:12 +0000 (14:21 -0700)] 
Merge branch 'sk/mingw-tests-workaround'

Make tests pass on msysgit by mostly disabling ones that are
infeasible on that platform.

* sk/mingw-tests-workaround:
  t800[12]: work around MSys limitation
  t9902: mingw-specific fix for gitfile link files
  t4210: skip command-line encoding tests on mingw
  MinGW: disable legacy encoding tests
  t0110/MinGW: skip tests that pass arbitrary bytes on the command line
  MinGW: Skip test redirecting to fd 4

10 years agoMerge branch 'sk/mingw-uni-fix-more'
Junio C Hamano [Wed, 30 Jul 2014 21:21:09 +0000 (14:21 -0700)] 
Merge branch 'sk/mingw-uni-fix-more'

Most of these are battle-tested in msysgit and are needed to
complete what has been merged to 'master' already.

* sk/mingw-uni-fix-more:
  Win32: enable color output in Windows cmd.exe
  Win32: patch Windows environment on startup
  Win32: keep the environment sorted
  Win32: use low-level memory allocation during initialization
  Win32: reduce environment array reallocations
  Win32: don't copy the environment twice when spawning child processes
  Win32: factor out environment block creation
  Win32: unify environment function names
  Win32: unify environment case-sensitivity
  Win32: fix environment memory leaks
  Win32: Unicode environment (incoming)
  Win32: Unicode environment (outgoing)
  Revert "Windows: teach getenv to do a case-sensitive search"
  tests: do not pass iso8859-1 encoded parameter

10 years agoMerge branch 'ep/avoid-test-a-o'
Junio C Hamano [Wed, 30 Jul 2014 21:21:05 +0000 (14:21 -0700)] 
Merge branch 'ep/avoid-test-a-o'

* ep/avoid-test-a-o:
  t9814: fix misconversion from test $a -o $b to test $a || test $b

10 years agoGit 2.0.4 v2.0.4
Junio C Hamano [Wed, 30 Jul 2014 21:19:53 +0000 (14:19 -0700)] 
Git 2.0.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agopretty: make empty userformats truly empty
Jeff King [Tue, 29 Jul 2014 17:56:48 +0000 (13:56 -0400)] 
pretty: make empty userformats truly empty

If the user provides an empty format with "--format=", we
end up putting in extra whitespace that the user cannot
prevent. This comes from two places:

  1. If the format is missing a terminating newline, we add
     one automatically. This makes sense for --format=%h, but
     not for a truly empty format.

  2. We add an extra newline between the pretty-printed
     format and a diff or diffstat. If the format is empty,
     there's no point in doing so if there's nothing to
     separate.

With this patch, one can get a diff with no other cruft out
of "diff-tree --format= $commit".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agopretty: treat "--format=" as an empty userformat
Jeff King [Tue, 29 Jul 2014 17:54:46 +0000 (13:54 -0400)] 
pretty: treat "--format=" as an empty userformat

Until now, we treated "--pretty=" or "--format=" as "give me
the default format". This was not planned nor documented,
but only what happened to work due to our parsing of
"--pretty" (which should give the default format).

Let's instead let these be an actual empty userformat.
Otherwise one must write out the annoyingly long
"--pretty=tformat:" to get the same behavior.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agorevision: drop useless string offset when parsing "--pretty"
Jeff King [Tue, 29 Jul 2014 17:53:40 +0000 (13:53 -0400)] 
revision: drop useless string offset when parsing "--pretty"

Once upon a time, we parsed pretty options by looking for
"--pretty" at the start of the string, and then feeding the
rest (including an "=") to get_commit_format. Later, commit
48ded91 (log --pretty: do not accept bogus "--prettyshort",
2008-05-25) split this into a separate check for "--pretty"
versus "--pretty=".

However, when parsing "--pretty", we still passed "arg+8" to
get_commit_format. This is useless, since it will always
point to the NUL terminator at the end of the string. We can
simply pass NULL instead; both parameters are treated the
same by get_commit_format.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoadd documentation for writing config files
Tanay Abhra [Mon, 28 Jul 2014 10:42:26 +0000 (03:42 -0700)] 
add documentation for writing config files

Replace TODO introduced in commit 9c3c22 with documentation
explaining Git config API functions for writing configuration
files.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agocommit --amend: test specifies authorship but forgets to check
Fabian Ruch [Wed, 30 Jul 2014 09:45:11 +0000 (11:45 +0200)] 
commit --amend: test specifies authorship but forgets to check

The test case "--amend option copies authorship" specifies that the
git-commit option `--amend` uses the authorship of the replaced
commit for the new commit. Add the omitted check that this property
actually holds.

Signed-off-by: Fabian Ruch <bafain@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agouse a hashmap to make remotes faster
Patrick Reynolds [Tue, 29 Jul 2014 14:43:39 +0000 (14:43 +0000)] 
use a hashmap to make remotes faster

Remotes are stored as an array, so looking one up or adding one without
duplication is an O(n) operation.  Reading an entire config file full of
remotes is O(n^2) in the number of remotes.  For a repository with tens of
thousands of remotes, the running time can hit multiple minutes.

Hash tables are way faster.  So we add a hashmap from remote name to
struct remote and use it for all lookups.  The time to add a new remote to
a repo that already has 50,000 remotes drops from ~2 minutes to < 1
second.

We retain the old array of remotes so iterators proceed in config-file
order.

Signed-off-by: Patrick Reynolds <patrick.reynolds@github.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agotest-config: add tests for the config_set API
Tanay Abhra [Mon, 28 Jul 2014 10:10:39 +0000 (03:10 -0700)] 
test-config: add tests for the config_set API

Expose the `config_set` C API as a set of simple commands in order to
facilitate testing. Add tests for the `config_set` API as well as for
`git_config_get_*()` family for the usual config files.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoadd `config_set` API for caching config-like files
Tanay Abhra [Mon, 28 Jul 2014 10:10:38 +0000 (03:10 -0700)] 
add `config_set` API for caching config-like files

Currently `git_config()` uses a callback mechanism and file rereads for
config values. Due to this approach, it is not uncommon for the config
files to be parsed several times during the run of a git program, with
different callbacks picking out different variables useful to themselves.

Add a `config_set`, that can be used to construct an in-memory cache for
config-like files that the caller specifies (i.e., files like `.gitmodules`,
`~/.gitconfig` etc.). Add two external functions `git_configset_get_value`
and `git_configset_get_value_multi` for querying from the config sets.
`git_configset_get_value` follows `last one wins` semantic (i.e. if there
are multiple matches for the queried key in the files of the configset the
value returned will be the last entry in `value_list`).
`git_configset_get_value_multi` returns a list of values sorted in order of
increasing priority (i.e. last match will be at the end of the list). Add
type specific query functions like `git_configset_get_bool` and similar.

Add a default `config_set`, `the_config_set` to cache all key-value pairs
read from usual config files (repo specific .git/config, user wide
~/.gitconfig, XDG config and the global /etc/gitconfig). `the_config_set`
is populated using `git_config()`.

Add two external functions `git_config_get_value` and
`git_config_get_value_multi` for querying in a non-callback manner from
`the_config_set`. Also, add type specific query functions that are
implemented as a thin wrapper around the `config_set` API.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>