gitweb.git
files_transaction_commit(): clean up empty directoriesMichael Haggerty Fri, 6 Jan 2017 16:22:43 +0000 (17:22 +0100)

files_transaction_commit(): clean up empty directories

When deleting/pruning references, remove any directories that are made
empty by the deletion of loose references or of reflogs. Otherwise such
empty directories can survive forever and accumulate over time. (Even
'pack-refs', which is smart enough to remove the parent directories of
loose references that it prunes, leaves directories that were already
empty.)

And now that files_transaction_commit() takes care of deleting the
parent directories of loose references that it prunes, we don't have to
do that in prune_ref() anymore.

This change would be unwise if the *creation* of these directories could
race with our deletion of them. But the earlier changes in this patch
series made the creation paths robust against races, so now it is safe
to tidy them up more aggressively.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

try_remove_empty_parents(): teach to remove parents... Michael Haggerty Fri, 6 Jan 2017 16:22:42 +0000 (17:22 +0100)

try_remove_empty_parents(): teach to remove parents of reflogs, too

Add a new "flags" parameter that tells the function whether to remove
empty parent directories of the loose reference file, of the reflog
file, or both. The new functionality is not yet used.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

try_remove_empty_parents(): don't trash argument contentsMichael Haggerty Fri, 6 Jan 2017 16:22:41 +0000 (17:22 +0100)

try_remove_empty_parents(): don't trash argument contents

It's bad manners and surprising and therefore error-prone.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

try_remove_empty_parents(): rename parameter "name... Michael Haggerty Fri, 6 Jan 2017 16:22:40 +0000 (17:22 +0100)

try_remove_empty_parents(): rename parameter "name" -> "refname"

This is the standard nomenclature.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

delete_ref_loose(): inline functionMichael Haggerty Fri, 6 Jan 2017 16:22:39 +0000 (17:22 +0100)

delete_ref_loose(): inline function

It was hardly doing anything anymore, and had only one caller.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

delete_ref_loose(): derive loose reference path from... Michael Haggerty Fri, 6 Jan 2017 16:22:38 +0000 (17:22 +0100)

delete_ref_loose(): derive loose reference path from lock

It is simpler to derive the path to the file that must be deleted from
"lock->ref_name" than from the lock_file object.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_write_1(): inline functionMichael Haggerty Fri, 6 Jan 2017 16:22:37 +0000 (17:22 +0100)

log_ref_write_1(): inline function

Now files_log_ref_write() doesn't do anything beyond call
log_ref_write_1(), so inline the latter into the former.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_setup(): manage the name of the reflog file... Michael Haggerty Fri, 6 Jan 2017 16:22:36 +0000 (17:22 +0100)

log_ref_setup(): manage the name of the reflog file internally

Instead of writing the name of the reflog file into a strbuf that is
supplied by the caller but not needed there, write it into a local
temporary buffer and remove the strbuf parameter entirely.

And while we're adjusting the function signature, reorder the arguments
to move the input parameters before the output parameters.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_write_1(): don't depend on logfile argumentMichael Haggerty Fri, 6 Jan 2017 16:22:35 +0000 (17:22 +0100)

log_ref_write_1(): don't depend on logfile argument

It's unnecessary to pass a strbuf holding the reflog path up and down
the call stack now that it is hardly needed by the callers. Remove the
places where log_ref_write_1() uses it, in preparation for making it
internal to log_ref_setup().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_setup(): pass the open file descriptor back... Michael Haggerty Fri, 6 Jan 2017 16:22:34 +0000 (17:22 +0100)

log_ref_setup(): pass the open file descriptor back to the caller

This function will most often be called by log_ref_write_1(), which
wants to append to the reflog file. In that case, it is silly to close
the file only for the caller to reopen it immediately. So, in the case
that the file was opened, pass the open file descriptor back to the
caller.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_setup(): improve robustness against racesMichael Haggerty Fri, 6 Jan 2017 16:22:33 +0000 (17:22 +0100)

log_ref_setup(): improve robustness against races

Change log_ref_setup() to use raceproof_create_file() to create the new
logfile. This makes it more robust against a race against another
process that might be trying to clean up empty directories while we are
trying to create a new logfile.

This also means that it will only call create_leading_directories() if
open() fails, which should be a net win. Even in the cases where we are
willing to create a new logfile, it will usually be the case that the
logfile already exists, or if not then that the directory containing the
logfile already exists. In such cases, we will save some work that was
previously done unconditionally.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_setup(): separate code for create vs non-createMichael Haggerty Fri, 6 Jan 2017 16:22:32 +0000 (17:22 +0100)

log_ref_setup(): separate code for create vs non-create

The behavior of this function (especially how it handles errors) is
quite different depending on whether we are willing to create the reflog
vs. whether we are only trying to open an existing reflog. So separate
the code paths.

This also simplifies the next steps.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

log_ref_write(): inline functionMichael Haggerty Fri, 6 Jan 2017 16:22:31 +0000 (17:22 +0100)

log_ref_write(): inline function

This function doesn't do anything beyond call files_log_ref_write(), so
replace it with the latter at its call sites.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename_tmp_log(): improve error reportingMichael Haggerty Fri, 6 Jan 2017 16:22:30 +0000 (17:22 +0100)

rename_tmp_log(): improve error reporting

* Don't capitalize error strings
* Report true paths of affected files

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rename_tmp_log(): use raceproof_create_file()Michael Haggerty Fri, 6 Jan 2017 16:22:29 +0000 (17:22 +0100)

rename_tmp_log(): use raceproof_create_file()

Besides shortening the code, this saves an unnecessary call to
safe_create_leading_directories_const() in almost all cases.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

lock_ref_sha1_basic(): use raceproof_create_file()Michael Haggerty Fri, 6 Jan 2017 16:22:28 +0000 (17:22 +0100)

lock_ref_sha1_basic(): use raceproof_create_file()

Instead of coding the retry loop inline, use raceproof_create_file() to
make lock acquisition safe against directory creation/deletion races.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

lock_ref_sha1_basic(): inline constantMichael Haggerty Fri, 6 Jan 2017 16:22:27 +0000 (17:22 +0100)

lock_ref_sha1_basic(): inline constant

`lflags` is set a single time then never changed, so just inline it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

raceproof_create_file(): new functionMichael Haggerty Fri, 6 Jan 2017 16:22:26 +0000 (17:22 +0100)

raceproof_create_file(): new function

Add a function that tries to create a file and any containing
directories in a way that is robust against races with other processes
that might be cleaning up empty directories at the same time.

The actual file creation is done by a callback function, which, if it
fails, should set errno to EISDIR or ENOENT according to the convention
of open(). raceproof_create_file() detects such failures, and
respectively either tries to delete empty directories that might be in
the way of the file or tries to create the containing directories. Then
it retries the callback function.

This function is not yet used.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

safe_create_leading_directories(): set errno on SCLD_EXISTSMichael Haggerty Fri, 6 Jan 2017 16:22:25 +0000 (17:22 +0100)

safe_create_leading_directories(): set errno on SCLD_EXISTS

The exit path for SCLD_EXISTS wasn't setting errno, which some callers
use to generate error messages for the user. Fix the problem and
document that the function sets errno correctly to help avoid similar
regressions in the future.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

safe_create_leading_directories_const(): preserve errnoMichael Haggerty Fri, 6 Jan 2017 16:22:24 +0000 (17:22 +0100)

safe_create_leading_directories_const(): preserve errno

Some implementations of free() change errno (even thought they
shouldn't):

https://sourceware.org/bugzilla/show_bug.cgi?id=17924

So preserve the errno from safe_create_leading_directories() across the
call to free().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5505: use "for-each-ref" to test for the non-existence... Michael Haggerty Fri, 6 Jan 2017 16:22:23 +0000 (17:22 +0100)

t5505: use "for-each-ref" to test for the non-existence of references

Instead of looking on the filesystem inside ".git/refs/remotes/origin",
use "git for-each-ref" to check for leftover references under the
remote's old name.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

refname_is_safe(): correct docstringMichael Haggerty Fri, 6 Jan 2017 16:22:22 +0000 (17:22 +0100)

refname_is_safe(): correct docstring

The behavior of refname_is_safe() was changed in

e40f355 "refname_is_safe(): insist that the refname already be normalized", 2016-04-27

without a corresponding update to its docstring. The function is in fact
stricter than documented, because it now insists that the result of
normalizing the part of a refname following "refs/" is identical to that
part of the original refname. Fix the docstring.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

files_rename_ref(): tidy up whitespaceMichael Haggerty Fri, 6 Jan 2017 16:22:21 +0000 (17:22 +0100)

files_rename_ref(): tidy up whitespace

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fourth batch for 2.12Junio C Hamano Tue, 27 Dec 2016 17:17:51 +0000 (09:17 -0800)

Fourth batch for 2.12

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

Merge branch 'jc/lock-report-on-error'Junio C Hamano Tue, 27 Dec 2016 17:17:32 +0000 (09:17 -0800)

Merge branch 'jc/lock-report-on-error'

* jc/lock-report-on-error:
lockfile: move REPORT_ON_ERROR bit elsewhere

lockfile: move REPORT_ON_ERROR bit elsewhereJunio C Hamano Tue, 27 Dec 2016 17:12:09 +0000 (09:12 -0800)

lockfile: move REPORT_ON_ERROR bit elsewhere

There was LOCK_NO_DEREF defined as 2 = 1<<1 with the same value,
which was missed due to a huge comment block. Deconflict by moving
the new one to 4 = 1<<2 for now.

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

Merge branch 'js/mingw-isatty'Junio C Hamano Tue, 27 Dec 2016 08:11:46 +0000 (00:11 -0800)

Merge branch 'js/mingw-isatty'

Update the isatty() emulation for Windows by updating the previous
hack that depended on internals of (older) MSVC runtime.

* js/mingw-isatty:
mingw: replace isatty() hack
mingw: fix colourization on Cygwin pseudo terminals
mingw: adjust is_console() to work with stdin

Merge branch 'ls/p4-lfs'Junio C Hamano Tue, 27 Dec 2016 08:11:46 +0000 (00:11 -0800)

Merge branch 'ls/p4-lfs'

Update GitLFS integration with "git p4".

* ls/p4-lfs:
git-p4: add diff/merge properties to .gitattributes for GitLFS files

Merge branch 'va/i18n-even-more'Junio C Hamano Tue, 27 Dec 2016 08:11:45 +0000 (00:11 -0800)

Merge branch 'va/i18n-even-more'

* va/i18n-even-more:
i18n: fix misconversion in shell scripts

Merge branch 'lt/shortlog-by-committer'Junio C Hamano Tue, 27 Dec 2016 08:11:44 +0000 (00:11 -0800)

Merge branch 'lt/shortlog-by-committer'

"git shortlog" learned "--committer" option to group commits by
committer, instead of author.

* lt/shortlog-by-committer:
t4201: make tests work with and without the MINGW prerequiste
shortlog: test and document --committer option
shortlog: group by committer information

Merge branch 'mk/mingw-winansi-ttyname-termination... Junio C Hamano Tue, 27 Dec 2016 08:11:44 +0000 (00:11 -0800)

Merge branch 'mk/mingw-winansi-ttyname-termination-fix'

A potential but unlikely buffer overflow in Windows port has been
fixed.

* mk/mingw-winansi-ttyname-termination-fix:
mingw: consider that UNICODE_STRING::Length counts bytes

Merge branch 'gv/p4-multi-path-commit-fix'Junio C Hamano Tue, 27 Dec 2016 08:11:43 +0000 (00:11 -0800)

Merge branch 'gv/p4-multi-path-commit-fix'

"git p4" that tracks multile p4 paths imported a single changelist
that touches files in these multiple paths as one commit, followed
by many empty commits. This has been fixed.

* gv/p4-multi-path-commit-fix:
git-p4: fix multi-path changelist empty commits

Merge branch 'jk/difftool-in-subdir'Junio C Hamano Tue, 27 Dec 2016 08:11:43 +0000 (00:11 -0800)

Merge branch 'jk/difftool-in-subdir'

Even though an fix was attempted in Git 2.9.3 days, but running
"git difftool --dir-diff" from a subdirectory never worked. This
has been fixed.

* jk/difftool-in-subdir:
difftool: rename variables for consistency
difftool: chdir as early as possible
difftool: sanitize $workdir as early as possible
difftool: fix dir-diff index creation when in a subdirectory

Merge branch 'ld/p4-compare-dir-vs-symlink'Junio C Hamano Tue, 27 Dec 2016 08:11:42 +0000 (00:11 -0800)

Merge branch 'ld/p4-compare-dir-vs-symlink'

"git p4" misbehaved when swapping a directory and a symbolic link.

* ld/p4-compare-dir-vs-symlink:
git-p4: avoid crash adding symlinked directory

Merge branch 'ls/filter-process'Junio C Hamano Tue, 27 Dec 2016 08:11:42 +0000 (00:11 -0800)

Merge branch 'ls/filter-process'

Doc update.

* ls/filter-process:
t0021: fix flaky test
docs: warn about possible '=' in clean/smudge filter process values

Merge branch 'bw/transport-protocol-policy'Junio C Hamano Tue, 27 Dec 2016 08:11:41 +0000 (00:11 -0800)

Merge branch 'bw/transport-protocol-policy'

Finer-grained control of what protocols are allowed for transports
during clone/fetch/push have been enabled via a new configuration
mechanism.

* bw/transport-protocol-policy:
http: respect protocol.*.allow=user for http-alternates
transport: add from_user parameter to is_transport_allowed
http: create function to get curl allowed protocols
transport: add protocol policy config option
http: always warn if libcurl version is too old
lib-proto-disable: variable name fix

Merge branch 'cp/merge-continue'Junio C Hamano Tue, 27 Dec 2016 08:11:41 +0000 (00:11 -0800)

Merge branch 'cp/merge-continue'

"git merge --continue" has been added as a synonym to "git commit"
to conclude a merge that has stopped due to conflicts.

* cp/merge-continue:
merge: mark usage error strings for translation
merge: ensure '--abort' option takes no arguments
completion: add --continue option for merge
merge: add '--continue' option as a synonym for 'git commit'

Merge branch 'va/i18n-perl-scripts'Junio C Hamano Tue, 27 Dec 2016 08:11:40 +0000 (00:11 -0800)

Merge branch 'va/i18n-perl-scripts'

Porcelain scripts written in Perl are getting internationalized.

* va/i18n-perl-scripts:
i18n: difftool: mark warnings for translation
i18n: send-email: mark composing message for translation
i18n: send-email: mark string with interpolation for translation
i18n: send-email: mark warnings and errors for translation
i18n: send-email: mark strings for translation
i18n: add--interactive: mark status words for translation
i18n: add--interactive: remove %patch_modes entries
i18n: add--interactive: mark edit_hunk_manually message for translation
i18n: add--interactive: i18n of help_patch_cmd
i18n: add--interactive: mark patch prompt for translation
i18n: add--interactive: mark plural strings
i18n: clean.c: match string with git-add--interactive.perl
i18n: add--interactive: mark strings with interpolation for translation
i18n: add--interactive: mark simple here-documents for translation
i18n: add--interactive: mark strings for translation
Git.pm: add subroutines for commenting lines

Merge branch 'sb/submodule-config-cleanup'Junio C Hamano Tue, 27 Dec 2016 08:11:40 +0000 (00:11 -0800)

Merge branch 'sb/submodule-config-cleanup'

Minor code clean-up.

* sb/submodule-config-cleanup:
submodule-config: clarify parsing of null_sha1 element
submodule-config: rename commit_sha1 to treeish_name
submodule config: inline config_from_{name, path}

Merge branch 'jc/push-default-explicit'Junio C Hamano Tue, 27 Dec 2016 08:11:40 +0000 (00:11 -0800)

Merge branch 'jc/push-default-explicit'

A lazy "git push" without refspec did not internally use a fully
specified refspec to perform 'current', 'simple', or 'upstream'
push, causing unnecessary "ambiguous ref" errors.

* jc/push-default-explicit:
push: test pushing ambiguously named branches
push: do not use potentially ambiguous default refspec

mingw: replace isatty() hackJeff Hostetler Thu, 22 Dec 2016 17:09:23 +0000 (18:09 +0100)

mingw: replace isatty() hack

Git for Windows has carried a patch that depended on internals
of MSVC runtime, but it does not work correctly with recent MSVC
runtime. A replacement was written originally for compiling
with VC++. The patch in this message is a backport of that
replacement, and it also fixes the previous attempt to make
isatty() tell that /dev/null is *not* an interactive terminal.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Tested-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: fix colourization on Cygwin pseudo terminalsAlan Davies Thu, 22 Dec 2016 17:09:18 +0000 (18:09 +0100)

mingw: fix colourization on Cygwin pseudo terminals

Git only colours the output and uses pagination if isatty() returns 1.
MSYS2 and Cygwin emulate pseudo terminals via named pipes, meaning that
isatty() returns 0.

f7f90e0f4f (mingw: make isatty() recognize MSYS2's pseudo terminals
(/dev/pty*), 2016-04-27) fixed this for MSYS2 terminals, but not for
Cygwin.

The named pipes that Cygwin and MSYS2 use are very similar. MSYS2 PTY pipes
are called 'msys-*-pty*' and Cygwin uses 'cygwin-*-pty*'. This commit
modifies the existing check to allow both MSYS2 and Cygwin PTY pipes to be
identified as TTYs.

Note that pagination is still broken when running Git for Windows from
within Cygwin, as MSYS2's less.exe is spawned (and does not like to
interact with Cygwin's PTY).

This partially fixes https://github.com/git-for-windows/git/issues/267

Signed-off-by: Alan Davies <alan.n.davies@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: adjust is_console() to work with stdinJohannes Schindelin Thu, 22 Dec 2016 17:08:57 +0000 (18:08 +0100)

mingw: adjust is_console() to work with stdin

When determining whether a handle corresponds to a *real* Win32 Console
(as opposed to, say, a character device such as /dev/null), we use the
GetConsoleOutputBufferInfo() function as a tell-tale.

However, that does not work for *input* handles associated with a
console. Let's just use the GetConsoleMode() function for input handles,
and since it does not work on output handles fall back to the previous
method for those.

This patch prepares for using is_console() instead of my previous
misguided attempt in cbb3f3c9b1 (mingw: intercept isatty() to handle
/dev/null as Git expects it, 2016-12-11) that broke everything on
Windows.

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

Third batch for 2.12Junio C Hamano Wed, 21 Dec 2016 22:57:26 +0000 (14:57 -0800)

Third batch for 2.12

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

Merge branch 'jt/mailinfo-fold-in-body-headers'Junio C Hamano Wed, 21 Dec 2016 22:55:03 +0000 (14:55 -0800)

Merge branch 'jt/mailinfo-fold-in-body-headers'

Fix for NDEBUG builds.

* jt/mailinfo-fold-in-body-headers:
mailinfo.c: move side-effects outside of assert

Merge branch 'jk/index-pack-wo-repo-from-stdin'Junio C Hamano Wed, 21 Dec 2016 22:55:03 +0000 (14:55 -0800)

Merge branch 'jk/index-pack-wo-repo-from-stdin'

"git index-pack --stdin" needs an access to an existing repository,
but "git index-pack file.pack" to generate an .idx file that
corresponds to a packfile does not.

* jk/index-pack-wo-repo-from-stdin:
index-pack: skip collision check when not in repository
t: use nongit() function where applicable
index-pack: complain when --stdin is used outside of a repo
t5000: extract nongit function to test-lib-functions.sh

Merge branch 'jk/parseopt-usage-msg-opt'Junio C Hamano Wed, 21 Dec 2016 22:55:03 +0000 (14:55 -0800)

Merge branch 'jk/parseopt-usage-msg-opt'

The function usage_msg_opt() has been updated to say "fatal:"
before the custom message programs give, when they want to die
with a message about wrong command line options followed by the
standard usage string.

* jk/parseopt-usage-msg-opt:
parse-options: print "fatal:" before usage_msg_opt()

Merge branch 'jk/quote-env-path-list-component'Junio C Hamano Wed, 21 Dec 2016 22:55:02 +0000 (14:55 -0800)

Merge branch 'jk/quote-env-path-list-component'

A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
made it impossible to push into a repository at such a path. This
has been fixed by introducing a quoting mechanism used when
appending such a path to the colon-separated list.

* jk/quote-env-path-list-component:
t5615-alternate-env: double-quotes in file names do not work on Windows
t5547-push-quarantine: run the path separator test on Windows, too
tmp-objdir: quote paths we add to alternates
alternates: accept double-quoted paths

Merge branch 'vs/submodule-clone-nested-submodules... Junio C Hamano Wed, 21 Dec 2016 22:55:02 +0000 (14:55 -0800)

Merge branch 'vs/submodule-clone-nested-submodules-alternates'

"git clone --reference $there --recurse-submodules $super" has been
taught to guess repositories usable as references for submodules of
$super that are embedded in $there while making a clone of the
superproject borrow objects from $there; extend the mechanism to
also allow submodules of these submodules to borrow repositories
embedded in these clones of the submodules embedded in the clone of
the superproject.

* vs/submodule-clone-nested-submodules-alternates:
submodule--helper: set alternateLocation for cloned submodules

Merge branch 'nd/shallow-fixup'Junio C Hamano Wed, 21 Dec 2016 22:55:01 +0000 (14:55 -0800)

Merge branch 'nd/shallow-fixup'

Code cleanup in shallow boundary computation.

* nd/shallow-fixup:
shallow.c: remove useless code
shallow.c: bit manipulation tweaks
shallow.c: avoid theoretical pointer wrap-around
shallow.c: make paint_alloc slightly more robust
shallow.c: stop abusing COMMIT_SLAB_SIZE for paint_info's memory pools
shallow.c: rename fields in paint_info to better express their purposes

Merge branch 'sb/sequencer-abort-safety'Junio C Hamano Wed, 21 Dec 2016 22:55:01 +0000 (14:55 -0800)

Merge branch 'sb/sequencer-abort-safety'

Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
to where cherry-pick started while picking multiple changes, when
the cherry-pick stopped to ask for help from the user, and the user
did "git reset --hard" to a different commit in order to re-attempt
the operation.

* sb/sequencer-abort-safety:
Revert "sequencer: remove useless get_dir() function"
sequencer: remove useless get_dir() function
sequencer: make sequencer abort safer
t3510: test that cherry-pick --abort does not unsafely change HEAD
am: change safe_to_abort()'s not rewinding error into a warning
am: fix filename in safe_to_abort() error message

t5615-alternate-env: double-quotes in file names do... Johannes Sixt Wed, 21 Dec 2016 21:33:43 +0000 (22:33 +0100)

t5615-alternate-env: double-quotes in file names do not work on Windows

Protect a recently added test case with !MINGW.

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

t4201: make tests work with and without the MINGW prere... Junio C Hamano Tue, 20 Dec 2016 18:35:54 +0000 (10:35 -0800)

t4201: make tests work with and without the MINGW prerequiste

Make sure the tests do not depend on the result of the previous
tests. With MINGW prerequisite satisfied, a "reset to original and
rebuild" in an earlier test was skipped, resulting in different
history being tested with this and the next tests.

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

git-p4: add diff/merge properties to .gitattributes... Lars Schneider Sun, 18 Dec 2016 19:01:40 +0000 (20:01 +0100)

git-p4: add diff/merge properties to .gitattributes for GitLFS files

The `git lfs track` command generates a .gitattributes file with diff
and merge properties [1]. Set the same .gitattributes format for files
tracked with GitLFS in git-p4.

[1] https://github.com/git-lfs/git-lfs/blob/v1.5.3/commands/command_track.go#L121

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

i18n: fix misconversion in shell scriptsJunio C Hamano Tue, 20 Dec 2016 17:36:23 +0000 (09:36 -0800)

i18n: fix misconversion in shell scripts

An earlier series that was merged at 2703572b3a ("Merge branch
'va/i18n-even-more'", 2016-07-13) failed to use $(eval_gettext
"string with \$variable interpolation") and instead used gettext in
a few places, and ended up showing the variable names in the
message, e.g.

$ git submodule
fatal: $program_name cannot be used without a working tree.

Catch these mistakes with

$ git grep -n '[^_]gettext .*\\\$'

and fix them all to use eval_gettext instead.

Reported-by: Josh Bleecher Snyder
Acked-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mailinfo.c: move side-effects outside of assertKyle J. McKay Mon, 19 Dec 2016 23:13:00 +0000 (15:13 -0800)

mailinfo.c: move side-effects outside of assert

Since 6b4b013f18 (mailinfo: handle in-body header continuations,
2016-09-20, v2.11.0) mailinfo.c has contained new code with an
assert of the form:

assert(call_a_function(...))

The function in question, check_header, has side effects. This
means that when NDEBUG is defined during a release build the
function call is omitted entirely, the side effects do not
take place and tests (fortunately) start failing.

Since the only time that mi->inbody_header_accum is appended to is
in check_inbody_header, and appending onto a blank
mi->inbody_header_accum always happens when is_inbody_header is
true, this guarantees a prefix that causes check_header to always
return true.

Therefore replace the assert with an if !check_header + DIE
combination to reflect this.

Helped-by: Jonathan Tan <jonathantanmy@google.com>
Helped-by: Jeff King <peff@peff.net>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: consider that UNICODE_STRING::Length counts... Max Kirillov Mon, 19 Dec 2016 21:32:00 +0000 (23:32 +0200)

mingw: consider that UNICODE_STRING::Length counts bytes

UNICODE_STRING::Length field means size of buffer in bytes[1],
despite of buffer itself being array of wchar_t. Because of that
terminating zero is placed twice as far. Fix it.

[1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa380518.aspx

Signed-off-by: Max Kirillov <max@max630.net>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Second batch for 2.12Junio C Hamano Mon, 19 Dec 2016 22:50:31 +0000 (14:50 -0800)

Second batch for 2.12

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

Merge branch 'kh/tutorial-grammofix'Junio C Hamano Mon, 19 Dec 2016 22:45:41 +0000 (14:45 -0800)

Merge branch 'kh/tutorial-grammofix'

* kh/tutorial-grammofix:
doc: omit needless "for"
doc: make the intent of sentence clearer
doc: add verb in front of command to run
doc: add articles (grammar)

Merge branch 'da/mergetool-xxdiff-hotkey'Junio C Hamano Mon, 19 Dec 2016 22:45:41 +0000 (14:45 -0800)

Merge branch 'da/mergetool-xxdiff-hotkey'

The way to specify hotkeys to "xxdiff" that is used by "git
mergetool" has been modernized to match recent versions of xxdiff.

* da/mergetool-xxdiff-hotkey:
mergetools: fix xxdiff hotkeys

Merge branch 'lr/doc-fix-cet'Junio C Hamano Mon, 19 Dec 2016 22:45:41 +0000 (14:45 -0800)

Merge branch 'lr/doc-fix-cet'

* lr/doc-fix-cet:
date-formats.txt: Typo fix

Merge branch 'sb/t3600-cleanup'Junio C Hamano Mon, 19 Dec 2016 22:45:39 +0000 (14:45 -0800)

Merge branch 'sb/t3600-cleanup'

Code cleanup.

* sb/t3600-cleanup:
t3600: slightly modernize style
t3600: remove useless redirect

Merge branch 'jc/pull-rebase-ff'Junio C Hamano Mon, 19 Dec 2016 22:45:38 +0000 (14:45 -0800)

Merge branch 'jc/pull-rebase-ff'

"git pull --rebase", when there is no new commits on our side since
we forked from the upstream, should be able to fast-forward without
invoking "git rebase", but it didn't.

* jc/pull-rebase-ff:
pull: fast-forward "pull --rebase=true"

Merge branch 'ld/p4-worktree'Junio C Hamano Mon, 19 Dec 2016 22:45:37 +0000 (14:45 -0800)

Merge branch 'ld/p4-worktree'

"git p4" didn't interact with the internal of .git directory
correctly in the modern "git-worktree"-enabled world.

* ld/p4-worktree:
git-p4: support git worktrees

Merge branch 'jk/make-tags-find-sources-tweak'Junio C Hamano Mon, 19 Dec 2016 22:45:37 +0000 (14:45 -0800)

Merge branch 'jk/make-tags-find-sources-tweak'

Update the procedure to generate "tags" for developer support.

* jk/make-tags-find-sources-tweak:
Makefile: exclude contrib from FIND_SOURCE_FILES
Makefile: match shell scripts in FIND_SOURCE_FILES
Makefile: exclude test cruft from FIND_SOURCE_FILES
Makefile: reformat FIND_SOURCE_FILES

Merge branch 'js/normalize-path-copy-ceil'Junio C Hamano Mon, 19 Dec 2016 22:45:37 +0000 (14:45 -0800)

Merge branch 'js/normalize-path-copy-ceil'

A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.

* js/normalize-path-copy-ceil:
normalize_path_copy(): fix pushing to //server/share/dir on Windows

Merge branch 'bb/unicode-9.0'Junio C Hamano Mon, 19 Dec 2016 22:45:36 +0000 (14:45 -0800)

Merge branch 'bb/unicode-9.0'

The character width table has been updated to match Unicode 9.0

* bb/unicode-9.0:
unicode_width.h: update the width tables to Unicode 9.0
update_unicode.sh: remove the plane filter
update_unicode.sh: automatically download newer definition files
update_unicode.sh: pin the uniset repo to a known good commit
update_unicode.sh: remove an unnecessary subshell level
update_unicode.sh: move it into contrib/update-unicode

Merge branch 'jk/readme-gmane-is-no-more'Junio C Hamano Mon, 19 Dec 2016 22:45:35 +0000 (14:45 -0800)

Merge branch 'jk/readme-gmane-is-no-more'

* jk/readme-gmane-is-no-more:
README: replace gmane link with public-inbox

Merge branch 'jc/lock-report-on-error'Junio C Hamano Mon, 19 Dec 2016 22:45:35 +0000 (14:45 -0800)

Merge branch 'jc/lock-report-on-error'

Git 2.11 had a minor regression in "merge --ff-only" that competed
with another process that simultanously attempted to update the
index. We used to explain what went wrong with an error message,
but the new code silently failed. The error message has been
resurrected.

* jc/lock-report-on-error:
lockfile: LOCK_REPORT_ON_ERROR
hold_locked_index(): align error handling with hold_lockfile_for_update()
wt-status: implement opportunisitc index update correctly

Merge branch 'jk/xdiff-drop-xdl-fast-hash'Junio C Hamano Mon, 19 Dec 2016 22:45:35 +0000 (14:45 -0800)

Merge branch 'jk/xdiff-drop-xdl-fast-hash'

Retire the "fast hash" that had disastrous performance issues in
some corner cases.

* jk/xdiff-drop-xdl-fast-hash:
xdiff: drop XDL_FAST_HASH

Merge branch 'nd/rebase-forget'Junio C Hamano Mon, 19 Dec 2016 22:45:35 +0000 (14:45 -0800)

Merge branch 'nd/rebase-forget'

"git rebase" learned "--quit" option, which allows a user to
remove the metadata left by an earlier "git rebase" that was
manually aborted without using "git rebase --abort".

* nd/rebase-forget:
rebase: add --quit to cleanup rebase, leave everything else untouched

Merge branch 'jk/trailers-placeholder-in-pretty'Junio C Hamano Mon, 19 Dec 2016 22:45:34 +0000 (14:45 -0800)

Merge branch 'jk/trailers-placeholder-in-pretty'

In addition to %(subject), %(body), "log --pretty=format:..."
learned a new placeholder %(trailers).

* jk/trailers-placeholder-in-pretty:
ref-filter: add support to display trailers as part of contents
pretty: add %(trailers) format for displaying trailers of a commit message

Merge branch 'ak/commit-only-allow-empty'Junio C Hamano Mon, 19 Dec 2016 22:45:34 +0000 (14:45 -0800)

Merge branch 'ak/commit-only-allow-empty'

"git commit --allow-empty --only" (no pathspec) with dirty index
ought to be an acceptable way to create a new commit that does not
change any paths, but it was forbidden, perhaps because nobody
needed it so far.

* ak/commit-only-allow-empty:
commit: remove 'Clever' message for --only --amend
commit: make --only --allow-empty work without paths

Merge branch 'da/difftool-dir-diff-fix'Junio C Hamano Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)

Merge branch 'da/difftool-dir-diff-fix'

"git difftool --dir-diff" had a minor regression when started from
a subdirectory, which has been fixed.

* da/difftool-dir-diff-fix:
difftool: fix dir-diff index creation when in a subdirectory

Merge branch 'jb/diff-no-index-no-abbrev'Junio C Hamano Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)

Merge branch 'jb/diff-no-index-no-abbrev'

"git diff --no-index" did not take "--no-abbrev" option.

* jb/diff-no-index-no-abbrev:
diff: handle --no-abbrev in no-index case

Merge branch 'rj/git-version-gen-do-not-force-abbrev'Junio C Hamano Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)

Merge branch 'rj/git-version-gen-do-not-force-abbrev'

A minor build update.

* rj/git-version-gen-do-not-force-abbrev:
GIT-VERSION-GEN: do not force abbreviation length used by 'describe'

Merge branch 'jk/stash-disable-renames-internally'Junio C Hamano Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)

Merge branch 'jk/stash-disable-renames-internally'

When diff.renames configuration is on (and with Git 2.9 and later,
it is enabled by default, which made it worse), "git stash"
misbehaved if a file is removed and another file with a very
similar content is added.

* jk/stash-disable-renames-internally:
stash: prefer plumbing over git-diff

Merge branch 'jk/http-walker-limit-redirect'Junio C Hamano Mon, 19 Dec 2016 22:45:32 +0000 (14:45 -0800)

Merge branch 'jk/http-walker-limit-redirect'

Update the error messages from the dumb-http client when it fails
to obtain loose objects; we used to give sensible error message
only upon 404 but we now forbid unexpected redirects that needs to
be reported with something sensible.

* jk/http-walker-limit-redirect:
http-walker: complain about non-404 loose object errors

Merge branch 'jk/http-walker-limit-redirect-2.9'Junio C Hamano Mon, 19 Dec 2016 22:45:31 +0000 (14:45 -0800)

Merge branch 'jk/http-walker-limit-redirect-2.9'

Transport with dumb http can be fooled into following foreign URLs
that the end user does not intend to, especially with the server
side redirects and http-alternates mechanism, which can lead to
security issues. Tighten the redirection and make it more obvious
to the end user when it happens.

* jk/http-walker-limit-redirect-2.9:
http: treat http-alternates like redirects
http: make redirects more obvious
remote-curl: rename shadowed options variable
http: always update the base URL for redirects
http: simplify update_url_from_redirect

Merge branch 'nd/for-each-ref-ignore-case'Junio C Hamano Mon, 19 Dec 2016 22:45:31 +0000 (14:45 -0800)

Merge branch 'nd/for-each-ref-ignore-case'

"git branch --list" and friends learned "--ignore-case" option to
optionally sort branches and tags case insensitively.

* nd/for-each-ref-ignore-case:
tag, branch, for-each-ref: add --ignore-case for sorting and filtering

Merge branch 'sb/unpack-trees-grammofix'Junio C Hamano Mon, 19 Dec 2016 22:45:31 +0000 (14:45 -0800)

Merge branch 'sb/unpack-trees-grammofix'

* sb/unpack-trees-grammofix:
unpack-trees: fix grammar for untracked files in directories

Merge branch 'ls/travis-update-p4-and-lfs'Junio C Hamano Mon, 19 Dec 2016 22:45:30 +0000 (14:45 -0800)

Merge branch 'ls/travis-update-p4-and-lfs'

The default Travis-CI configuration specifies newer P4 and GitLFS.

* ls/travis-update-p4-and-lfs:
travis-ci: update P4 to 16.2 and GitLFS to 1.5.2 in Linux build

Merge branch 'ls/t0021-fixup'Junio C Hamano Mon, 19 Dec 2016 22:45:30 +0000 (14:45 -0800)

Merge branch 'ls/t0021-fixup'

* ls/t0021-fixup:
t0021: minor filter process test cleanup

Merge branch 'ah/grammos'Junio C Hamano Mon, 19 Dec 2016 22:45:30 +0000 (14:45 -0800)

Merge branch 'ah/grammos'

A few messages have been fixed for their grammatical errors.

* ah/grammos:
clone,fetch: explain the shallow-clone option a little more clearly
receive-pack: improve English grammar of denyCurrentBranch message
bisect: improve English grammar of not-ancestors message

Merge branch 'jc/renormalize-merge-kill-safer-crlf'Junio C Hamano Mon, 19 Dec 2016 22:45:30 +0000 (14:45 -0800)

Merge branch 'jc/renormalize-merge-kill-safer-crlf'

Fix a corner case in merge-recursive regression that crept in
during 2.10 development cycle.

* jc/renormalize-merge-kill-safer-crlf:
convert: git cherry-pick -Xrenormalize did not work
merge-recursive: handle NULL in add_cacheinfo() correctly
cherry-pick: demonstrate a segmentation fault

Merge branch 'jt/use-trailer-api-in-commands'Junio C Hamano Mon, 19 Dec 2016 22:45:29 +0000 (14:45 -0800)

Merge branch 'jt/use-trailer-api-in-commands'

Commands that operate on a log message and add lines to the trailer
blocks, such as "format-patch -s", "cherry-pick (-x|-s)", and
"commit -s", have been taught to use the logic of and share the
code with "git interpret-trailer".

* jt/use-trailer-api-in-commands:
sequencer: use trailer's trailer layout
trailer: have function to describe trailer layout
trailer: avoid unnecessary splitting on lines
commit: make ignore_non_trailer take buf/len
trailer: be stricter in parsing separators

git-p4: fix multi-path changelist empty commitsGeorge Vanburgh Sat, 17 Dec 2016 22:11:23 +0000 (22:11 +0000)

git-p4: fix multi-path changelist empty commits

When importing from multiple perforce paths - we may attempt to
import a changelist that contains files from two (or more) of these
depot paths. Currently, this results in multiple git commits - one
containing the changes, and the other(s) as empty commit(s). This
behavior was introduced in commit 1f90a64891 ("git-p4: reduce number
of server queries for fetches", 2015-12-19).

Reproduction Steps:

1. Have a git repo cloned from a perforce repo using multiple
depot paths (e.g. //depot/foo and //depot/bar).

2. Submit a single change to the perforce repo that makes changes
in both //depot/foo and //depot/bar.

3. Run "git p4 sync" to sync the change from #2.

Change is synced as multiple commits, one for each depot path that
was affected.

Using a set, instead of a list inside p4ChangesForPaths() ensures
that each changelist is unique to the returned list, and therefore
only a single commit is generated for each changelist.

Reported-by: James Farwell <jfarwell@vmware.com>
Signed-off-by: George Vanburgh <gvanburgh@bloomberg.net>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-p4: avoid crash adding symlinked directoryLuke Diamand Sat, 17 Dec 2016 01:00:40 +0000 (01:00 +0000)

git-p4: avoid crash adding symlinked directory

When submitting to P4, if git-p4 came across a symlinked
directory, then during the generation of the submit diff, it would
try to open it as a normal file and fail.

Spot symlinks (of any type) and output a description of the symlink
instead.

Add a test case.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0021: fix flaky testLars Schneider Sun, 18 Dec 2016 12:37:48 +0000 (13:37 +0100)

t0021: fix flaky test

t0021.15 creates files, adds them to the index, and commits them. All
this usually happens in a test run within the same second and Git cannot
know if the files have been changed between `add` and `commit`. Thus,
Git has to run the clean filter in both operations. Sometimes these
invocations spread over two different seconds and Git can infer that the
files were not changed between `add` and `commit` based on their
modification timestamp. The test would fail as it expects the filter
invocation. Remove this expectation to make the test stable.

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

First batch for 2.12Junio C Hamano Fri, 16 Dec 2016 23:30:13 +0000 (15:30 -0800)

First batch for 2.12

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

Merge branch 'ls/p4-retry-thrice'Junio C Hamano Fri, 16 Dec 2016 23:27:50 +0000 (15:27 -0800)

Merge branch 'ls/p4-retry-thrice'

* ls/p4-retry-thrice:
git-p4: add config to retry p4 commands; retry 3 times by default

Merge branch 'ls/p4-empty-file-on-lfs'Junio C Hamano Fri, 16 Dec 2016 23:27:49 +0000 (15:27 -0800)

Merge branch 'ls/p4-empty-file-on-lfs'

"git p4" LFS support was broken when LFS stores an empty blob.

* ls/p4-empty-file-on-lfs:
git-p4: fix empty file processing for large file system backend GitLFS

Merge branch 'ld/p4-update-shelve'Junio C Hamano Fri, 16 Dec 2016 23:27:49 +0000 (15:27 -0800)

Merge branch 'ld/p4-update-shelve'

* ld/p4-update-shelve:
git-p4: support updating an existing shelved changelist

Merge branch 'vk/p4-submit-shelve'Junio C Hamano Fri, 16 Dec 2016 23:27:49 +0000 (15:27 -0800)

Merge branch 'vk/p4-submit-shelve'

* vk/p4-submit-shelve:
git-p4: allow submit to create shelved changelists.

Merge branch 'da/mergetool-trust-exit-code'Junio C Hamano Fri, 16 Dec 2016 23:27:49 +0000 (15:27 -0800)

Merge branch 'da/mergetool-trust-exit-code'

mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.

* da/mergetool-trust-exit-code:
mergetools/vimdiff: trust Vim's exit code
mergetool: honor mergetool.$tool.trustExitCode for built-in tools

Merge branch 'ak/lazy-prereq-mktemp'Junio C Hamano Fri, 16 Dec 2016 23:27:49 +0000 (15:27 -0800)

Merge branch 'ak/lazy-prereq-mktemp'

Test code clean-up.

* ak/lazy-prereq-mktemp:
t7610: clean up foo.XXXXXX tmpdir

Merge branch 'nd/worktree-list-fixup'Junio C Hamano Fri, 16 Dec 2016 23:27:48 +0000 (15:27 -0800)

Merge branch 'nd/worktree-list-fixup'

The output from "git worktree list" was made in readdir() order,
and was unstable.

* nd/worktree-list-fixup:
worktree list: keep the list sorted
worktree.c: get_worktrees() takes a new flag argument
get_worktrees() must return main worktree as first item even on error
worktree: reorder an if statement
worktree.c: zero new 'struct worktree' on allocation

Merge branch 'nd/qsort-in-merge-recursive'Junio C Hamano Fri, 16 Dec 2016 23:27:48 +0000 (15:27 -0800)

Merge branch 'nd/qsort-in-merge-recursive'

Code simplification.

* nd/qsort-in-merge-recursive:
merge-recursive.c: use string_list_sort instead of qsort

Merge branch 'bw/push-dry-run'Junio C Hamano Fri, 16 Dec 2016 23:27:48 +0000 (15:27 -0800)

Merge branch 'bw/push-dry-run'

"git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

* bw/push-dry-run:
push: fix --dry-run to not push submodules
push: --dry-run updates submodules when --recurse-submodules=on-demand

Merge branch 'hv/submodule-not-yet-pushed-fix'Junio C Hamano Fri, 16 Dec 2016 23:27:47 +0000 (15:27 -0800)

Merge branch 'hv/submodule-not-yet-pushed-fix'

The code in "git push" to compute if any commit being pushed in the
superproject binds a commit in a submodule that hasn't been pushed
out was overly inefficient, making it unusable even for a small
project that does not have any submodule but have a reasonable
number of refs.

* hv/submodule-not-yet-pushed-fix:
submodule_needs_pushing(): explain the behaviour when we cannot answer
batch check whether submodule needs pushing into one call
serialize collection of refs that contain submodule changes
serialize collection of changed submodules