gitweb.git
sha1_file: release fallback base's memory in unpack_entry()René Scharfe Sat, 25 Feb 2017 10:02:28 +0000 (11:02 +0100)

sha1_file: release fallback base's memory in unpack_entry()

If a pack entry that's used as a delta base is corrupt, unpack_entry()
marks it as unusable and then searches the object again in the hope that
it can be found in another pack or in a loose file. The memory for this
external base object is never released. Free it after use.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

preparing for 2.10.3Junio C Hamano Mon, 5 Dec 2016 19:25:02 +0000 (11:25 -0800)

preparing for 2.10.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/common-main' into maint-2.10Junio C Hamano Mon, 5 Dec 2016 19:24:17 +0000 (11:24 -0800)

Merge branch 'jk/common-main' into maint-2.10

* jk/common-main:
common-main: stop munging argv[0] path
git-compat-util: move content inside ifdef/endif guards

Merge branch 'tk/diffcore-delta-remove-unused' into... Junio C Hamano Tue, 29 Nov 2016 21:28:03 +0000 (13:28 -0800)

Merge branch 'tk/diffcore-delta-remove-unused' into maint

Code cleanup.

* tk/diffcore-delta-remove-unused:
diffcore-delta: remove unused parameter to diffcore_count_changes()

Merge branch 'jk/create-branch-remove-unused-param... Junio C Hamano Tue, 29 Nov 2016 21:28:02 +0000 (13:28 -0800)

Merge branch 'jk/create-branch-remove-unused-param' into maint

Code clean-up.

* jk/create-branch-remove-unused-param:
create_branch: drop unused "head" parameter

Merge branch 'nd/worktree-lock' into maintJunio C Hamano Tue, 29 Nov 2016 21:28:02 +0000 (13:28 -0800)

Merge branch 'nd/worktree-lock' into maint

Typofix.

* nd/worktree-lock:
git-worktree.txt: fix typo "to"/"two", and add comma

Merge branch 'ps/common-info-doc' into maintJunio C Hamano Tue, 29 Nov 2016 21:28:01 +0000 (13:28 -0800)

Merge branch 'ps/common-info-doc' into maint

Doc fix.

* ps/common-info-doc:
doc: fix location of 'info/' with $GIT_COMMON_DIR

Merge branch 'rs/cocci' into maintJunio C Hamano Tue, 29 Nov 2016 21:28:00 +0000 (13:28 -0800)

Merge branch 'rs/cocci' into maint

Improve the rule to convert "unsigned char [20]" into "struct
object_id *" in contrib/coccinelle/

* rs/cocci:
cocci: avoid self-references in object_id transformations

Merge branch 'nd/test-helpers' into maintJunio C Hamano Tue, 29 Nov 2016 21:28:00 +0000 (13:28 -0800)

Merge branch 'nd/test-helpers' into maint

Update to the test framework made in 2.9 timeframe broke running
the tests under valgrind, which has been fixed.

* nd/test-helpers:
valgrind: support test helpers

Merge branch 'sc/fmt-merge-msg-doc-markup-fix' into... Junio C Hamano Tue, 29 Nov 2016 21:27:59 +0000 (13:27 -0800)

Merge branch 'sc/fmt-merge-msg-doc-markup-fix' into maint

Documentation fix.

* sc/fmt-merge-msg-doc-markup-fix:
Documentation/fmt-merge-msg: fix markup in example

Merge branch 'rs/commit-pptr-simplify' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:59 +0000 (13:27 -0800)

Merge branch 'rs/commit-pptr-simplify' into maint

Code simplification.

* rs/commit-pptr-simplify:
commit: simplify building parents list

Merge branch 'jk/rebase-config-insn-fmt-docfix' into... Junio C Hamano Tue, 29 Nov 2016 21:27:58 +0000 (13:27 -0800)

Merge branch 'jk/rebase-config-insn-fmt-docfix' into maint

Documentation fix.

* jk/rebase-config-insn-fmt-docfix:
doc: fix missing "::" in config list

Merge branch 'ak/pre-receive-hook-template-modefix... Junio C Hamano Tue, 29 Nov 2016 21:27:57 +0000 (13:27 -0800)

Merge branch 'ak/pre-receive-hook-template-modefix' into maint

A trivial clean-up to a recently graduated topic.

* ak/pre-receive-hook-template-modefix:
pre-receive.sample: mark it executable

Merge branch 'ls/macos-update' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)

Merge branch 'ls/macos-update' into maint

Portability update and workaround for builds on recent Mac OS X.

* ls/macos-update:
travis-ci: disable GIT_TEST_HTTPD for macOS
Makefile: set NO_OPENSSL on macOS by default

Merge branch 'as/merge-attr-sleep' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)

Merge branch 'as/merge-attr-sleep' into maint

Fix for a racy false-positive test failure.

* as/merge-attr-sleep:
t6026: clarify the point of "kill $(cat sleep.pid)"
t6026: ensure that long-running script really is
Revert "t6026-merge-attr: don't fail if sleep exits early"
Revert "t6026-merge-attr: ensure that the merge driver was called"
t6026-merge-attr: ensure that the merge driver was called
t6026-merge-attr: don't fail if sleep exits early

Merge branch 'ak/sh-setup-dot-source-i18n-fix' into... Junio C Hamano Tue, 29 Nov 2016 21:27:56 +0000 (13:27 -0800)

Merge branch 'ak/sh-setup-dot-source-i18n-fix' into maint

Recent update to git-sh-setup (a library of shell functions that
are used by our in-tree scripted Porcelain commands) included
another shell library git-sh-i18n without specifying where it is,
relying on the $PATH. This has been fixed to be more explicit by
prefixing $(git --exec-path) output in front.

* ak/sh-setup-dot-source-i18n-fix:
git-sh-setup: be explicit where to dot-source git-sh-i18n from.

Merge branch 'jk/daemon-path-ok-check-truncation' into... Junio C Hamano Tue, 29 Nov 2016 21:27:55 +0000 (13:27 -0800)

Merge branch 'jk/daemon-path-ok-check-truncation' into maint

"git daemon" used fixed-length buffers to turn URL to the
repository the client asked for into the server side directory
path, using snprintf() to avoid overflowing these buffers, but
allowed possibly truncated paths to the directory. This has been
tightened to reject such a request that causes overlong path to be
required to serve.

* jk/daemon-path-ok-check-truncation:
daemon: detect and reject too-long paths

Merge branch 'rs/ring-buffer-wraparound' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:55 +0000 (13:27 -0800)

Merge branch 'rs/ring-buffer-wraparound' into maint

The code that we have used for the past 10+ years to cycle
4-element ring buffers turns out to be not quite portable in
theoretical world.

* rs/ring-buffer-wraparound:
hex: make wraparound of the index into ring-buffer explicit

Merge branch 'mm/send-email-cc-cruft-after-address... Junio C Hamano Tue, 29 Nov 2016 21:27:54 +0000 (13:27 -0800)

Merge branch 'mm/send-email-cc-cruft-after-address' into maint

"git send-email" attempts to pick up valid e-mails from the
trailers, but people in real world write non-addresses there, like
"Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
on the availability and vintage of Mail::Address perl module.

* mm/send-email-cc-cruft-after-address:
Git.pm: add comment pointing to t9000
t9000-addresses: update expected results after fix
parse_mailboxes: accept extra text after <...> address

Merge branch 'cp/completion-negative-refs' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:53 +0000 (13:27 -0800)

Merge branch 'cp/completion-negative-refs' into maint

The command-line completion script (in contrib/) learned to
complete "git cmd ^mas<HT>" to complete the negative end of
reference to "git cmd ^master".

* cp/completion-negative-refs:
completion: support excluding refs

Merge branch 'jc/am-read-author-file' into maintJunio C Hamano Tue, 29 Nov 2016 21:27:53 +0000 (13:27 -0800)

Merge branch 'jc/am-read-author-file' into maint

Extract a small helper out of the function that reads the authors
script file "git am" internally uses.
This by itself is not useful until a second caller appears in the
future for "rebase -i" helper.

* jc/am-read-author-file:
am: refactor read_author_script()

common-main: stop munging argv[0] pathJeff King Sun, 27 Nov 2016 04:31:13 +0000 (23:31 -0500)

common-main: stop munging argv[0] path

Since 650c44925 (common-main: call git_extract_argv0_path(),
2016-07-01), the argv[0] that is seen in cmd_main() of
individual programs is always the basename of the
executable, as common-main strips off the full path. This
can produce confusing results for git-daemon, which wants to
re-exec itself.

For instance, if the program was originally run as
"/usr/lib/git/git-daemon", it will try just re-execing
"git-daemon", which will find the first instance in $PATH.
If git's exec-path has not been prepended to $PATH, we may
find the git-daemon from a different version (or no
git-daemon at all).

Normally this isn't a problem. Git commands are run as "git
daemon", the git wrapper puts the exec-path at the front of
$PATH, and argv[0] is already "daemon" anyway. But running
git-daemon via its full exec-path, while not really a
recommended method, did work prior to 650c44925. Let's make
it work again.

The real goal of 650c44925 was not to munge argv[0], but to
reliably set the argv0_path global. The only reason it
munges at all is that one caller, the git.c wrapper,
piggy-backed on that computation to find the command
basename. Instead, let's leave argv[0] untouched in
common-main, and have git.c do its own basename computation.

While we're at it, let's drop the return value from
git_extract_argv0_path(). It was only ever used in this one
callsite, and its dual purposes is what led to this
confusion in the first place.

Note that by changing the interface, the compiler can
confirm for us that there are no other callers storing the
return value. But the compiler can't tell us whether any of
the cmd_main() functions (besides git.c) were relying on the
basename munging. However, we can observe that prior to
650c44925, no other cmd_main() functions did that munging,
and no new cmd_main() functions have been introduced since
then. So we can't be regressing any of those cases.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diffcore-delta: remove unused parameter to diffcore_cou... Tobias Klauser Mon, 14 Nov 2016 13:39:05 +0000 (14:39 +0100)

diffcore-delta: remove unused parameter to diffcore_count_changes()

The delta_limit parameter to diffcore_count_changes() has been unused
since commit ba23bbc8e ("diffcore-delta: make change counter to byte
oriented again.", 2006-03-04).

Remove the parameter and adjust all callers.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-worktree.txt: fix typo "to"/"two", and add commaBen North Sat, 12 Nov 2016 08:55:16 +0000 (08:55 +0000)

git-worktree.txt: fix typo "to"/"two", and add comma

Signed-off-by: Ben North <ben@redfrontdoor.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6026: clarify the point of "kill $(cat sleep.pid)"Johannes Sixt Fri, 11 Nov 2016 20:24:44 +0000 (21:24 +0100)

t6026: clarify the point of "kill $(cat sleep.pid)"

We lengthened the time the leftover process sleeps in the previous
commit to make sure it will be there while 'git merge' runs and
finishes. It therefore needs to be killed before leaving the test.
And it needs to be killed even when 'git merge' fails, so it has to
be triggered via test_when_finished mechanism.

Explain all that in a large comment, and move the use site of
test_when_finished to immediately before 'git merge' invocation,
where the process is spawned.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: fix location of 'info/' with $GIT_COMMON_DIRPatrick Steinhardt Fri, 11 Nov 2016 11:23:32 +0000 (12:23 +0100)

doc: fix location of 'info/' with $GIT_COMMON_DIR

With the introduction of the $GIT_COMMON_DIR variable, the
repository layout manual was changed to reflect the location for
many files in case the variable is set. While adding the new
locations, one typo snuck in regarding the location of the
'info/' folder, which is falsely claimed to reside at
"$GIT_COMMON_DIR/index".

Fix the typo to point to "$GIT_COMMON_DIR/info/" instead.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6026: ensure that long-running script really isJohannes Schindelin Wed, 9 Nov 2016 13:51:22 +0000 (14:51 +0100)

t6026: ensure that long-running script really is

When making sure that background tasks are cleaned up in 5babb5b
(t6026-merge-attr: clean up background process at end of test case,
2016-09-07), we considered to let the background task sleep longer, just
to be certain that it will still be running when we want to kill it
after the test.

Sadly, the assumption appears not to hold true that the test case passes
quickly enough to kill the background task within a second.

Simply increase it to an hour. No system can be possibly slow enough to
make above-mentioned assumption incorrect.

Reported by Andreas Schwab.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Revert "t6026-merge-attr: don't fail if sleep exits... Junio C Hamano Thu, 10 Nov 2016 23:55:13 +0000 (15:55 -0800)

Revert "t6026-merge-attr: don't fail if sleep exits early"

This reverts commit 734fde2d7167e4b20d2ff6062ade3846949b0741.

The point of the test is that the stray process was still running
when 'git merge' did its thing through its completion, so a failure
to "kill" it means we didn't give a condition to the test to trigger
a possible future breakage. Appending "|| :" to the "kill" is
sweeping a test-bug under the rug.

Revert "t6026-merge-attr: ensure that the merge driver... Junio C Hamano Thu, 10 Nov 2016 23:54:12 +0000 (15:54 -0800)

Revert "t6026-merge-attr: ensure that the merge driver was called"

This reverts commit c1e0dc59bddce765761a6f863c66ee0cd4b2ca09.

We are not interested in the stray process in the merge driver
started; we want it to be still around.

t6026-merge-attr: ensure that the merge driver was... Andreas Schwab Thu, 10 Nov 2016 08:31:18 +0000 (09:31 +0100)

t6026-merge-attr: ensure that the merge driver was called

Explicitly check for the existence of the pid file to test that the
merge driver was actually called.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis-ci: disable GIT_TEST_HTTPD for macOSLars Schneider Mon, 17 Oct 2016 00:25:50 +0000 (17:25 -0700)

travis-ci: disable GIT_TEST_HTTPD for macOS

TravisCI changed their default macOS image from 10.10 to 10.11 [1].
Unfortunately the HTTPD tests do not run out of the box using the
pre-installed Apache web server anymore. Therefore we enable these
tests only for Linux and disable them for macOS.

[1] https://blog.travis-ci.com/2016-10-04-osx-73-default-image-live/

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: set NO_OPENSSL on macOS by defaultLars Schneider Sun, 6 Nov 2016 19:35:04 +0000 (20:35 +0100)

Makefile: set NO_OPENSSL on macOS by default

Apple removed the OpenSSL header files in macOS 10.11 and above. OpenSSL
was deprecated since macOS 10.7.

Set `NO_OPENSSL` and `APPLE_COMMON_CRYPTO` to `YesPlease` as default for
macOS. It is possible to override this and use OpenSSL by defining
`NO_APPLE_COMMON_CRYPTO`.

Original-patch-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

create_branch: drop unused "head" parameterJeff King Fri, 4 Nov 2016 16:30:12 +0000 (12:30 -0400)

create_branch: drop unused "head" parameter

This function used to have the caller pass in the current
value of HEAD, in order to make sure we didn't clobber HEAD.
In 55c4a6730, that logic moved to validate_new_branchname(),
which just resolves HEAD itself. The parameter to
create_branch is now unused.

Since we have to update and re-wrap the docstring describing
the parameters anyway, let's take this opportunity to break
it out into a list, which makes it easier to find the
parameters.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6026-merge-attr: don't fail if sleep exits earlyAndreas Schwab Tue, 8 Nov 2016 17:03:04 +0000 (18:03 +0100)

t6026-merge-attr: don't fail if sleep exits early

Commit 5babb5bdb3 ("t6026-merge-attr: clean up background process at end
of test case") added a kill command to clean up after the test, but this
can fail if the sleep command exits before the cleanup is executed.
Ignore the error from the kill command.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: Jeff King <peff@peff.net>

cocci: avoid self-references in object_id transformationsRené Scharfe Tue, 1 Nov 2016 08:49:12 +0000 (09:49 +0100)

cocci: avoid self-references in object_id transformations

The object_id functions oid_to_hex, oid_to_hex_r, oidclr, oidcmp, and
oidcpy are defined as wrappers of their legacy counterparts sha1_to_hex,
sha1_to_hex_r, hashclr, hashcmp, and hashcpy, respectively. Make sure
that the Coccinelle transformations for converting legacy function calls
are not applied to these wrappers themselves, which would result in
tautological declarations.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-sh-setup: be explicit where to dot-source git-sh... Anders Kaseorg Sun, 30 Oct 2016 02:10:02 +0000 (22:10 -0400)

git-sh-setup: be explicit where to dot-source git-sh-i18n from.

d323c6b641 ("i18n: git-sh-setup.sh: mark strings for translation",
2016-06-17) started to dot-source git-sh-i18n shell script library,
assuming that $PATH is already adjusted for our scripts, namely,
$GIT_EXEC_PATH is at the beginning of $PATH.

Old contrib scripts like contrib/convert-grafts-to-replace-refs.sh
and contrib/rerere-train.sh and third-party scripts like guilt may
however be using this as ". $(git --exec-path)/git-sh-setup",
without satisfying that assumption. Be more explicit by specifying
its path prefixed with "$(git --exec-path)/". to be safe.

While we’re here, move the sourcing of git-sh-i18n below the shell
portability fixes.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit: simplify building parents listRené Scharfe Sat, 29 Oct 2016 12:55:36 +0000 (14:55 +0200)

commit: simplify building parents list

Push pptr down into the FROM_MERGE branch of the if/else statement,
where it's actually used, and call commit_list_append() for appending
elements instead of playing tricks with commit_list_insert(). Call
copy_commit_list() in the amend branch instead of open-coding it. Don't
bother setting pptr in the final branch as it's not used thereafter.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: fix missing "::" in config listJeff King Sun, 30 Oct 2016 18:46:33 +0000 (14:46 -0400)

doc: fix missing "::" in config list

The rebase.instructionFormat option is missing its "::" to
tell AsciiDoc that it's a list entry. As a result, the
option name gets lumped into the description in one big
paragraph.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pre-receive.sample: mark it executableAnders Kaseorg Fri, 28 Oct 2016 18:40:41 +0000 (14:40 -0400)

pre-receive.sample: mark it executable

For consistency with other hooks, make the sample hook executable.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.10.2 v2.10.2Junio C Hamano Fri, 28 Oct 2016 16:02:44 +0000 (09:02 -0700)

Git 2.10.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'pb/test-parse-options-expect' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:24 +0000 (09:01 -0700)

Merge branch 'pb/test-parse-options-expect' into maint

Test clean-up.

* pb/test-parse-options-expect:
t0040: convert all possible tests to use `test-parse-options --expect`

Merge branch 'jc/cocci-xstrdup-or-null' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:23 +0000 (09:01 -0700)

Merge branch 'jc/cocci-xstrdup-or-null' into maint

Code cleanup.

* jc/cocci-xstrdup-or-null:
cocci: refactor common patterns to use xstrdup_or_null()

Merge branch 'rs/cocci' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:23 +0000 (09:01 -0700)

Merge branch 'rs/cocci' into maint

Code cleanup.

* rs/cocci:
use strbuf_add_unique_abbrev() for adding short hashes, part 3
remove unnecessary NULL check before free(3)
coccicheck: make transformation for strbuf_addf(sb, "...") more precise
use strbuf_add_unique_abbrev() for adding short hashes, part 2
use strbuf_addstr() instead of strbuf_addf() with "%s", part 2
gitignore: ignore output files of coccicheck make target
use strbuf_addstr() for adding constant strings to a strbuf, part 2
add coccicheck make target
contrib/coccinelle: fix semantic patch for oid_to_hex_r()

Merge branch 'jc/diff-unique-abbrev-comments' into... Junio C Hamano Fri, 28 Oct 2016 16:01:23 +0000 (09:01 -0700)

Merge branch 'jc/diff-unique-abbrev-comments' into maint

A bit more comments in a tricky code.

* jc/diff-unique-abbrev-comments:
diff_unique_abbrev(): document its assumption and limitation

Merge branch 'rs/pretty-format-color-doc-fix' into... Junio C Hamano Fri, 28 Oct 2016 16:01:23 +0000 (09:01 -0700)

Merge branch 'rs/pretty-format-color-doc-fix' into maint

Small doc update.

* rs/pretty-format-color-doc-fix:
pretty: fix document link for color specification

Merge branch 'js/reset-usage' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:22 +0000 (09:01 -0700)

Merge branch 'js/reset-usage' into maint

Message fix-up.

* js/reset-usage:
reset: fix usage

Merge branch 'po/fix-doc-merge-base-illustration' into... Junio C Hamano Fri, 28 Oct 2016 16:01:21 +0000 (09:01 -0700)

Merge branch 'po/fix-doc-merge-base-illustration' into maint

Some AsciiDoc formatter mishandles a displayed illustration with
tabs in it. Adjust a few of them in merge-base documentation to
work around them.

* po/fix-doc-merge-base-illustration:
doc: fix the 'revert a faulty merge' ASCII art tab spacing
doc: fix merge-base ASCII art tab spacing

Merge branch 'jk/tap-verbose-fix' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:20 +0000 (09:01 -0700)

Merge branch 'jk/tap-verbose-fix' into maint

The Travis CI configuration we ship ran the tests with --verbose
option but this risks non-TAP output that happens to be "ok" to be
misinterpreted as TAP signalling a test that passed. This resulted
in unnecessary failure. This has been corrected by introducing a
new mode to run our tests in the test harness to send the verbose
output separately to the log file.

* jk/tap-verbose-fix:
test-lib: bail out when "-v" used under "prove"
travis: use --verbose-log test option
test-lib: add --verbose-log option
test-lib: handle TEST_OUTPUT_DIRECTORY with spaces

Merge branch 'tg/add-chmod+x-fix' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:19 +0000 (09:01 -0700)

Merge branch 'tg/add-chmod+x-fix' into maint

A hot-fix for a test added by a recent topic that went to both
'master' and 'maint' already.

* tg/add-chmod+x-fix:
t3700: fix broken test under !SANITY

Merge branch 'bw/submodule-branch-dot-doc' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:19 +0000 (09:01 -0700)

Merge branch 'bw/submodule-branch-dot-doc' into maint

Recent git allows submodule.<name>.branch to use a special token
"." instead of the branch name; the documentation has been updated
to describe it.

* bw/submodule-branch-dot-doc:
submodules doc: update documentation for "." used for submodule branches

Merge branch 'jk/tighten-alloc' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:18 +0000 (09:01 -0700)

Merge branch 'jk/tighten-alloc' into maint

Protect our code from over-eager compilers.

* jk/tighten-alloc:
inline xalloc_flex() into FLEXPTR_ALLOC_MEM
avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM

Merge branch 'jk/fetch-quick-tag-following' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:17 +0000 (09:01 -0700)

Merge branch 'jk/fetch-quick-tag-following' into maint

When fetching from a remote that has many tags that are irrelevant
to branches we are following, we used to waste way too many cycles
when checking if the object pointed at by a tag (that we are not
going to fetch!) exists in our repository too carefully.

* jk/fetch-quick-tag-following:
fetch: use "quick" has_sha1_file for tag following

Merge branch 'jk/merge-base-fork-point-without-reflog... Junio C Hamano Fri, 28 Oct 2016 16:01:17 +0000 (09:01 -0700)

Merge branch 'jk/merge-base-fork-point-without-reflog' into maint

"git rebase" immediately after "git clone" failed to find the fork
point from the upstream.

* jk/merge-base-fork-point-without-reflog:
merge-base: handle --fork-point without reflog

Merge branch 'dk/worktree-dup-checkout-with-bare-is... Junio C Hamano Fri, 28 Oct 2016 16:01:16 +0000 (09:01 -0700)

Merge branch 'dk/worktree-dup-checkout-with-bare-is-ok' into maint

In a worktree connected to a repository elsewhere, created via "git
worktree", "git checkout" attempts to protect users from confusion
by refusing to check out a branch that is already checked out in
another worktree. However, this also prevented checking out a
branch, which is designated as the primary branch of a bare
reopsitory, in a worktree that is connected to the bare
repository. The check has been corrected to allow it.

* dk/worktree-dup-checkout-with-bare-is-ok:
worktree: allow the main brach of a bare repository to be checked out

Merge branch 'sb/submodule-config-doc-drop-path' into... Junio C Hamano Fri, 28 Oct 2016 16:01:16 +0000 (09:01 -0700)

Merge branch 'sb/submodule-config-doc-drop-path' into maint

The "submodule.<name>.path" stored in .gitmodules is never copied
to .git/config and such a key in .git/config has no meaning, but
the documentation described it and submodule.<name>.url next to
each other as if both belong to .git/config. This has been fixed.

* sb/submodule-config-doc-drop-path:
documentation: improve submodule.<name>.{url, path} description

Merge branch 'jk/ref-symlink-loop' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:15 +0000 (09:01 -0700)

Merge branch 'jk/ref-symlink-loop' into maint

A stray symbolic link in $GIT_DIR/refs/ directory could make name
resolution loop forever, which has been corrected.

* jk/ref-symlink-loop:
files_read_raw_ref: prevent infinite retry loops in general
files_read_raw_ref: avoid infinite loop on broken symlinks

Merge branch 'nd/commit-p-doc' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:15 +0000 (09:01 -0700)

Merge branch 'nd/commit-p-doc' into maint

Documentation for "git commit" was updated to clarify that "commit
-p <paths>" adds to the current contents of the index to come up
with what to commit.

* nd/commit-p-doc:
git-commit.txt: clarify --patch mode with pathspec

Merge branch 'jk/clone-copy-alternates-fix' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:14 +0000 (09:01 -0700)

Merge branch 'jk/clone-copy-alternates-fix' into maint

"git clone" of a local repository can be done at the filesystem
level, but the codepath did not check errors while copying and
adjusting the file that lists alternate object stores.

* jk/clone-copy-alternates-fix:
clone: detect errors in normalize_path_copy

Merge branch 'dt/http-empty-auth' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:14 +0000 (09:01 -0700)

Merge branch 'dt/http-empty-auth' into maint

http.emptyauth configuration is a way to allow an empty username to
pass when attempting to authenticate using mechanisms like
Kerberos. We took an unspecified (NULL) username and sent ":"
(i.e. no username, no password) to CURLOPT_USERPWD, but did not do
the same when the username is explicitly set to an empty string.

* dt/http-empty-auth:
http: http.emptyauth should allow empty (not just NULL) usernames

Merge branch 'dp/autoconf-curl-ssl' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:13 +0000 (09:01 -0700)

Merge branch 'dp/autoconf-curl-ssl' into maint

The ./configure script generated from configure.ac was taught how
to detect support of SSL by libcurl better.

* dp/autoconf-curl-ssl:
./configure.ac: detect SSL in libcurl using curl-config

Merge branch 'ak/curl-imap-send-explicit-scheme' into... Junio C Hamano Fri, 28 Oct 2016 16:01:13 +0000 (09:01 -0700)

Merge branch 'ak/curl-imap-send-explicit-scheme' into maint

When we started cURL to talk to imap server when a new enough
version of cURL library is available, we forgot to explicitly add
imap(s):// before the destination. To some folks, that didn't work
and the library tried to make HTTP(s) requests instead.

* ak/curl-imap-send-explicit-scheme:
imap-send: Tell cURL to use imap:// or imaps://

Merge branch 'jt/fetch-pack-in-vain-count-with-stateles... Junio C Hamano Fri, 28 Oct 2016 16:01:12 +0000 (09:01 -0700)

Merge branch 'jt/fetch-pack-in-vain-count-with-stateless' into maint

When "git fetch" tries to find where the history of the repository
it runs in has diverged from what the other side has, it has a
mechanism to avoid digging too deep into irrelevant side branches.
This however did not work well over the "smart-http" transport due
to a design bug, which has been fixed.

* jt/fetch-pack-in-vain-count-with-stateless:
fetch-pack: do not reset in_vain on non-novel acks

Merge branch 'js/regexec-buf' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:12 +0000 (09:01 -0700)

Merge branch 'js/regexec-buf' into maint

A follow-up to an already graduated topic.

* js/regexec-buf:
configure.ac: improve description of NO_REGEX test

Merge branch 'rs/c-auto-resets-attributes' into maintJunio C Hamano Fri, 28 Oct 2016 16:01:11 +0000 (09:01 -0700)

Merge branch 'rs/c-auto-resets-attributes' into maint

When "%C(auto)" appears at the very beginning of the pretty format
string, it did not need to issue the reset sequence, but it did.
This is a small optimization to already graduated topic.

* rs/c-auto-resets-attributes:
pretty: avoid adding reset for %C(auto) if output is empty
pretty: let %C(auto) reset all attributes

Merge branch 'yk/git-tag-remove-mention-of-old-layout... Junio C Hamano Fri, 28 Oct 2016 16:01:10 +0000 (09:01 -0700)

Merge branch 'yk/git-tag-remove-mention-of-old-layout-in-doc' into maint

Shorten description of auto-following in "git tag" by removing a
mention of historical remotes layout which is not relevant to the
main topic.

* yk/git-tag-remove-mention-of-old-layout-in-doc:
doc: remove reference to the traditional layout in git-tag.txt

Documentation/fmt-merge-msg: fix markup in exampleStefan Christ Fri, 28 Oct 2016 10:01:26 +0000 (12:01 +0200)

Documentation/fmt-merge-msg: fix markup in example

Use at least 4 delimiting dashes that are required for
ListingBlock to get this block rendered as verbatim text.

Signed-off-by: Stefan Christ <contact@stefanchrist.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

valgrind: support test helpersRené Scharfe Thu, 27 Oct 2016 22:14:00 +0000 (00:14 +0200)

valgrind: support test helpers

Tests run with --valgrind call git commands through a wrapper script
that invokes valgrind on them. This script (valgrind.sh) is in turn
invoked through symlinks created for each command in t/valgrind/bin/.

Since e6e7530d (test helpers: move test-* to t/helper/ subdirectory)
these symlinks have been broken for test helpers -- they point to the
old locations in the root of the build directory. Fix that by teaching
the code for creating the links about the new location of the binaries,
and do the same in the wrapper script to allow it to find its payload.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-compat-util: move content inside ifdef/endif guardsJeff King Thu, 27 Oct 2016 17:30:30 +0000 (13:30 -0400)

git-compat-util: move content inside ifdef/endif guards

Commit 3f2e2297b9 (add an extra level of indirection to
main(), 2016-07-01) added a declaration to git-compat-util.h,
but it was accidentally placed after the final #endif that
guards against multiple inclusions.

This doesn't have any actual impact on the code, since it's
not incorrect to repeat a function declaration in C. But
it's a bad habit, and makes it more likely for somebody else
to make the same mistake. It also defeats gcc's optimization
to avoid opening header files whose contents are completely
guarded.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

hex: make wraparound of the index into ring-buffer... René Scharfe Sun, 23 Oct 2016 17:57:30 +0000 (19:57 +0200)

hex: make wraparound of the index into ring-buffer explicit

Overflow is defined for unsigned integers, but not for signed ones.

We could make the ring-buffer index in sha1_to_hex() and
get_pathname() unsigned to be on the safe side to resolve this, but
let's make it explicit that we are wrapping around at whatever the
number of elements the ring-buffer has. The compiler is smart enough
to turn modulus into bitmask for these codepaths that use
ring-buffers of a size that is a power of 2.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: fix the 'revert a faulty merge' ASCII art tab... Philip Oakley Mon, 24 Oct 2016 21:54:32 +0000 (22:54 +0100)

doc: fix the 'revert a faulty merge' ASCII art tab spacing

The asciidoctor doc-tool stack does not always respect the 'tab = 8 spaces' rule
expectation, particularly for the Git-for-Windows generated html pages. This
follows on from the 'doc: fix merge-base ASCII art tab spacing' fix.

Use just spaces within the block of the ascii art.

All other *.txt ascii art containing three dashes has been checked.
Asciidoctor correctly formats the other art blocks that do contain tabs.

Signed-off-by: Philip Oakley <philipoakley@iee.org
Signed-off-by: Junio C Hamano <gitster@pobox.com>

daemon: detect and reject too-long pathsJeff King Sat, 22 Oct 2016 04:59:38 +0000 (00:59 -0400)

daemon: detect and reject too-long paths

When we are checking the path via path_ok(), we use some
fixed PATH_MAX buffers. We write into them via snprintf(),
so there's no possibility of overflow, but it does mean we
may silently truncate the path, leading to potentially
confusing errors when the partial path does not exist.

We're better off to reject the path explicitly.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: bail out when "-v" used under "prove"Jeff King Sat, 22 Oct 2016 04:45:06 +0000 (00:45 -0400)

test-lib: bail out when "-v" used under "prove"

When there is a TAP harness consuming the output of our test
scripts, the "--verbose" breaks the output by mingling
test command output with TAP. Because the TAP::Harness
module used by "prove" is fairly lenient, this _usually_
works, but it violates the spec, and things get very
confusing if the commands happen to output a line that looks
like TAP (e.g., the word "ok" on its own line).

Let's detect this situation and complain. Just calling
error() isn't great, though; prove will tell us that the
script failed, but the message doesn't make it through to
the user. Instead, we can use the special TAP signal "Bail
out!". This not only shows the message to the user, but
instructs the harness to stop running the tests entirely.
This is exactly what we want here, as the problem is in the
command-line options, and every test script would produce
the same error.

The result looks like this (the first "Bailout called" line
is in red if prove uses color on your terminal):

$ make GIT_TEST_OPTS='--verbose --tee'
rm -f -r 'test-results'
*** prove ***
Bailout called. Further testing stopped: verbose mode forbidden under TAP harness; try --verbose-log
FAILED--Further testing stopped: verbose mode forbidden under TAP harness; try --verbose-log
Makefile:39: recipe for target 'prove' failed
make: *** [prove] Error 255

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

travis: use --verbose-log test optionJeff King Fri, 21 Oct 2016 10:48:12 +0000 (06:48 -0400)

travis: use --verbose-log test option

Because we run the tests via "prove", the output from
"--verbose" may interfere with our TAP output. Using
"--verbose-log" solves this while letting us retain our
on-disk log.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: add --verbose-log optionJeff King Fri, 21 Oct 2016 10:48:00 +0000 (06:48 -0400)

test-lib: add --verbose-log option

The "--verbose" option redirects output from arbitrary
test commands to stdout. This is useful for examining the
output manually, like:

./t5547-push-quarantine.sh -v | less

But it also means that the output is intermingled with the
TAP directives, which can confuse a TAP parser like "prove".
This has always been a potential problem, but became an
issue recently when one test happened to output the word
"ok" on a line by itself, which prove interprets as a test
success:

$ prove t5547-push-quarantine.sh :: -v
t5547-push-quarantine.sh .. 1/? To dest.git
* [new branch] HEAD -> master
To dest.git
! [remote rejected] reject -> reject (pre-receive hook declined)
error: failed to push some refs to 'dest.git'
fatal: git cat-file d08c8eba97f4e683ece08654c7c8d2ba0c03b129: bad file
t5547-push-quarantine.sh .. Failed -1/4 subtests

Test Summary Report
-------------------
t5547-push-quarantine.sh (Wstat: 0 Tests: 5 Failed: 0)
Parse errors: Tests out of sequence. Found (2) but expected (3)
Tests out of sequence. Found (3) but expected (4)
Tests out of sequence. Found (4) but expected (5)
Bad plan. You planned 4 tests but ran 5.
Files=1, Tests=5, 0 wallclock secs ( 0.01 usr + 0.01 sys = 0.02 CPU)
Result: FAIL

One answer is "if it hurts, don't do it", but that's not
quite the whole story. The Travis tests use "--verbose
--tee" so that they can get the benefit of prove's parallel
options, along with a verbose log in case there is a
failure. We just need the verbose output to go to the log,
but keep stdout clean.

Getting this right turns out to be surprisingly difficult.
Here's the progression of alternatives I considered:

1. Add an option to write verbose output to stderr. This is
hard to capture, though, because we want each test to
have its own log (because they're all run in parallel
and the jumbled output would be useless).

2. Add an option to write verbose output to a file in
test-results. This works, but the log is missing all of
the non-verbose output, which gives context.

3. Like (2), but teach say_color() to additionally output
to the log. This mostly works, but misses any output
that happens outside of the say() functions (which isn't
a lot, but is a potential maintenance headache).

4. Like (2), but make the log file the same as the "--tee"
file. That almost works, but now we have two processes
opening the same file. That gives us two separate
descriptors, each with their own idea of the current
position. They'll each start writing at offset 0, and
overwrite each other's data.

5. Like (4), but in each case open the file for appending.
That atomically positions each write at the end of the
file.

It's possible we may still get sheared writes between
the two processes, but this is already the case when
writing to stdout. It's not a problem in practice
because the test harness generally waits for snippets to
finish before writing the TAP output.

We can ignore buffering issues with tee, because POSIX
mandates that it does not buffer. Likewise, POSIX
specifies "tee -a", so it should be available
everywhere.

This patch implements option (5), which seems to work well
in practice.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: handle TEST_OUTPUT_DIRECTORY with spacesJeff King Fri, 21 Oct 2016 10:42:10 +0000 (06:42 -0400)

test-lib: handle TEST_OUTPUT_DIRECTORY with spaces

We are careful in test_done to handle a results directory
with a space in it, but the "--tee" code path does not.
Doing:

export TEST_OUTPUT_DIRECTORY='/tmp/path with spaces'
./t000-init.sh --tee

results in errors. Let's consistently double-quote our path
variables so that this works.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git.pm: add comment pointing to t9000Matthieu Moy Fri, 21 Oct 2016 09:20:24 +0000 (11:20 +0200)

Git.pm: add comment pointing to t9000

parse_mailboxes should probably eventually be completely equivalent to
Mail::Address, and if this happens we can drop the Mail::Address
dependency. Add a comment in the code reminding the current state of the
code, and point to the corresponding failing test to help future
contributors to get it right.

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

t9000-addresses: update expected results after fixMatthieu Moy Fri, 21 Oct 2016 09:20:23 +0000 (11:20 +0200)

t9000-addresses: update expected results after fix

e3fdbcc8e1 (parse_mailboxes: accept extra text after <...> address,
2016-10-13) improved our in-house address parser and made it closer to
Mail::Address. As a consequence, some tests comparing it to
Mail::Address now pass, but e3fdbcc8e1 forgot to update the test.

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

doc: fix merge-base ASCII art tab spacingPhilip Oakley Thu, 20 Oct 2016 23:40:09 +0000 (00:40 +0100)

doc: fix merge-base ASCII art tab spacing

The doc-tool stack does not always respect the 'tab = 8 spaces' rule,
particularly the git-scm doc pages https://git-scm.com/docs/git-merge-base
and the Git generated html pages.

Use just spaces within the block of the ascii art.

Noticed when reviewing Junio's suggested update to `git merge-base`
https://public-inbox.org/git/xmqqmvi2sj8f.fsf@gitster.mtv.corp.google.com/T/#u

Signed-off-by: Philip Oakley <philipoakley@iee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: remove reference to the traditional layout in... Younes Khoudli Thu, 20 Oct 2016 13:21:44 +0000 (15:21 +0200)

doc: remove reference to the traditional layout in git-tag.txt

This is the only place in the documentation that the traditional layout
is mentioned, and it is confusing. Remove it.

* Documentation/git-tag.txt: Here.

Signed-off-by: Younes Khoudli <younes.khoudli@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3700: fix broken test under !SANITYJunio C Hamano Mon, 10 Oct 2016 17:41:51 +0000 (10:41 -0700)

t3700: fix broken test under !SANITY

An "add --chmod=+x" test recently added by 610d55af0f ("add: modify
already added files when --chmod is given", 2016-09-14) used "xfoo3"
as a test file. The paths xfoo[1-3] were used by earlier tests for
symbolic links but they were expected to have been removed by the
time the execution reached this new test.

The removal with "git reset --hard" however happened in a pair of
earlier tests, both of which are protected by POSIXPERM,SANITY
prerequisites. Platforms and test environments that lacked these
would have seen xfoo3 as a leftover symbolic link that points at
somewhere else at this point of the sequence, and the chmod test
would have given a wrong result.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodules doc: update documentation for "." used for... Brandon Williams Wed, 19 Oct 2016 20:42:54 +0000 (13:42 -0700)

submodules doc: update documentation for "." used for submodule branches

4d7bc52b17 ("submodule update: allow '.' for branch value",
2016-08-03) adopted from Gerrit a feature to set "." as a special
value of "submodule.<name>.branch" in .gitmodules file to indicate
that the tracking branch in the submodule should be the same as the
current branch in the superproject.

Update the documentation to describe this.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0040: convert all possible tests to use `test-parse... Pranit Bauva Sat, 15 Oct 2016 12:28:13 +0000 (12:28 +0000)

t0040: convert all possible tests to use `test-parse-options --expect`

Use "test-parse-options --expect" to rewrite the tests to avoid checking
the whole variable dump by just testing what is required.

This commit is a follow-up to 8ca65aebad ("t0040: convert a few
tests to use test-parse-options --expect", 2016-05-06).

Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

inline xalloc_flex() into FLEXPTR_ALLOC_MEMRené Scharfe Sun, 16 Oct 2016 10:06:02 +0000 (12:06 +0200)

inline xalloc_flex() into FLEXPTR_ALLOC_MEM

Allocate and copy directly in FLEXPTR_ALLOC_MEM and remove the now
unused helper function xalloc_flex(). The resulting code is shorter
and the offset arithmetic is a bit simpler.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEMRené Scharfe Sat, 15 Oct 2016 16:23:11 +0000 (18:23 +0200)

avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM

Calculating offsets involving a NULL pointer is undefined. It works in
practice (for now?), but we should not rely on it. Allocate first and
then simply refer to the flexible array member by its name instead of
performing pointer arithmetic up front. The resulting code is slightly
shorter, easier to read and doesn't rely on undefined behaviour.

NB: The cast to a (non-const) void pointer is necessary to keep support
for flexible array members declared as const.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'l10n-2.10.0-rnd2.4' of git://github.com... Junio C Hamano Mon, 17 Oct 2016 20:27:38 +0000 (13:27 -0700)

Merge tag 'l10n-2.10.0-rnd2.4' of git://github.com/git-l10n/git-po into maint

l10n-2.10.0-rnd2.4

* tag 'l10n-2.10.0-rnd2.4' of git://github.com/git-l10n/git-po:
l10n: de.po: translate 260 new messages
l10n: de.po: fix translation of autostash
l10n: ru.po: update Russian translation

Merge branch 'russian-l10n' of https://github.com/DJm00... Jiang Xin Sun, 16 Oct 2016 12:11:41 +0000 (20:11 +0800)

Merge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru

* 'russian-l10n' of https://github.com/DJm00n/git-po-ru:
l10n: ru.po: update Russian translation

fetch: use "quick" has_sha1_file for tag followingJeff King Thu, 13 Oct 2016 16:53:44 +0000 (12:53 -0400)

fetch: use "quick" has_sha1_file for tag following

When we auto-follow tags in a fetch, we look at all of the
tags advertised by the remote and fetch ones where we don't
already have the tag, but we do have the object it peels to.
This involves a lot of calls to has_sha1_file(), some of
which we can reasonably expect to fail. Since 45e8a74
(has_sha1_file: re-check pack directory before giving up,
2013-08-30), this may cause many calls to
reprepare_packed_git(), which is potentially expensive.

This has gone unnoticed for several years because it
requires a fairly unique setup to matter:

1. You need to have a lot of packs on the client side to
make reprepare_packed_git() expensive (the most
expensive part is finding duplicates in an unsorted
list, which is currently quadratic).

2. You need a large number of tag refs on the server side
that are candidates for auto-following (i.e., that the
client doesn't have). Each one triggers a re-read of
the pack directory.

3. Under normal circumstances, the client would
auto-follow those tags and after one large fetch, (2)
would no longer be true. But if those tags point to
history which is disconnected from what the client
otherwise fetches, then it will never auto-follow, and
those candidates will impact it on every fetch.

So when all three are true, each fetch pays an extra
O(nr_tags * nr_packs^2) cost, mostly in string comparisons
on the pack names. This was exacerbated by 47bf4b0
(prepare_packed_git_one: refactor duplicate-pack check,
2014-06-30) which uses a slightly more expensive string
check, under the assumption that the duplicate check doesn't
happen very often (and it shouldn't; the real problem here
is how often we are calling reprepare_packed_git()).

This patch teaches fetch to use HAS_SHA1_QUICK to sacrifice
accuracy for speed, in cases where we might be racy with a
simultaneous repack. This is similar to the fix in 0eeb077
(index-pack: avoid excessive re-reading of pack directory,
2015-06-09). As with that case, it's OK for has_sha1_file()
occasionally say "no I don't have it" when we do, because
the worst case is not a corruption, but simply that we may
fail to auto-follow a tag that points to it.

Here are results from the included perf script, which sets
up a situation similar to the one described above:

Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%

Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

parse_mailboxes: accept extra text after <...> addressMatthieu Moy Thu, 13 Oct 2016 05:47:27 +0000 (07:47 +0200)

parse_mailboxes: accept extra text after <...> address

The test introduced in this commit succeeds without the patch to Git.pm
if Mail::Address is installed, but fails otherwise because our in-house
parser does not accept any text after the email address. They succeed
both with and without Mail::Address after this commit.

Mail::Address accepts extra text and considers it as part of the name,
iff the address is surrounded with <...>. The implementation mimics
this behavior as closely as possible.

This mostly restores the behavior we had before b1c8a11 (send-email:
allow multiple emails using --cc, --to and --bcc, 2015-06-30), but we
keep the possibility to handle comma-separated lists.

Reported-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

worktree: allow the main brach of a bare repository... Dennis Kaarsemaker Wed, 12 Oct 2016 16:41:07 +0000 (18:41 +0200)

worktree: allow the main brach of a bare repository to be checked out

In bare repositories, get_worktrees() still returns the main repository,
so git worktree list can show it. ignore it in find_shared_symref so we
can still check out the main branch.

Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Acked-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge-base: handle --fork-point without reflogJeff King Wed, 12 Oct 2016 20:10:40 +0000 (16:10 -0400)

merge-base: handle --fork-point without reflog

The --fork-point option looks in the reflog to try to find
where a derived branch forked from a base branch. However,
if the reflog for the base branch is totally empty (as it
commonly is right after cloning, which does not write a
reflog entry), then our for_each_reflog call will not find
any entries, and we will come up with no merge base, even
though there may be one with the current tip of the base.

We can fix this by just adding the current tip to
our list of collected entries.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cocci: refactor common patterns to use xstrdup_or_null()Junio C Hamano Wed, 12 Oct 2016 18:20:23 +0000 (11:20 -0700)

cocci: refactor common patterns to use xstrdup_or_null()

d64ea0f83b ("git-compat-util: add xstrdup_or_null helper",
2015-01-12) added a handy wrapper that allows us to get a duplicate
of a string or NULL if the original is NULL, but a handful of
codepath predate its introduction or just weren't aware of it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: de.po: translate 260 new messagesRalf Thielow Wed, 12 Oct 2016 16:31:13 +0000 (18:31 +0200)

l10n: de.po: translate 260 new messages

Translate 260 new message came from git.pot updates in 9fa976f (l10n:
git.pot: v2.10.0 round 1 (248 new, 56 removed)) and 5bd166d (l10n:
git.pot: v2.10.0 round 2 (12 new, 44 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Matthias Rüster <matthias.ruester@gmail.com>

Start preparing for 2.10.2Junio C Hamano Tue, 11 Oct 2016 21:24:02 +0000 (14:24 -0700)

Start preparing for 2.10.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/verify-packfile-gently' into maintJunio C Hamano Tue, 11 Oct 2016 21:21:35 +0000 (14:21 -0700)

Merge branch 'jk/verify-packfile-gently' into maint

A low-level function verify_packfile() was meant to show errors
that were detected without dying itself, but under some conditions
it didn't and died instead, which has been fixed.

* jk/verify-packfile-gently:
verify_packfile: check pack validity before accessing data

Merge branch 'jc/worktree-config' into maintJunio C Hamano Tue, 11 Oct 2016 21:21:17 +0000 (14:21 -0700)

Merge branch 'jc/worktree-config' into maint

"git worktree", even though it used the default_abbrev setting that
ought to be affected by core.abbrev configuration variable, ignored
the variable setting. The command has been taught to read the
default set of configuration variables to correct this.

* jc/worktree-config:
worktree: honor configuration variables

Merge branch 'jc/verify-loose-object-header' into maintJunio C Hamano Tue, 11 Oct 2016 21:21:03 +0000 (14:21 -0700)

Merge branch 'jc/verify-loose-object-header' into maint

Codepaths that read from an on-disk loose object were too loose in
validating what they are reading is a proper object file and
sometimes read past the data they read from the disk, which has
been corrected. H/t to Gustavo Grieco for reporting.

* jc/verify-loose-object-header:
unpack_sha1_header(): detect malformed object header
streaming: make sure to notice corrupt object

Merge branch 'rs/git-gui-use-modern-git-merge-syntax... Junio C Hamano Tue, 11 Oct 2016 21:20:37 +0000 (14:20 -0700)

Merge branch 'rs/git-gui-use-modern-git-merge-syntax' into maint

The original command line syntax for "git merge", which was "git
merge <msg> HEAD <parent>...", has been deprecated for quite some
time, and "git gui" was the last in-tree user of the syntax. This
is finally fixed, so that we can move forward with the deprecation.

* rs/git-gui-use-modern-git-merge-syntax:
git-gui: stop using deprecated merge syntax

Merge branch 'kd/mailinfo-quoted-string' into maintJunio C Hamano Tue, 11 Oct 2016 21:20:31 +0000 (14:20 -0700)

Merge branch 'kd/mailinfo-quoted-string' into maint

An author name, that spelled a backslash-quoted double quote in the
human readable part "My \"double quoted\" name", was not unquoted
correctly while applying a patch from a piece of e-mail.

* kd/mailinfo-quoted-string:
mailinfo: unescape quoted-pair in header fields
t5100-mailinfo: replace common path prefix with variable

Merge branch 'pb/rev-list-reverse-with-count' into... Junio C Hamano Tue, 11 Oct 2016 21:20:05 +0000 (14:20 -0700)

Merge branch 'pb/rev-list-reverse-with-count' into maint

Doc update to clarify what "log -3 --reverse" does.

* pb/rev-list-reverse-with-count:
rev-list-options: clarify the usage of --reverse

Merge branch 'jc/blame-abbrev' into maintJunio C Hamano Tue, 11 Oct 2016 21:19:52 +0000 (14:19 -0700)

Merge branch 'jc/blame-abbrev' into maint

Almost everybody uses DEFAULT_ABBREV to refer to the default
setting for the abbreviation, but "git blame" peeked into
underlying variable bypassing the macro for no good reason.

* jc/blame-abbrev:
blame: use DEFAULT_ABBREV macro