git/git.git
4 years agosequencer: lib'ify checkout_fast_forward()
Johannes Schindelin [Fri, 9 Sep 2016 14:38:00 +0000 (16:38 +0200)]
sequencer: lib'ify checkout_fast_forward()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The only callers of checkout_fast_forward(), cmd_merge(),
pull_into_void(), cmd_pull() and sequencer's fast_forward_to(),
already check the return value and handle it appropriately. With this
step, we make it notice an error return from this function.

So this is a safe conversion to make checkout_fast_forward()
callable from new callers that want it not to die, without changing
the external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify fast_forward_to()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:55 +0000 (16:37 +0200)]
sequencer: lib'ify fast_forward_to()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The only caller of fast_forward_to(), do_pick_commit() already checks
the return value and passes it on to its callers, so its caller must
be already prepared to handle error returns, and with this step, we
make it notice an error return from this function.

So this is a safe conversion to make fast_forward_to() callable from
new callers that want it not to die, without changing the external
behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify save_opts()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:53 +0000 (16:37 +0200)]
sequencer: lib'ify save_opts()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of save_opts(), sequencer_pick_revisions() can already
return errors, so its caller must be already prepared to handle error
returns, and with this step, we make it notice an error return from
this function.

So this is a safe conversion to make save_opts() callable from new
callers that want it not to die, without changing the external
behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify save_todo()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:50 +0000 (16:37 +0200)]
sequencer: lib'ify save_todo()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of save_todo(), pick_commits() can already return
errors, so its caller must be already prepared to handle error
returns, and with this step, we make it notice an error return from
this function.

So this is a safe conversion to make save_todo() callable
from new callers that want it not to die, without changing the
external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify save_head()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:47 +0000 (16:37 +0200)]
sequencer: lib'ify save_head()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of save_head(), sequencer_pick_revisions() can already
return errors, so its caller must be already prepared to handle error
returns, and with this step, we make it notice an error return from
this function.

So this is a safe conversion to make save_head() callable from new
callers that want it not to die, without changing the external
behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify create_seq_dir()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:44 +0000 (16:37 +0200)]
sequencer: lib'ify create_seq_dir()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of create_seq_dir(), sequencer_pick_revisions() can
already return errors, so its caller must be already prepared to
handle error returns, and with this step, we make it notice an error
return from this function.

So this is a safe conversion to make create_seq_dir() callable from
new callers that want it not to die, without changing the external
behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify read_populate_opts()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:27 +0000 (16:37 +0200)]
sequencer: lib'ify read_populate_opts()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of read_populate_opts(), sequencer_continue() can
already return errors, so its caller must be already prepared to
handle error returns, and with this step, we make it notice an error
return from this function.

So this is a safe conversion to make read_populate_opts() callable
from new callers that want it not to die, without changing the
external behaviour of anything existing.

Note that the function git_config_from_file(), called from
read_populate_opts(), can currently still die() (in git_parse_source(),
because the do_config_from_file() function sets die_on_error = 1). We do
not try to fix that here, as it would have larger ramifications on the
config code, and we also assume that we write the opts file
programmatically, hence any parse errors would be bugs.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify read_populate_todo()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:24 +0000 (16:37 +0200)]
sequencer: lib'ify read_populate_todo()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The only caller of read_populate_todo(), sequencer_continue() can
already return errors, so its caller must be already prepared to
handle error returns, and with this step, we make it notice an
error return from this function.

So this is a safe conversion to make read_populate_todo() callable
from new callers that want it not to die, without changing the
external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify read_and_refresh_cache()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:21 +0000 (16:37 +0200)]
sequencer: lib'ify read_and_refresh_cache()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

There are two call sites of read_and_refresh_cache(), one of which is
pick_commits(), whose callers were already prepared to do the right
thing given an "error" return from it by an earlier patch, so the
conversion is safe.

The other one, sequencer_pick_revisions() was also prepared to relay
an error return back to its caller in all remaining cases in an
earlier patch.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify prepare_revs()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:18 +0000 (16:37 +0200)]
sequencer: lib'ify prepare_revs()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only caller of prepare_revs(), walk_revs_populate_todo() was just
taught to return errors, after verifying that its callers are prepared
to handle error returns, and with this step, we make it notice an
error return from this function.

So this is a safe conversion to make prepare_revs() callable from new
callers that want it not to die, without changing the external
behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify walk_revs_populate_todo()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:15 +0000 (16:37 +0200)]
sequencer: lib'ify walk_revs_populate_todo()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The function sequencer_pick_revisions() is the only caller of
walk_revs_populate_todo(), and it already returns errors
appropriately, so its caller must be already prepared to handle error
returns, and with this step, we make it notice an error return from
this function.

So this is a safe conversion to make walk_revs_populate_todo()
callable from new callers that want it not to die, without changing
the external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify do_pick_commit()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:12 +0000 (16:37 +0200)]
sequencer: lib'ify do_pick_commit()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The only two callers of do_pick_commit(), pick_commits() and
single_pick() already check the return value and pass it on to their
callers, so their callers must be already prepared to handle error
returns, and with this step, we make it notice an error return from
this function.

So this is a safe conversion to make do_pick_commit() callable from
new callers that want it not to die, without changing the external
behaviour of anything existing.

While at it, remove the superfluous space.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify do_recursive_merge()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:10 +0000 (16:37 +0200)]
sequencer: lib'ify do_recursive_merge()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The only caller of do_recursive_merge(), do_pick_commit() already
checks the return value and passes it on to its callers, so its caller
must be already prepared to handle error returns, and with this step,
we make it notice an error return from this function.

So this is a safe conversion to make do_recursive_merge() callable
from new callers that want it not to die, without changing the
external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify write_message()
Johannes Schindelin [Fri, 9 Sep 2016 14:37:05 +0000 (16:37 +0200)]
sequencer: lib'ify write_message()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The only caller of write_message(), do_pick_commit() already checks
the return value and passes it on to its callers, so its caller must
be already prepared to handle error returns, and with this step, we
make it notice an error return from this function.

So this is a safe conversion to make write_message() callable
from new callers that want it not to die, without changing the
external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: do not die() in do_pick_commit()
Johannes Schindelin [Fri, 26 Aug 2016 13:47:14 +0000 (15:47 +0200)]
sequencer: do not die() in do_pick_commit()

Instead of dying there, let the caller high up in the callchain
notice the error and handle it (by dying, still).

The eventual caller of do_pick_commit() is sequencer_pick_revisions(),
which already relays a reported error from its helper functions
(including this one), and both of its two callers know how to react to
a negative return correctly.

So this makes do_pick_commit() callable from new callers that want it
not to die, without changing the external behaviour of anything
existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agosequencer: lib'ify sequencer_pick_revisions()
Johannes Schindelin [Fri, 26 Aug 2016 13:47:10 +0000 (15:47 +0200)]
sequencer: lib'ify sequencer_pick_revisions()

Instead of dying there, let the caller high up in the callchain notice
the error and handle it (by dying, still).

The function sequencer_pick_revisions() has only two callers,
cmd_revert() and cmd_cherry_pick(), both of which check the return
value and react appropriately upon errors.

So this is a safe conversion to make sequencer_pick_revisions()
callable from new callers that want it not to die, without changing
the external behaviour of anything existing.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.10-rc2 v2.10.0-rc2
Junio C Hamano [Fri, 26 Aug 2016 20:59:20 +0000 (13:59 -0700)]
Git 2.10-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogitattributes: Document the unified "auto" handling
Torsten Bögershausen [Fri, 26 Aug 2016 20:18:48 +0000 (22:18 +0200)]
gitattributes: Document the unified "auto" handling

Update the documentation about text=auto:
text=auto now follows the core.autocrlf handling when files are not
normalized in the repository.

For a cross platform project recommend the usage of attributes for
line-ending conversions.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoPrepare for 2.10.0-rc2
Junio C Hamano [Thu, 25 Aug 2016 20:56:51 +0000 (13:56 -0700)]
Prepare for 2.10.0-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'ja/i18n'
Junio C Hamano [Thu, 25 Aug 2016 20:55:07 +0000 (13:55 -0700)]
Merge branch 'ja/i18n'

The recent i18n patch we added during this cycle did a bit too much
refactoring of the messages to avoid word-legos; the repetition has
been reduced to help translators.

* ja/i18n:
  i18n: simplify numeric error reporting
  i18n: fix git rebase interactive commit messages
  i18n: fix typos for translation

4 years agoMerge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile'
Junio C Hamano [Thu, 25 Aug 2016 20:55:07 +0000 (13:55 -0700)]
Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile'

The tempfile (hence its user lockfile) API lets the caller to open
a file descriptor to a temporary file, write into it and then
finalize it by first closing the filehandle and then either
removing or renaming the temporary file.  When the process spawns a
subprocess after obtaining the file descriptor, and if the
subprocess has not exited when the attempt to remove or rename is
made, the last step fails on Windows, because the subprocess has
the file descriptor still open.  Open tempfile with O_CLOEXEC flag
to avoid this (on Windows, this is mapped to O_NOINHERIT).

* bw/mingw-avoid-inheriting-fd-to-lockfile:
  mingw: ensure temporary file handles are not inherited by child processes
  t6026-merge-attr: child processes must not inherit index.lock handles

4 years agoMerge branch 'dg/document-git-c-in-git-config-doc'
Junio C Hamano [Thu, 25 Aug 2016 20:55:07 +0000 (13:55 -0700)]
Merge branch 'dg/document-git-c-in-git-config-doc'

The "git -c var[=val] cmd" facility to append a configuration
variable definition at the end of the search order was described in
git(1) manual page, but not in git-config(1), which was more likely
place for people to look for when they ask "can I make a one-shot
override, and if so how?"

* dg/document-git-c-in-git-config-doc:
  doc: mention `git -c` in git-config(1)

4 years agoMerge branch 'js/no-html-bypass-on-windows'
Junio C Hamano [Thu, 25 Aug 2016 20:55:06 +0000 (13:55 -0700)]
Merge branch 'js/no-html-bypass-on-windows'

On Windows, help.browser configuration variable used to be ignored,
which has been corrected.

* js/no-html-bypass-on-windows:
  Revert "display HTML in default browser using Windows' shell API"

4 years agoMerge branch 'hv/doc-commit-reference-style'
Junio C Hamano [Thu, 25 Aug 2016 20:55:05 +0000 (13:55 -0700)]
Merge branch 'hv/doc-commit-reference-style'

A small doc update.

* hv/doc-commit-reference-style:
  SubmittingPatches: document how to reference previous commits

4 years agogit ls-files: text=auto eol=lf is supported in Git 2.10
Torsten Bögershausen [Thu, 25 Aug 2016 15:52:57 +0000 (17:52 +0200)]
git ls-files: text=auto eol=lf is supported in Git 2.10

The man page for `git ls-files --eol` mentions the combination
of text attributes "text=auto eol=lf" or "text=auto eol=crlf" as not
supported yet, but may be in the future.

Now they are supported.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoi18n: simplify numeric error reporting
Jean-Noel Avila [Sun, 21 Aug 2016 14:50:39 +0000 (16:50 +0200)]
i18n: simplify numeric error reporting

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoi18n: fix git rebase interactive commit messages
Jean-Noel Avila [Sun, 21 Aug 2016 14:50:38 +0000 (16:50 +0200)]
i18n: fix git rebase interactive commit messages

For proper i18n, the logic cannot embed english specific processing.

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoi18n: fix typos for translation
Jean-Noel Avila [Sun, 21 Aug 2016 14:50:37 +0000 (16:50 +0200)]
i18n: fix typos for translation

Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodoc: mention `git -c` in git-config(1)
David Glasser [Tue, 23 Aug 2016 17:33:21 +0000 (10:33 -0700)]
doc: mention `git -c` in git-config(1)

Signed-off-by: David Glasser <glasser@davidglasser.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomingw: ensure temporary file handles are not inherited by child processes
Ben Wijen [Mon, 22 Aug 2016 12:47:55 +0000 (14:47 +0200)]
mingw: ensure temporary file handles are not inherited by child processes

When the index is locked and child processes inherit the handle to
said lock and the parent process wants to remove the lock before the
child process exits, on Windows there is a problem: it won't work
because files cannot be deleted if a process holds a handle on them.
The symptom:

    Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
    Should I try again? (y/n)

Spawning child processes with bInheritHandles==FALSE would not work
because no file handles would be inherited, not even the hStdXxx
handles in STARTUPINFO (stdin/stdout/stderr).

Opening every file with O_NOINHERIT does not work, either, as e.g.
git-upload-pack expects inherited file handles.

This leaves us with the only way out: creating temp files with the
O_NOINHERIT flag. This flag is Windows-specific, however. For our
purposes, it is equivalent to O_CLOEXEC (which does not exist on
Windows), so let's just open temporary files with the O_CLOEXEC flag and
map that flag to O_NOINHERIT on Windows.

As Eric Wong pointed out, we need to be careful to handle the case where
the Linux headers used to compile Git support O_CLOEXEC but the Linux
kernel used to run Git does not: it returns an EINVAL.

This fixes the test that we just introduced to demonstrate the problem.

Signed-off-by: Ben Wijen <ben@wijen.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.10-rc1 v2.10.0-rc1
Junio C Hamano [Fri, 19 Aug 2016 22:39:33 +0000 (15:39 -0700)]
Git 2.10-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'lt/gpg-show-long-key-in-signature-verification'
Junio C Hamano [Fri, 19 Aug 2016 22:34:16 +0000 (15:34 -0700)]
Merge branch 'lt/gpg-show-long-key-in-signature-verification'

"git log --show-signature" and other commands that display the
verification status of PGP signature now shows the longer key-id,
as 32-bit key-id is so last century.

* lt/gpg-show-long-key-in-signature-verification:
  gpg-interface: prefer "long" key format output when verifying pgp signatures

4 years agoMerge branch 'ab/hooks'
Junio C Hamano [Fri, 19 Aug 2016 22:34:16 +0000 (15:34 -0700)]
Merge branch 'ab/hooks'

"git rev-parse --git-path hooks/<hook>" learned to take
core.hooksPath configuration variable (introduced during 2.9 cycle)
into account.

* ab/hooks:
  rev-parse: respect core.hooksPath in --git-path

4 years agoMerge branch 'jk/difftool-command-not-found'
Junio C Hamano [Fri, 19 Aug 2016 22:34:15 +0000 (15:34 -0700)]
Merge branch 'jk/difftool-command-not-found'

"git difftool" by default ignores the error exit from the backend
commands it spawns, because often they signal that they found
differences by exiting with a non-zero status code just like "diff"
does; the exit status codes 126 and above however are special in
that they are used to signal that the command is not executable,
does not exist, or killed by a signal.  "git difftool" has been
taught to notice these exit status codes.

* jk/difftool-command-not-found:
  difftool: always honor fatal error exit codes

4 years agoMerge branch 'sb/checkout-explit-detach-no-advice'
Junio C Hamano [Fri, 19 Aug 2016 22:34:15 +0000 (15:34 -0700)]
Merge branch 'sb/checkout-explit-detach-no-advice'

"git checkout --detach <branch>" used to give the same advice
message as that is issued when "git checkout <tag>" (or anything
that is not a branch name) is given, but asking with "--detach" is
an explicit enough sign that the user knows what is going on.  The
advice message has been squelched in this case.

* sb/checkout-explit-detach-no-advice:
  checkout: do not mention detach advice for explicit --detach option

4 years agoMerge branch 'tb/t0027-raciness-fix'
Junio C Hamano [Fri, 19 Aug 2016 22:34:14 +0000 (15:34 -0700)]
Merge branch 'tb/t0027-raciness-fix'

The t0027 test for CRLF conversion was timing dependent and flaky.

* tb/t0027-raciness-fix:
  convert: Correct NNO tests and missing `LF will be replaced by CRLF`

4 years agoMerge branch 'rs/pull-signed-tag'
Junio C Hamano [Fri, 19 Aug 2016 22:34:13 +0000 (15:34 -0700)]
Merge branch 'rs/pull-signed-tag'

When "git merge-recursive" works on history with many criss-cross
merges in "verbose" mode, the names the command assigns to the
virtual merge bases could have overwritten each other by unintended
reuse of the same piece of memory.

* rs/pull-signed-tag:
  commit: use FLEX_ARRAY in struct merge_remote_desc
  merge-recursive: fix verbose output for multiple base trees
  commit: factor out set_merge_remote_desc()
  commit: use xstrdup() in get_merge_parent()

4 years agoRevert "display HTML in default browser using Windows' shell API"
Johannes Schindelin [Fri, 19 Aug 2016 08:39:38 +0000 (10:39 +0200)]
Revert "display HTML in default browser using Windows' shell API"

Since 4804aab (help (Windows): Display HTML in default browser using
Windows' shell API, 2008-07-13), Git for Windows used to call
`ShellExecute()` to launch the default Windows handler for `.html`
files.

The idea was to avoid going through a shell script, for performance
reasons.

However, this change ignores the `help.browser` config setting. Together
with browsing help not being a performance-critical operation, let's
just revert that patch.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot6026-merge-attr: child processes must not inherit index.lock handles
Ben Wijen [Thu, 18 Aug 2016 14:51:12 +0000 (16:51 +0200)]
t6026-merge-attr: child processes must not inherit index.lock handles

On Windows, a file cannot be removed unless all file handles to it have
been released. Hence it is particularly important to close handles when
spawning children (which would probably not even know that they hold on
to those handles).

The example chosen for this test is a custom merge driver that indeed
has no idea that it blocks the deletion of index.lock. The full use case
is a daemon that lives on after the merge, with subsequent invocations
handing off to the daemon, thereby avoiding hefty start-up costs. We
simulate this behavior by simply sleeping one second.

Note that the test only fails on Windows, due to the file locking issue.
Since we have no way to say "expect failure with MINGW, success
otherwise", we simply skip this test on Windows for now.

Signed-off-by: Ben Wijen <ben@wijen.net>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRelNotes: final batch of topics before -rc1
Junio C Hamano [Wed, 17 Aug 2016 21:09:17 +0000 (14:09 -0700)]
RelNotes: final batch of topics before -rc1

4 years agoMerge branch 'js/test-lint-pathname'
Junio C Hamano [Wed, 17 Aug 2016 21:07:48 +0000 (14:07 -0700)]
Merge branch 'js/test-lint-pathname'

The "t/" hierarchy is prone to get an unusual pathname; "make test"
has been taught to make sure they do not contain paths that cannot
be checked out on Windows (and the mechanism can be reusable to
catch pathnames that are not portable to other platforms as need
arises).

* js/test-lint-pathname:
  t/Makefile: ensure that paths are valid on platforms we care

4 years agoMerge branch 'sg/reflog-past-root'
Junio C Hamano [Wed, 17 Aug 2016 21:07:48 +0000 (14:07 -0700)]
Merge branch 'sg/reflog-past-root'

A small test clean-up for a topic introduced in v2.9.1 and later.

* sg/reflog-past-root:
  t1410: remove superfluous 'git reflog' from the 'walk past root' test

4 years agoMerge branch 'rs/mailinfo-lib'
Junio C Hamano [Wed, 17 Aug 2016 21:07:47 +0000 (14:07 -0700)]
Merge branch 'rs/mailinfo-lib'

Small code clean-up.

* rs/mailinfo-lib:
  mailinfo: recycle strbuf in check_header()

4 years agoMerge branch 'jk/tighten-alloc'
Junio C Hamano [Wed, 17 Aug 2016 21:07:46 +0000 (14:07 -0700)]
Merge branch 'jk/tighten-alloc'

Small code and comment clean-up.

* jk/tighten-alloc:
  receive-pack: use FLEX_ALLOC_MEM in queue_command()
  correct FLEXPTR_* example in comment

4 years agoMerge branch 'va/i18n'
Junio C Hamano [Wed, 17 Aug 2016 21:07:45 +0000 (14:07 -0700)]
Merge branch 'va/i18n'

A handful of tests that were broken under gettext-poison build have
been fixed.

* va/i18n:
  t7411: become resilient to GETTEXT_POISON
  t5520: become resilient to GETTEXT_POISON
  t3404: become resilient to GETTEXT_POISON

4 years agogit-multimail: update to release 1.4.0
Matthieu Moy [Wed, 17 Aug 2016 06:41:16 +0000 (08:41 +0200)]
git-multimail: update to release 1.4.0

Changes are described in CHANGES.

Contributions-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Contributions-by: Irfan Adilovic <irfanadilovic@gmail.com>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorelnotes: redo the description of text=auto fix
Junio C Hamano [Wed, 17 Aug 2016 17:18:59 +0000 (10:18 -0700)]
relnotes: redo the description of text=auto fix

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSubmittingPatches: document how to reference previous commits
Heiko Voigt [Thu, 28 Jul 2016 12:55:14 +0000 (14:55 +0200)]
SubmittingPatches: document how to reference previous commits

To reference previous commits people used to put just the
abbreviated SHA-1 into commit messages.  This is what has evolved as
a more stable format for referencing commits.  So lets document it
for everyone to look-up when needed.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'lt/gpg-show-long-key-in-signature-verification-maint' into lt/gpg-show...
Junio C Hamano [Tue, 16 Aug 2016 22:04:13 +0000 (15:04 -0700)]
Merge branch 'lt/gpg-show-long-key-in-signature-verification-maint' into lt/gpg-show-long-key-in-signature-verification

Linus's original was rebased to apply to the maintenance track just
in case binary distributors that are stuck in the past want to take
it to their older codebase.  Let's merge it up to more modern
codebase that has Peff's gpg-interface clean-up topic that appeared
after Git 2.9 was tagged.

* lt/gpg-show-long-key-in-signature-verification-maint:
  gpg-interface: prefer "long" key format output when verifying pgp signatures

4 years agogpg-interface: prefer "long" key format output when verifying pgp signatures
Linus Torvalds [Tue, 16 Aug 2016 20:10:24 +0000 (13:10 -0700)]
gpg-interface: prefer "long" key format output when verifying pgp signatures

Yes, gpg2 already uses the long format by default, but most
distributions seem to still have "gpg" be the older 1.x version due to
compatibility reasons.  And older versions of gpg only show the 32-bit
short ID, which is quite insecure.

This doesn't actually matter for the _verification_ itself: if the
verification passes, the pgp signature is good.  But if you don't
actually have the key yet, and want to fetch it, or you want to check
exactly which key was used for verification and want to check it, we
should specify the key with more precision.

In fact, we should preferentially specify the whole key fingerprint, but
gpg doesn't actually support that.  Which is really quite sad.

Showing the "long" format improves things to at least show 64 bits of
the fingerprint.  That's a lot better, even if it's not perfect.

This change the log format for "git log --show-signature" from

    commit 2376d31787760af598db23bb3982a57419854e5c
    merged tag 'v2.9.3'
    gpg: Signature made Fri 12 Aug 2016 09:17:59 AM PDT using RSA key ID 96AFE6CB
    gpg: Good signature from "Junio C Hamano <gitster@pobox.com>"
    gpg:                 aka "Junio C Hamano <jch@google.com>"
    gpg:                 aka "Junio C Hamano <junio@pobox.com>"
    Merge: 2807cd7b25af e0c1ceafc5be
    Author: Junio C Hamano <gitster@pobox.com>
    Date:   Fri Aug 12 10:02:18 2016 -0700

to

    commit 2376d31787760af598db23bb3982a57419854e5c
    merged tag 'v2.9.3'
    gpg: Signature made Fri 12 Aug 2016 09:17:59 AM PDT
    gpg:                using RSA key B0B5E88696AFE6CB
    gpg: Good signature from "Junio C Hamano <gitster@pobox.com>"
    gpg:                 aka "Junio C Hamano <jch@google.com>"
    gpg:                 aka "Junio C Hamano <junio@pobox.com>"
    Merge: 2807cd7b25af e0c1ceafc5be
    Author: Junio C Hamano <gitster@pobox.com>
    Date:   Fri Aug 12 10:02:18 2016 -0700

(note the longer key ID, but also the reflowing of the text) and also
changes the format in the merge messages when merging a signed
tag.

If you already use gpg2 (either because it's installed by default, or
because you have set your gpg_program configuration to point to gpg2),
that already used the long format, you'll also see a change: it will now
have the same formatting as gpg 1.x, and the verification string looks
something like

    gpg: Signature made Sun 24 Jul 2016 12:24:02 PM PDT
    gpg:                using RSA key 79BE3E4300411886
    gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>" [ultimate]

where it used to be on one line:

    gpg: Signature made Sun 24 Jul 2016 12:24:02 PM PDT using RSA key ID 79BE3E4300411886
    gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>" [ultimate]

so there is certainly a chance this could break some automated scripting.
But the 32-bit key ID's really are broken. Also note that because of the
differences between gpg-1.x and gpg-2.x, hopefully any scripted key ID
parsing code (if such code exists) is already flexible enough to not care.

This was triggered by the fact that the "evil32" project keys ended up
leaking to the public key servers, so now there are 32-bit aliases for
just about every open source developer that you can easily get by
mistake if you use the 32-bit short ID format.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorev-parse: respect core.hooksPath in --git-path
Johannes Schindelin [Tue, 16 Aug 2016 13:14:27 +0000 (15:14 +0200)]
rev-parse: respect core.hooksPath in --git-path

The idea of the --git-path option is not only to avoid having to
prefix paths with the output of --git-dir all the time, but also to
respect overrides for specific common paths inside the .git directory
(e.g. `git rev-parse --git-path objects` will report the value of the
environment variable GIT_OBJECT_DIRECTORY, if set).

When introducing the core.hooksPath setting, we forgot to adjust
git_path() accordingly. This patch fixes that.

While at it, revert the special-casing of core.hooksPath in
run-command.c, as it is now no longer needed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot/Makefile: ensure that paths are valid on platforms we care
Johannes Schindelin [Tue, 16 Aug 2016 15:13:25 +0000 (17:13 +0200)]
t/Makefile: ensure that paths are valid on platforms we care

Some pathnames that are okay on ext4 and on HFS+ cannot be checked
out on Windows. Tests that want to see operations on such paths on
filesystems that support them must do so behind appropriate test
prerequisites, and must not include them in the source tree (instead
they should create them when they run). Otherwise, the source tree
cannot even be checked out.

Make sure that double-quotes, asterisk, colon, greater/less-than,
question-mark, backslash, tab, vertical-bar, as well as any non-ASCII
characters never appear in the pathnames with a new test-lint-* target
as part of a `make test`. To that end, we call `git ls-files` (ensuring
that the paths are quoted properly), relying on the fact that paths
containing non-ASCII characters are quoted within double-quotes.

In case that the source code does not actually live in a Git
repository (e.g. when extracted from a .zip file), or that the `git`
executable cannot be executed, we simply ignore the error for now; In
that case, our trusty Continuous Integration will be the last line of
defense and catch any problematic file name.

Noticed when a topic wanted to add a pathname with '>' in it.  A
check like this will prevent a similar problems from happening in the
future.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodifftool: always honor fatal error exit codes
John Keeping [Mon, 15 Aug 2016 21:54:39 +0000 (22:54 +0100)]
difftool: always honor fatal error exit codes

At the moment difftool's "trust exit code" logic always suppresses the
exit status of the diff utility we invoke.  This is useful because we
don't want to exit just because diff returned "1" because the files
differ, but it's confusing if the shell returns an error because the
selected diff utility is not found.

POSIX specifies 127 as the exit status for "command not found", 126 for
"command found but is not executable" and values greater than 128 if the
command terminated because it received a signal [1] and at least bash
and dash follow this specification, while diff utilities generally use
"1" for the exit status we want to ignore.

Handle any value of 126 or greater as a special value indicating that
some form of fatal error occurred.

[1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocheckout: do not mention detach advice for explicit --detach option
Stefan Beller [Mon, 15 Aug 2016 18:40:21 +0000 (11:40 -0700)]
checkout: do not mention detach advice for explicit --detach option

When a user asked for a detached HEAD specifically with `--detach`,
we do not need to give advice on what a detached HEAD state entails as
we can assume they know what they're getting into as they asked for it.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRelnotes: decribe the updates to the "text=auto" attribute
Junio C Hamano [Mon, 15 Aug 2016 17:20:38 +0000 (10:20 -0700)]
Relnotes: decribe the updates to the "text=auto" attribute

Helped-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot1410: remove superfluous 'git reflog' from the 'walk past root' test
SZEDER Gábor [Sun, 14 Aug 2016 23:28:53 +0000 (01:28 +0200)]
t1410: remove superfluous 'git reflog' from the 'walk past root' test

The test added in 71abeb753fa8 (reflog: continue walking the reflog
past root commits, 2016-06-03) contains an unnecessary 'git reflog'
execution, which was part of my debug/tracing instrumentation that I
somehow didn't manage to remove before submitting.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.10-rc0 v2.10.0-rc0
Junio C Hamano [Sun, 14 Aug 2016 21:48:06 +0000 (14:48 -0700)]
Git 2.10-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoconvert: Correct NNO tests and missing `LF will be replaced by CRLF`
Torsten Bögershausen [Sat, 13 Aug 2016 21:29:27 +0000 (23:29 +0200)]
convert: Correct NNO tests and missing `LF will be replaced by CRLF`

When a non-reversible CRLF conversion is done in "git add",
a warning is printed on stderr (or Git dies, depending on checksafe)

The function commit_chk_wrnNNO() in t0027 was written to test this,
but did the wrong thing: Instead of looking at the warning
from "git add", it looked at the warning from "git commit".

This is racy because "git commit" may not have to do CRLF conversion
at all if it can use the sha1 value from the index (which depends on
whether "add" and "commit" run in a single second).

Correct t0027 and replace the commit for each and every file with a commit
of all files in one go.
The function commit_chk_wrnNNO() should be renamed in a separate commit.

Now that t0027 does the right thing, it detects a bug in covert.c:
This sequence should generate the warning `LF will be replaced by CRLF`,
but does not:

$ git init
$ git config core.autocrlf false
$ printf "Line\r\n" >file
$ git add file
$ git commit -m "commit with CRLF"
$ git config core.autocrlf true
$ printf "Line\n" >file
$ git add file

"git add" calls crlf_to_git() in convert.c, which calls check_safe_crlf().
When has_cr_in_index(path) is true, crlf_to_git() returns too early and
check_safe_crlf() is not called at all.

Factor out the code which determines if "git checkout" converts LF->CRLF
into will_convert_lf_to_crlf().

Update the logic around check_safe_crlf() and "simulate" the possible
LF->CRLF conversion at "git checkout" with help of will_convert_lf_to_crlf().
Thanks to Jeff King <peff@peff.net> for analyzing t0027.

Reported-By: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoreceive-pack: use FLEX_ALLOC_MEM in queue_command()
René Scharfe [Sat, 13 Aug 2016 15:38:56 +0000 (17:38 +0200)]
receive-pack: use FLEX_ALLOC_MEM in queue_command()

Use the macro FLEX_ALLOC_MEM instead of open-coding it.  This shortens
and simplifies the code a bit.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit: use FLEX_ARRAY in struct merge_remote_desc
René Scharfe [Sat, 13 Aug 2016 12:21:27 +0000 (14:21 +0200)]
commit: use FLEX_ARRAY in struct merge_remote_desc

Convert the name member of struct merge_remote_desc to a FLEX_ARRAY and
use FLEX_ALLOC_STR to build the struct.  This halves the number of
memory allocations, saves the storage for a pointer and avoids an
indirection when reading the name.

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>
4 years agomerge-recursive: fix verbose output for multiple base trees
René Scharfe [Sat, 13 Aug 2016 12:16:04 +0000 (14:16 +0200)]
merge-recursive: fix verbose output for multiple base trees

One of the indirect callers of make_virtual_commit() passes the result of
oid_to_hex() as the name, i.e. a pointer to a static buffer.  Since the
function uses that string pointer directly in building a struct
merge_remote_desc, multiple entries can end up sharing the same name
inadvertently.

Fix that by calling set_merge_remote_desc(), which creates a copy of the
string, instead of building the struct by hand.

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>
4 years agocommit: factor out set_merge_remote_desc()
René Scharfe [Sat, 13 Aug 2016 12:11:27 +0000 (14:11 +0200)]
commit: factor out set_merge_remote_desc()

Export a helper function for allocating, populating and attaching a
merge_remote_desc to a commit.

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>
4 years agocommit: use xstrdup() in get_merge_parent()
René Scharfe [Sat, 13 Aug 2016 12:09:49 +0000 (14:09 +0200)]
commit: use xstrdup() in get_merge_parent()

Handle allocation errors for the name member just like we already do
for the struct merge_remote_desc itself.

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>
4 years agomailinfo: recycle strbuf in check_header()
René Scharfe [Sat, 13 Aug 2016 09:05:42 +0000 (11:05 +0200)]
mailinfo: recycle strbuf in check_header()

handle_message_id() duplicates the contents of the strbuf that is passed
to it.  Its only caller proceeds to release the strbuf immediately after
that.  Reuse it instead and make that change of object ownership more
obvious by inlining this short function.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocorrect FLEXPTR_* example in comment
René Scharfe [Sat, 13 Aug 2016 09:01:21 +0000 (11:01 +0200)]
correct FLEXPTR_* example in comment

This section is about "The FLEXPTR_* variants", so use FLEXPTR_ALLOC_STR
in the example.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7411: become resilient to GETTEXT_POISON
Vasco Almeida [Fri, 12 Aug 2016 11:59:02 +0000 (11:59 +0000)]
t7411: become resilient to GETTEXT_POISON

The concerned test greps the error message in git_parse_source() which
contains "bad config line %d in submodule-blob %s".

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot5520: become resilient to GETTEXT_POISON
Vasco Almeida [Fri, 12 Aug 2016 11:59:01 +0000 (11:59 +0000)]
t5520: become resilient to GETTEXT_POISON

Use test_i18ngrep function instead of grep for grepping strings.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot3404: become resilient to GETTEXT_POISON
Vasco Almeida [Fri, 12 Aug 2016 11:59:00 +0000 (11:59 +0000)]
t3404: become resilient to GETTEXT_POISON

The concerned test greps the output of exit_with_patch() in
git-rebase--interactive.sh script.

Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSync with 2.9.3
Junio C Hamano [Fri, 12 Aug 2016 17:02:18 +0000 (10:02 -0700)]
Sync with 2.9.3

* tag 'v2.9.3':
  Git 2.9.3

4 years agoFinal batch before 2.10-rc0
Junio C Hamano [Fri, 12 Aug 2016 17:01:42 +0000 (10:01 -0700)]
Final batch before 2.10-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'kw/patch-ids-optim'
Junio C Hamano [Fri, 12 Aug 2016 16:47:39 +0000 (09:47 -0700)]
Merge branch 'kw/patch-ids-optim'

When "git rebase" tries to compare set of changes on the updated
upstream and our own branch, it computes patch-id for all of these
changes and attempts to find matches. This has been optimized by
lazily computing the full patch-id (which is expensive) to be
compared only for changes that touch the same set of paths.

* kw/patch-ids-optim:
  rebase: avoid computing unnecessary patch IDs
  patch-ids: add flag to create the diff patch id using header only data
  patch-ids: replace the seen indicator with a commit pointer
  patch-ids: stop using a hand-rolled hashmap implementation

4 years agoMerge branch 'ew/http-backend-batch-headers'
Junio C Hamano [Fri, 12 Aug 2016 16:47:38 +0000 (09:47 -0700)]
Merge branch 'ew/http-backend-batch-headers'

The http-backend (the server-side component of smart-http
transport) used to trickle the HTTP header one at a time.  Now
these write(2)s are batched.

* ew/http-backend-batch-headers:
  http-backend: buffer headers before sending

4 years agoMerge branch 'va/i18n'
Junio C Hamano [Fri, 12 Aug 2016 16:47:38 +0000 (09:47 -0700)]
Merge branch 'va/i18n'

* va/i18n:
  i18n: git-stash: mark messages for translation
  i18n: archive: mark errors for translation
  i18n: setup: mark error messages for translation

4 years agoMerge branch 'vs/typofix'
Junio C Hamano [Fri, 12 Aug 2016 16:47:37 +0000 (09:47 -0700)]
Merge branch 'vs/typofix'

* vs/typofix:
  Spelling fixes

4 years agoMerge branch 'js/mv-dir-to-new-directory'
Junio C Hamano [Fri, 12 Aug 2016 16:47:37 +0000 (09:47 -0700)]
Merge branch 'js/mv-dir-to-new-directory'

"git mv dir non-existing-dir/" did not work in some environments
the same way as existing mainstream platforms.  The code now moves
"dir" to "non-existing-dir", without relying on rename("A", "B/")
that strips the trailing slash of '/'.

* js/mv-dir-to-new-directory:
  git mv: do not keep slash in `git mv dir non-existing-dir/`

4 years agoMerge branch 'rs/use-strbuf-add-unique-abbrev'
Junio C Hamano [Fri, 12 Aug 2016 16:47:37 +0000 (09:47 -0700)]
Merge branch 'rs/use-strbuf-add-unique-abbrev'

A small code clean-up.

* rs/use-strbuf-add-unique-abbrev:
  use strbuf_add_unique_abbrev() for adding short hashes

4 years agoMerge branch 'jk/big-and-future-archive-tar'
Junio C Hamano [Fri, 12 Aug 2016 16:47:37 +0000 (09:47 -0700)]
Merge branch 'jk/big-and-future-archive-tar'

A small code clean-up.

* jk/big-and-future-archive-tar:
  archive-tar: make write_extended_header() void

4 years agoMerge branch 'jk/trace-fixup'
Junio C Hamano [Fri, 12 Aug 2016 16:47:36 +0000 (09:47 -0700)]
Merge branch 'jk/trace-fixup'

Various small fixups to the "GIT_TRACE" facility.

* jk/trace-fixup:
  trace: do not fall back to stderr
  write_or_die: drop write_or_whine_pipe()
  trace: disable key after write error
  trace: correct variable name in write() error message
  trace: cosmetic fixes for error messages
  trace: use warning() for printing trace errors
  trace: stop using write_or_whine_pipe()
  trace: handle NULL argument in trace_disable()

4 years agoMerge branch 'rs/merge-recursive-string-list-init'
Junio C Hamano [Fri, 12 Aug 2016 16:47:36 +0000 (09:47 -0700)]
Merge branch 'rs/merge-recursive-string-list-init'

A small code clean-up.

* rs/merge-recursive-string-list-init:
  merge-recursive: use STRING_LIST_INIT_NODUP

4 years agoMerge branch 'rs/merge-add-strategies-simplification'
Junio C Hamano [Fri, 12 Aug 2016 16:47:36 +0000 (09:47 -0700)]
Merge branch 'rs/merge-add-strategies-simplification'

A small code clean-up.

* rs/merge-add-strategies-simplification:
  merge: use string_list_split() in add_strategies()

4 years agoMerge branch 'rs/child-process-init'
Junio C Hamano [Fri, 12 Aug 2016 16:47:36 +0000 (09:47 -0700)]
Merge branch 'rs/child-process-init'

A small code clean-up.

* rs/child-process-init:
  use CHILD_PROCESS_INIT to initialize automatic variables

4 years agoMerge branch 'js/import-tars-hardlinks'
Junio C Hamano [Fri, 12 Aug 2016 16:47:36 +0000 (09:47 -0700)]
Merge branch 'js/import-tars-hardlinks'

"import-tars" fast-import script (in contrib/) used to ignore a
hardlink target and replaced it with an empty file, which has been
corrected to record the same blob as the other file the hardlink is
shared with.

* js/import-tars-hardlinks:
  import-tars: support hard links

4 years agoMerge branch 'ms/document-pack-window-memory-is-per-thread'
Junio C Hamano [Fri, 12 Aug 2016 16:47:35 +0000 (09:47 -0700)]
Merge branch 'ms/document-pack-window-memory-is-per-thread'

* ms/document-pack-window-memory-is-per-thread:
  document git-repack interaction of pack.threads and pack.windowMemory

4 years agoMerge branch 'vs/completion-branch-fully-spelled-d-m-r'
Junio C Hamano [Fri, 12 Aug 2016 16:47:35 +0000 (09:47 -0700)]
Merge branch 'vs/completion-branch-fully-spelled-d-m-r'

* vs/completion-branch-fully-spelled-d-m-r:
  completion: complete --delete, --move, and --remotes for git branch

4 years agoMerge branch 'sb/submodule-clone-retry'
Junio C Hamano [Fri, 12 Aug 2016 16:47:34 +0000 (09:47 -0700)]
Merge branch 'sb/submodule-clone-retry'

Fix-up to an error codepath in a topic already in 'master'.

* sb/submodule-clone-retry:
  submodule--helper: use parallel processor correctly

4 years agoGit 2.9.3 v2.9.3
Junio C Hamano [Fri, 12 Aug 2016 16:17:51 +0000 (09:17 -0700)]
Git 2.9.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'jk/difftool-in-subdir' into maint
Junio C Hamano [Fri, 12 Aug 2016 16:16:57 +0000 (09:16 -0700)]
Merge branch 'jk/difftool-in-subdir' into maint

"git difftool <paths>..." started in a subdirectory failed to
interpret the paths relative to that directory, which has been
fixed.

* jk/difftool-in-subdir:
  difftool: use Git::* functions instead of passing around state
  difftool: avoid $GIT_DIR and $GIT_WORK_TREE
  difftool: fix argument handling in subdirs

4 years agoMerge branch 'jk/reset-ident-time-per-commit' into maint
Junio C Hamano [Fri, 12 Aug 2016 16:16:56 +0000 (09:16 -0700)]
Merge branch 'jk/reset-ident-time-per-commit' into maint

Not-so-recent rewrite of "git am" that started making internal
calls into the commit machinery had an unintended regression, in
that no matter how many seconds it took to apply many patches, the
resulting committer timestamp for the resulting commits were all
the same.

* jk/reset-ident-time-per-commit:
  am: reset cached ident date for each patch

4 years agorebase: avoid computing unnecessary patch IDs
Kevin Willford [Fri, 29 Jul 2016 16:19:20 +0000 (12:19 -0400)]
rebase: avoid computing unnecessary patch IDs

The `rebase` family of Git commands avoid applying patches that were
already integrated upstream. They do that by using the revision walking
option that computes the patch IDs of the two sides of the rebase
(local-only patches vs upstream-only ones) and skipping those local
patches whose patch ID matches one of the upstream ones.

In many cases, this causes unnecessary churn, as already the set of
paths touched by a given commit would suffice to determine that an
upstream patch has no local equivalent.

This hurts performance in particular when there are a lot of upstream
patches, and/or large ones.

Therefore, let's introduce the concept of a "diff-header-only" patch ID,
compare those first, and only evaluate the "full" patch ID lazily.

Please note that in contrast to the "full" patch IDs, those
"diff-header-only" patch IDs are prone to collide with one another, as
adjacent commits frequently touch the very same files. Hence we now
have to be careful to allow multiple hash entries with the same hash.
We accomplish that by using the hashmap_add() function that does not even
test for hash collisions.  This also allows us to evaluate the full patch ID
lazily, i.e. only when we found commits with matching diff-header-only
patch IDs.

We add a performance test that demonstrates ~1-6% improvement.  In
practice this will depend on various factors such as how many upstream
changes and how big those changes are along with whether file system
caches are cold or warm.  As Git's test suite has no way of catching
performance regressions, we also add a regression test that verifies
that the full patch ID computation is skipped when the diff-header-only
computation suffices.

Signed-off-by: Kevin Willford <kcwillford@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSpelling fixes
Ville Skyttä [Tue, 9 Aug 2016 08:53:38 +0000 (11:53 +0300)]
Spelling fixes

    <BAD>                     <CORRECTED>
    accidently                accidentally
    commited                  committed
    dependancy                dependency
    emtpy                     empty
    existance                 existence
    explicitely               explicitly
    git-upload-achive         git-upload-archive
    hierachy                  hierarchy
    indegee                   indegree
    intial                    initial
    mulitple                  multiple
    non-existant              non-existent
    precendence.              precedence.
    priviledged               privileged
    programatically           programmatically
    psuedo-binary             pseudo-binary
    soemwhere                 somewhere
    successfull               successful
    transfering               transferring
    uncommited                uncommitted
    unkown                    unknown
    usefull                   useful
    writting                  writing

Signed-off-by: Ville Skyttä <ville.skytta@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoSync with maint
Junio C Hamano [Wed, 10 Aug 2016 19:38:02 +0000 (12:38 -0700)]
Sync with maint

* maint:
  Yet another batch for 2.9.3

4 years agoTwelfth batch for 2.10
Junio C Hamano [Wed, 10 Aug 2016 19:35:40 +0000 (12:35 -0700)]
Twelfth batch for 2.10

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'sb/submodule-update-dot-branch'
Junio C Hamano [Wed, 10 Aug 2016 19:33:20 +0000 (12:33 -0700)]
Merge branch 'sb/submodule-update-dot-branch'

A few updates to "git submodule update".

Use of "| wc -l" break with BSD variant of 'wc'.

* sb/submodule-update-dot-branch:
  t7406: fix breakage on OSX
  submodule update: allow '.' for branch value
  submodule--helper: add remote-branch helper
  submodule-config: keep configured branch around
  submodule--helper: fix usage string for relative-path
  submodule update: narrow scope of local variable
  submodule update: respect depth in subsequent fetches
  t7406: future proof tests with hard coded depth

4 years agoMerge branch 'js/am-3-merge-recursive-direct'
Junio C Hamano [Wed, 10 Aug 2016 19:33:20 +0000 (12:33 -0700)]
Merge branch 'js/am-3-merge-recursive-direct'

"git am -3" calls "git merge-recursive" when it needs to fall back
to a three-way merge; this call has been turned into an internal
subroutine call instead of spawning a separate subprocess.

* js/am-3-merge-recursive-direct:
  merge-recursive: flush output buffer even when erroring out
  merge_trees(): ensure that the callers release output buffer
  merge-recursive: offer an option to retain the output in 'obuf'
  merge-recursive: write the commit title in one go
  merge-recursive: flush output buffer before printing error messages
  am -3: use merge_recursive() directly again
  merge-recursive: switch to returning errors instead of dying
  merge-recursive: handle return values indicating errors
  merge-recursive: allow write_tree_from_memory() to error out
  merge-recursive: avoid returning a wholesale struct
  merge_recursive: abort properly upon errors
  prepare the builtins for a libified merge_recursive()
  merge-recursive: clarify code in was_tracked()
  die(_("BUG")): avoid translating bug messages
  die("bug"): report bugs consistently
  t5520: verify that `pull --rebase` shows the helpful advice when failing

4 years agoMerge branch 'js/commit-slab-decl-fix'
Junio C Hamano [Wed, 10 Aug 2016 19:33:20 +0000 (12:33 -0700)]
Merge branch 'js/commit-slab-decl-fix'

* js/commit-slab-decl-fix:
  commit-slab.h: avoid duplicated global static variables
  config.c: avoid duplicated global static variables

4 years agoMerge branch 'jk/completion-diff-submodule'
Junio C Hamano [Wed, 10 Aug 2016 19:33:19 +0000 (12:33 -0700)]
Merge branch 'jk/completion-diff-submodule'

* jk/completion-diff-submodule:
  completion: add completion for --submodule=* diff option

4 years agoMerge branch 'cc/mailmap-tuxfamily'
Junio C Hamano [Wed, 10 Aug 2016 19:33:18 +0000 (12:33 -0700)]
Merge branch 'cc/mailmap-tuxfamily'

* cc/mailmap-tuxfamily:
  .mailmap: use Christian Couder's Tuxfamily address

4 years agoMerge branch 'jt/format-patch-from-config'
Junio C Hamano [Wed, 10 Aug 2016 19:33:18 +0000 (12:33 -0700)]
Merge branch 'jt/format-patch-from-config'

"git format-patch" learned format.from configuration variable to
specify the default settings for its "--from" option.

* jt/format-patch-from-config:
  format-patch: format.from gives the default for --from

4 years agoMerge branch 'jk/push-force-with-lease-creation'
Junio C Hamano [Wed, 10 Aug 2016 19:33:18 +0000 (12:33 -0700)]
Merge branch 'jk/push-force-with-lease-creation'

"git push --force-with-lease" already had enough logic to allow
ensuring that such a push results in creation of a ref (i.e. the
receiving end did not have another push from sideways that would be
discarded by our force-pushing), but didn't expose this possibility
to the users.  It does so now.

* jk/push-force-with-lease-creation:
  t5533: make it pass on case-sensitive filesystems
  push: allow pushing new branches with --force-with-lease
  push: add shorthand for --force-with-lease branch creation
  Documentation/git-push: fix placeholder formatting

4 years agoMerge branch 'jk/reset-ident-time-per-commit'
Junio C Hamano [Wed, 10 Aug 2016 19:33:17 +0000 (12:33 -0700)]
Merge branch 'jk/reset-ident-time-per-commit'

Not-so-recent rewrite of "git am" that started making internal
calls into the commit machinery had an unintended regression, in
that no matter how many seconds it took to apply many patches, the
resulting committer timestamp for the resulting commits were all
the same.

* jk/reset-ident-time-per-commit:
  am: reset cached ident date for each patch