gitweb.git
ssh: 'auto' variant to select between 'ssh' and 'simple'Jonathan Nieder Mon, 20 Nov 2017 21:30:04 +0000 (13:30 -0800)

ssh: 'auto' variant to select between 'ssh' and 'simple'

Android's "repo" tool is a tool for managing a large codebase
consisting of multiple smaller repositories, similar to Git's
submodule feature. Starting with Git 94b8ae5a (ssh: introduce a
'simple' ssh variant, 2017-10-16), users noticed that it stopped
handling the port in ssh:// URLs.

The cause: when it encounters ssh:// URLs, repo pre-connects to the
server and sets GIT_SSH to a helper ".repo/repo/git_ssh" that reuses
that connection. Before 94b8ae5a, the helper was assumed to support
OpenSSH options for lack of a better guess and got passed a -p option
to set the port. After that patch, it uses the new default of a
simple helper that does not accept an option to set the port.

The next release of "repo" will set GIT_SSH_VARIANT to "ssh" to avoid
that. But users of old versions and of other similar GIT_SSH
implementations would not get the benefit of that fix.

So update the default to use OpenSSH options again, with a twist. As
observed in 94b8ae5a, we cannot assume that $GIT_SSH always handles
OpenSSH options: common helpers such as travis-ci's dpl[*] are
configured using GIT_SSH and do not accept OpenSSH options. So make
the default a new variant "auto", with the following behavior:

1. First, check for a recognized basename, like today.

2. If the basename is not recognized, check whether $GIT_SSH supports
OpenSSH options by running

$GIT_SSH -G <options> <host>

This returns status 0 and prints configuration in OpenSSH if it
recognizes all <options> and returns status 255 if it encounters
an unrecognized option. A wrapper script like

exec ssh -- "$@"

would fail with

ssh: Could not resolve hostname -g: Name or service not known

, correctly reflecting that it does not support OpenSSH options.
The command is run with stdin, stdout, and stderr redirected to
/dev/null so even a command that expects a terminal would exit
immediately.

3. Based on the result from step (2), behave like "ssh" (if it
succeeded) or "simple" (if it failed).

This way, the default ssh variant for unrecognized commands can handle
both the repo and dpl cases as intended.

This autodetection has been running on Google workstations since
2017-10-23 with no reported negative effects.

[*] https://github.com/travis-ci/dpl/blob/6c3fddfda1f2a85944c544446b068bac0a77c049/lib/dpl/provider.rb#L215

Reported-by: William Yan <wyan@google.com>
Improved-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split ssh option computation to its own functionJonathan Nieder Mon, 20 Nov 2017 21:26:19 +0000 (13:26 -0800)

connect: split ssh option computation to its own function

This puts the determination of options to pass to each ssh variant
(see ssh.variant in git-config(1)) in one place.

A follow-up patch will use this in an initial dry run to detect which
variant to use when the ssh command is ambiguous.

No functional change intended yet.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split ssh command line options into separate... Jonathan Nieder Mon, 20 Nov 2017 22:19:43 +0000 (14:19 -0800)

connect: split ssh command line options into separate function

The git_connect function is growing long. Split the portion that
discovers an ssh command and options it accepts before the service
name and path to a separate function to make it easier to read.

No functional change intended.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: split git:// setup into a separate functionJonathan Nieder Mon, 20 Nov 2017 21:23:27 +0000 (13:23 -0800)

connect: split git:// setup into a separate function

The git_connect function is growing long. Split the
PROTO_GIT-specific portion to a separate function to make it easier to
read.

No functional change intended.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: move no_fork fallback to git_tcp_connectJonathan Nieder Mon, 20 Nov 2017 21:22:54 +0000 (13:22 -0800)

connect: move no_fork fallback to git_tcp_connect

git_connect has the structure

struct child_process *conn = &no_fork;

...
switch (protocol) {
case PROTO_GIT:
if (git_use_proxy(hostandport))
conn = git_proxy_connect(fd, hostandport);
else
git_tcp_connect(fd, hostandport, flags);
...
break;
case PROTO_SSH:
conn = xmalloc(sizeof(*conn));
child_process_init(conn);
argv_array_push(&conn->args, ssh);
...
break;
...
return conn;

In all cases except the git_tcp_connect case, conn is explicitly
assigned a value. Make the code clearer by explicitly assigning
'conn = &no_fork' in the tcp case and eliminating the default so the
compiler can ensure conn is always correctly assigned.

Noticed-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

ssh test: make copy_ssh_wrapper_as clean up after itselfJonathan Nieder Tue, 21 Nov 2017 01:49:19 +0000 (17:49 -0800)

ssh test: make copy_ssh_wrapper_as clean up after itself

Simplify by not allowing the copied ssh wrapper to persist between
tests. This way, tests can be safely reordered, added, and removed
with less fear of hidden side effects.

This also avoids having to call setup_ssh_wrapper to restore the value
of GIT_SSH after this battery of tests, since it means each test will
restore it individually.

Noticed because on Windows, if `uplink.exe` exists, the MSYS2 Bash
will overwrite that when redirecting via `>uplink`. A proposed test
wrote a script to 'uplink' after a previous test created uplink.exe
using copy_ssh_wrapper_as, so the script written with '>uplink' had
the wrong filename and failed.

Reported-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation: document Extra ParametersJonathan Tan Mon, 16 Oct 2017 17:55:32 +0000 (10:55 -0700)

Documentation: document Extra Parameters

Document the server support for Extra Parameters, additional information
that the client can send in its first message to the server during a
Git client-server interaction.

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

ssh: introduce a 'simple' ssh variantBrandon Williams Mon, 16 Oct 2017 17:55:31 +0000 (10:55 -0700)

ssh: introduce a 'simple' ssh variant

When using the 'ssh' transport, the '-o' option is used to specify an
environment variable which should be set on the remote end. This allows
git to send additional information when contacting the server,
requesting the use of a different protocol version via the
'GIT_PROTOCOL' environment variable like so: "-o SendEnv=GIT_PROTOCOL".

Unfortunately not all ssh variants support the sending of environment
variables to the remote end. To account for this, only use the '-o'
option for ssh variants which are OpenSSH compliant. This is done by
checking that the basename of the ssh command is 'ssh' or the ssh
variant is overridden to be 'ssh' (via the ssh.variant config).

Other options like '-p' and '-P', which are used to specify a specific
port to use, or '-4' and '-6', which are used to indicate that IPV4 or
IPV6 addresses should be used, may also not be supported by all ssh
variants.

Currently if an ssh command's basename wasn't 'plink' or
'tortoiseplink' git assumes that the command is an OpenSSH variant.
Since user configured ssh commands may not be OpenSSH compliant, tighten
this constraint and assume a variant of 'simple' if the basename of the
command doesn't match the variants known to git. The new ssh variant
'simple' will only have the host and command to execute ([username@]host
command) passed as parameters to the ssh command.

Update the Documentation to better reflect the command-line options sent
to ssh commands based on their variant.

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

i5700: add interop test for protocol transitionBrandon Williams Mon, 16 Oct 2017 17:55:30 +0000 (10:55 -0700)

i5700: add interop test for protocol transition

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

http: tell server that the client understands v1Brandon Williams Mon, 16 Oct 2017 17:55:29 +0000 (10:55 -0700)

http: tell server that the client understands v1

Tell a server that protocol v1 can be used by sending the http header
'Git-Protocol' with 'version=1' indicating this.

Also teach the apache http server to pass through the 'Git-Protocol'
header as an environment variable 'GIT_PROTOCOL'.

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

connect: tell server that the client understands v1Brandon Williams Mon, 16 Oct 2017 17:55:28 +0000 (10:55 -0700)

connect: tell server that the client understands v1

Teach the connection logic to tell a serve that it understands protocol
v1. This is done in 2 different ways for the builtin transports, both
of which ultimately set 'GIT_PROTOCOL' to 'version=1' on the server.

1. git://
A normal request to git-daemon is structured as
"command path/to/repo\0host=..\0" and due to a bug introduced in
49ba83fb6 (Add virtualization support to git-daemon, 2006-09-19) we
aren't able to place any extra arguments (separated by NULs) besides
the host otherwise the parsing of those arguments would enter an
infinite loop. This bug was fixed in 73bb33a94 (daemon: Strictly
parse the "extra arg" part of the command, 2009-06-04) but a check
was put in place to disallow extra arguments so that new clients
wouldn't trigger this bug in older servers.

In order to get around this limitation git-daemon was taught to
recognize additional request arguments hidden behind a second
NUL byte. Requests can then be structured like:
"command path/to/repo\0host=..\0\0version=1\0key=value\0".
git-daemon can then parse out the extra arguments and set
'GIT_PROTOCOL' accordingly.

By placing these extra arguments behind a second NUL byte we can
skirt around both the infinite loop bug in 49ba83fb6 (Add
virtualization support to git-daemon, 2006-09-19) as well as the
explicit disallowing of extra arguments introduced in 73bb33a94
(daemon: Strictly parse the "extra arg" part of the command,
2009-06-04) because both of these versions of git-daemon check for a
single NUL byte after the host argument before terminating the
argument parsing.

2. ssh://, file://
Set 'GIT_PROTOCOL' environment variable with the desired protocol
version. With the file:// transport, 'GIT_PROTOCOL' can be set
explicitly in the locally running git-upload-pack or git-receive-pack
processes. With the ssh:// transport and OpenSSH compliant ssh
programs, 'GIT_PROTOCOL' can be sent across ssh by using '-o
SendEnv=GIT_PROTOCOL' and having the server whitelist this
environment variable.

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

connect: teach client to recognize v1 server responseBrandon Williams Mon, 16 Oct 2017 17:55:27 +0000 (10:55 -0700)

connect: teach client to recognize v1 server response

Teach a client to recognize that a server understands protocol v1 by
looking at the first pkt-line the server sends in response. This is
done by looking for the response "version 1" send by upload-pack or
receive-pack.

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

upload-pack, receive-pack: introduce protocol version 1Brandon Williams Mon, 16 Oct 2017 17:55:26 +0000 (10:55 -0700)

upload-pack, receive-pack: introduce protocol version 1

Teach upload-pack and receive-pack to understand and respond using
protocol version 1, if requested.

Protocol version 1 is simply the original and current protocol (what I'm
calling version 0) with the addition of a single packet line, which
precedes the ref advertisement, indicating the protocol version being
spoken.

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

daemon: recognize hidden request argumentsBrandon Williams Mon, 16 Oct 2017 17:55:25 +0000 (10:55 -0700)

daemon: recognize hidden request arguments

A normal request to git-daemon is structured as
"command path/to/repo\0host=..\0" and due to a bug introduced in
49ba83fb6 (Add virtualization support to git-daemon, 2006-09-19) we
aren't able to place any extra arguments (separated by NULs) besides the
host otherwise the parsing of those arguments would enter an infinite
loop. This bug was fixed in 73bb33a94 (daemon: Strictly parse the
"extra arg" part of the command, 2009-06-04) but a check was put in
place to disallow extra arguments so that new clients wouldn't trigger
this bug in older servers.

In order to get around this limitation teach git-daemon to recognize
additional request arguments hidden behind a second NUL byte. Requests
can then be structured like:
"command path/to/repo\0host=..\0\0version=1\0key=value\0". git-daemon
can then parse out the extra arguments and set 'GIT_PROTOCOL'
accordingly.

By placing these extra arguments behind a second NUL byte we can skirt
around both the infinite loop bug in 49ba83fb6 (Add virtualization
support to git-daemon, 2006-09-19) as well as the explicit disallowing
of extra arguments introduced in 73bb33a94 (daemon: Strictly parse the
"extra arg" part of the command, 2009-06-04) because both of these
versions of git-daemon check for a single NUL byte after the host
argument before terminating the argument parsing.

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

protocol: introduce protocol extension mechanismsBrandon Williams Mon, 16 Oct 2017 17:55:24 +0000 (10:55 -0700)

protocol: introduce protocol extension mechanisms

Create protocol.{c,h} and provide functions which future servers and
clients can use to determine which protocol to use or is being used.

Also introduce the 'GIT_PROTOCOL' environment variable which will be
used to communicate a colon separated list of keys with optional values
to a server. Unknown keys and values must be tolerated. This mechanism
is used to communicate which version of the wire protocol a client would
like to use with a server.

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

pkt-line: add packet_write functionBrandon Williams Mon, 16 Oct 2017 17:55:23 +0000 (10:55 -0700)

pkt-line: add packet_write function

Add a function which can be used to write the contents of an arbitrary
buffer. This makes it easy to build up data in a buffer before writing
the packet instead of formatting the entire contents of the packet using
'packet_write_fmt()'.

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

connect: in ref advertisement, shallows are lastJonathan Tan Tue, 26 Sep 2017 23:56:19 +0000 (16:56 -0700)

connect: in ref advertisement, shallows are last

Currently, get_remote_heads() parses the ref advertisement in one loop,
allowing refs and shallow lines to intersperse, despite this not being
allowed by the specification. Refactor get_remote_heads() to use two
loops instead, enforcing that refs come first, and then shallows.

This also makes it easier to teach get_remote_heads() to interpret other
lines in the ref advertisement, which will be done in a subsequent
patch.

As part of this change, this patch interprets capabilities only on the
first line in the ref advertisement, printing a warning message when
encountering capabilities on other lines.

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

Sync with 2.14.2Junio C Hamano Tue, 26 Sep 2017 05:15:55 +0000 (14:15 +0900)

Sync with 2.14.2

* maint:
Git 2.14.2
Git 2.13.6
Git 2.12.5
Git 2.11.4
Git 2.10.5
cvsimport: shell-quote variable used in backticks
archimport: use safe_pipe_capture for user input
shell: drop git-cvsserver support by default
cvsserver: use safe_pipe_capture for `constant commands` as well
cvsserver: use safe_pipe_capture instead of backticks
cvsserver: move safe_pipe_capture() to the main package

The ninth batch for 2.15Junio C Hamano Mon, 25 Sep 2017 06:28:27 +0000 (15:28 +0900)

The ninth batch for 2.15

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

Merge branch 'ks/test-readme-phrasofix'Junio C Hamano Mon, 25 Sep 2017 06:24:10 +0000 (15:24 +0900)

Merge branch 'ks/test-readme-phrasofix'

Doc updates.

* ks/test-readme-phrasofix:
t/README: fix typo and grammatically improve a sentence

Merge branch 'ow/rev-parse-is-shallow-repo'Junio C Hamano Mon, 25 Sep 2017 06:24:10 +0000 (15:24 +0900)

Merge branch 'ow/rev-parse-is-shallow-repo'

"git rev-parse" learned "--is-shallow-repository", that is to be
used in a way similar to existing "--is-bare-repository" and
friends.

* ow/rev-parse-is-shallow-repo:
rev-parse: rev-parse: add --is-shallow-repository

Merge branch 'rj/test-ulimit-on-windows'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'rj/test-ulimit-on-windows'

On Cygwin, "ulimit -s" does not report failure but it does not work
at all, which causes an unexpected success of some tests that
expect failures under a limited stack situation. This has been
fixed.

* rj/test-ulimit-on-windows:
t9010-*.sh: skip all tests if the PIPE prereq is missing
test-lib: use more compact expression in PIPE prerequisite
test-lib: don't use ulimit in test prerequisites on cygwin

Merge branch 'jk/info-alternates-fix'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'jk/info-alternates-fix'

A regression fix for 2.11 that made the code to read the list of
alternate object stores overrun the end of the string.

* jk/info-alternates-fix:
read_info_alternates: warn on non-trivial errors
read_info_alternates: read contents into strbuf

Merge branch 'mh/for-each-string-list-item-empty-fix'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'mh/for-each-string-list-item-empty-fix'

Code cmp.std.c nitpick.

* mh/for-each-string-list-item-empty-fix:
for_each_string_list_item: avoid undefined behavior for empty list

Merge branch 'tb/test-lint-echo-e'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'tb/test-lint-echo-e'

The test linter has been taught that we do not like "echo -e".

* tb/test-lint-echo-e:
test-lint: echo -e (or -E) is not portable

Merge branch 'jk/revision-remove-cmdline-pathspec'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'jk/revision-remove-cmdline-pathspec'

Code clean-up that also plugs memory leaks.

* jk/revision-remove-cmdline-pathspec:
pathspec doc: parse_pathspec does not maintain references to args
revision: replace "struct cmdline_pathspec" with argv_array

Merge branch 'ls/travis-scriptify'Junio C Hamano Mon, 25 Sep 2017 06:24:09 +0000 (15:24 +0900)

Merge branch 'ls/travis-scriptify'

The scripts to drive TravisCI has been reorganized and then an
optimization to avoid spending cycles on a branch whose tip is
tagged has been implemented.

* ls/travis-scriptify:
travis-ci: fix "skip_branch_tip_with_tag()" string comparison
travis: dedent a few scripts that are indented overly deeply
travis-ci: skip a branch build if equal tag is present
travis-ci: move Travis CI code into dedicated scripts

Merge branch 'aw/gc-lockfile-fscanf-fix'Junio C Hamano Mon, 25 Sep 2017 06:24:08 +0000 (15:24 +0900)

Merge branch 'aw/gc-lockfile-fscanf-fix'

"git gc" tries to avoid running two instances at the same time by
reading and writing pid/host from and to a lock file; it used to
use an incorrect fscanf() format when reading, which has been
corrected.

* aw/gc-lockfile-fscanf-fix:
gc: call fscanf() with %<len>s, not %<len>c, when reading hostname

Merge branch 'hv/mv-nested-submodules-test'Junio C Hamano Mon, 25 Sep 2017 06:24:08 +0000 (15:24 +0900)

Merge branch 'hv/mv-nested-submodules-test'

A test to demonstrate "git mv" failing to adjust nested submodules
has been added.

* hv/mv-nested-submodules-test:
add test for bug in git-mv for recursive submodules

Merge branch 'bw/git-clang-format'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'bw/git-clang-format'

"make style" runs git-clang-format to help developers by pointing
out coding style issues.

* bw/git-clang-format:
Makefile: add style build rule
clang-format: outline the git project's coding style

Merge branch 'nm/imap-send-with-curl'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'nm/imap-send-with-curl'

"git imap-send" has our own implementation of the protocol and also
can use more recent libCurl with the imap protocol support. Update
the latter so that it can use the credential subsystem, and then
make it the default option to use, so that we can eventually
deprecate and remove the former.

* nm/imap-send-with-curl:
imap-send: use curl by default when possible
imap_send: setup_curl: retreive credentials if not set in config file
imap-send: add wrapper to get server credentials if needed
imap-send: return with error if curl failed

Merge branch 'ks/commit-do-not-touch-cut-line'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'ks/commit-do-not-touch-cut-line'

The explanation of the cut-line in the commit log editor has been
slightly tweaked.

* ks/commit-do-not-touch-cut-line:
commit-template: change a message to be more intuitive

Merge branch 'tg/refs-allowed-flags'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'tg/refs-allowed-flags'

API error-proofing which happens to also squelch warnings from GCC.

* tg/refs-allowed-flags:
refs: strip out not allowed flags from ref_transaction_update

Merge branch 'rs/archive-excluded-directory'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'rs/archive-excluded-directory'

"git archive", especially when used with pathspec, stored an empty
directory in its output, even though Git itself never does so.
This has been fixed.

* rs/archive-excluded-directory:
archive: don't add empty directories to archives

Merge branch 'ks/help-alias-label'Junio C Hamano Mon, 25 Sep 2017 06:24:07 +0000 (15:24 +0900)

Merge branch 'ks/help-alias-label'

"git help co" now says "co is aliased to ...", not "git co is".

* ks/help-alias-label:
help: change a message to be more precise

Merge branch 'jn/per-repo-object-store-fixes'Junio C Hamano Mon, 25 Sep 2017 06:24:06 +0000 (15:24 +0900)

Merge branch 'jn/per-repo-object-store-fixes'

Step #0 of a planned & larger series to make the in-core object
store per in-core repository object.

* jn/per-repo-object-store-fixes:
replace-objects: evaluate replacement refs without using the object store
push, fetch: error out for submodule entries not pointing to commits
pack: make packed_git_mru global a value instead of a pointer

Merge branch 'jk/write-in-full-fix'Junio C Hamano Mon, 25 Sep 2017 06:24:06 +0000 (15:24 +0900)

Merge branch 'jk/write-in-full-fix'

Many codepaths did not diagnose write failures correctly when disks
go full, due to their misuse of write_in_full() helper function,
which have been corrected.

* jk/write-in-full-fix:
read_pack_header: handle signed/unsigned comparison in read result
config: flip return value of store_write_*()
notes-merge: use ssize_t for write_in_full() return value
pkt-line: check write_in_full() errors against "< 0"
convert less-trivial versions of "write_in_full() != len"
avoid "write_in_full(fd, buf, len) != len" pattern
get-tar-commit-id: check write_in_full() return against 0
config: avoid "write_in_full(fd, buf, len) < len" pattern

Merge branch 'ez/doc-duplicated-words-fix'Junio C Hamano Mon, 25 Sep 2017 06:24:06 +0000 (15:24 +0900)

Merge branch 'ez/doc-duplicated-words-fix'

Typofix.

* ez/doc-duplicated-words-fix:
doc: fix minor typos (extra/duplicated words)

Merge branch 'kd/doc-for-each-ref'Junio C Hamano Mon, 25 Sep 2017 06:24:06 +0000 (15:24 +0900)

Merge branch 'kd/doc-for-each-ref'

Doc update.

* kd/doc-for-each-ref:
doc/for-each-ref: explicitly specify option names
doc/for-each-ref: consistently use '=' to between argument names and values

Merge branch 'cc/subprocess-handshake-missing-capabilities'Junio C Hamano Mon, 25 Sep 2017 06:24:06 +0000 (15:24 +0900)

Merge branch 'cc/subprocess-handshake-missing-capabilities'

Finishing touches to a topic already in 'master'.

* cc/subprocess-handshake-missing-capabilities:
subprocess: loudly die when subprocess asks for an unsupported capability

Merge branch 'kw/write-index-reduce-alloc'Junio C Hamano Mon, 25 Sep 2017 06:24:05 +0000 (15:24 +0900)

Merge branch 'kw/write-index-reduce-alloc'

A hotfix to a topic already in 'master'.

* kw/write-index-reduce-alloc:
read-cache: fix index corruption with index v4
Add t/helper/test-write-cache to .gitignore

Merge branch 'mg/name-rev-tests-with-short-stack'Junio C Hamano Mon, 25 Sep 2017 06:24:05 +0000 (15:24 +0900)

Merge branch 'mg/name-rev-tests-with-short-stack'

A handful of tests to demonstrates a recursive implementation of
"name-rev" hurts.

* mg/name-rev-tests-with-short-stack:
t6120: test describe and name-rev with deep repos
t6120: clean up state after breaking repo
t6120: test name-rev --all and --stdin
t7004: move limited stack prereq to test-lib

Git 2.14.2 v2.14.2Junio C Hamano Fri, 22 Sep 2017 05:51:37 +0000 (14:51 +0900)

Git 2.14.2

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

Sync with 2.13.6Junio C Hamano Fri, 22 Sep 2017 05:50:02 +0000 (14:50 +0900)

Sync with 2.13.6

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

Git 2.13.6 v2.13.6Junio C Hamano Fri, 22 Sep 2017 05:49:24 +0000 (14:49 +0900)

Git 2.13.6

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

Sync with 2.12.5Junio C Hamano Fri, 22 Sep 2017 05:48:08 +0000 (14:48 +0900)

Sync with 2.12.5

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

Git 2.12.5 v2.12.5Junio C Hamano Fri, 22 Sep 2017 05:47:41 +0000 (14:47 +0900)

Git 2.12.5

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

Sync with 2.11.4Junio C Hamano Fri, 22 Sep 2017 05:45:30 +0000 (14:45 +0900)

Sync with 2.11.4

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

Git 2.11.4 v2.11.4Junio C Hamano Fri, 22 Sep 2017 05:44:45 +0000 (14:44 +0900)

Git 2.11.4

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

Sync with 2.10.5Junio C Hamano Fri, 22 Sep 2017 05:43:13 +0000 (14:43 +0900)

Sync with 2.10.5

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

Git 2.10.5 v2.10.5Junio C Hamano Fri, 22 Sep 2017 05:42:22 +0000 (14:42 +0900)

Git 2.10.5

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

Merge branch 'jk/safe-pipe-capture' into maint-2.10Junio C Hamano Fri, 22 Sep 2017 05:34:34 +0000 (14:34 +0900)

Merge branch 'jk/safe-pipe-capture' into maint-2.10

Merge branch 'jk/cvsimport-quoting' into maint-2.10Junio C Hamano Fri, 22 Sep 2017 05:34:34 +0000 (14:34 +0900)

Merge branch 'jk/cvsimport-quoting' into maint-2.10

Merge branch 'jc/cvsserver' into maint-2.10Junio C Hamano Fri, 22 Sep 2017 05:34:34 +0000 (14:34 +0900)

Merge branch 'jc/cvsserver' into maint-2.10

Merge branch 'jk/git-shell-drop-cvsserver' into maint... Junio C Hamano Fri, 22 Sep 2017 05:34:34 +0000 (14:34 +0900)

Merge branch 'jk/git-shell-drop-cvsserver' into maint-2.10

travis-ci: fix "skip_branch_tip_with_tag()" string... Lars Schneider Thu, 21 Sep 2017 20:48:30 +0000 (22:48 +0200)

travis-ci: fix "skip_branch_tip_with_tag()" string comparison

09f5e97 ("travis-ci: skip a branch build if equal tag is present",
2017-09-17) introduced the "skip_branch_tip_with_tag" function with
a broken string comparison. Fix it!

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

pathspec doc: parse_pathspec does not maintain referenc... Jonathan Nieder Thu, 21 Sep 2017 04:41:12 +0000 (21:41 -0700)

pathspec doc: parse_pathspec does not maintain references to args

The command line arguments passed to main() are valid for the life of
a program, but the same is not true for all other argv-style arrays
(e.g. when a caller creates an argv_array). Clarify that
parse_pathspec does not rely on the argv passed to it to remain valid.

This makes it easier to tell that callers like "git rev-list --stdin"
are safe and ensures that that is more likely to remain true as the
implementation of parse_pathspec evolves.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jk/leak-checkers'Junio C Hamano Thu, 21 Sep 2017 04:38:37 +0000 (13:38 +0900)

Merge branch 'jk/leak-checkers'

Many of our programs consider that it is OK to release dynamic
storage that is used throughout the life of the program by simply
exiting, but this makes it harder to leak detection tools to avoid
reporting false positives. Plug many existing leaks and introduce
a mechanism for developers to mark that the region of memory
pointed by a pointer is not lost/leaking to help these tools.

* jk/leak-checkers:
git-compat-util: make UNLEAK less error-prone

revision: replace "struct cmdline_pathspec" with argv_arrayJeff King Wed, 20 Sep 2017 20:36:59 +0000 (16:36 -0400)

revision: replace "struct cmdline_pathspec" with argv_array

We assemble an array of strings in a custom struct,
NULL-terminate the result, and then pass it to
parse_pathspec().

But then we never free the array or the individual strings
(nor can we do the latter, as they are heap-allocated when
they come from stdin but not when they come from the
passed-in argv).

Let's swap this out for an argv_array. It does the same
thing with fewer lines of code, and it's safe to call
argv_array_clear() at the end to avoid a memory leak.

Reported-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lint: echo -e (or -E) is not portableTorsten Bögershausen Sun, 17 Sep 2017 05:43:18 +0000 (07:43 +0200)

test-lint: echo -e (or -E) is not portable

Some implementations of `echo` support the '-e' option to enable
backslash interpretation of the following string.
As an addition, they support '-E' to turn it off.

However, none of these are portable, POSIX doesn't even mention them,
and many implementations don't support them.

A check for '-n' is already done in check-non-portable-shell.pl,
extend it to cover '-n', '-e' or '-E'.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-compat-util: make UNLEAK less error-proneJonathan Tan Tue, 19 Sep 2017 22:10:04 +0000 (15:10 -0700)

git-compat-util: make UNLEAK less error-prone

Commit 0e5bba5 ("add UNLEAK annotation for reducing leak false
positives", 2017-09-08) introduced an UNLEAK macro to be used as
"UNLEAK(var);", but its existing definitions leave semicolons that act
as empty statements, which will lead to syntax errors, e.g.

if (condition)
UNLEAK(var);
else
something_else(var);

would be broken with two statements between if (condition) and else.
Lose the excess semicolon from the end of the macro replacement text.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

for_each_string_list_item: avoid undefined behavior... Michael Haggerty Wed, 20 Sep 2017 05:27:05 +0000 (22:27 -0700)

for_each_string_list_item: avoid undefined behavior for empty list

If you pass a newly initialized or newly cleared `string_list` to
`for_each_string_list_item()`, then the latter does

for (
item = (list)->items; /* NULL */
item < (list)->items + (list)->nr; /* NULL + 0 */
++item)

Even though this probably works almost everywhere, it is undefined
behavior, and it could plausibly cause highly-optimizing compilers to
misbehave. C99 section 6.5.6 paragraph 8 explains:

If both the pointer operand and the result point to elements
of the same array object, or one past the last element of the
array object, the evaluation shall not produce an overflow;
otherwise, the behavior is undefined.

and (6.3.2.3.3) a null pointer does not point to anything.

Guard the loop with a NULL check to make the intent crystal clear to
even the most pedantic compiler. A suitably clever compiler could let
the NULL check only run in the first iteration, but regardless, this
overhead is likely to be dwarfed by the work to be done on each item.

This problem was noticed by Coverity.

[jn: using a NULL check instead of a placeholder empty list;
fleshed out the commit message based on mailing list discussion]

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read_info_alternates: warn on non-trivial errorsJeff King Tue, 19 Sep 2017 19:41:10 +0000 (15:41 -0400)

read_info_alternates: warn on non-trivial errors

When we fail to open $GIT_DIR/info/alternates, we silently
assume there are no alternates. This is the right thing to
do for ENOENT, but not for other errors.

A hard error is probably overkill here. If we fail to read
an alternates file then either we'll complete our operation
anyway, or we'll fail to find some needed object. Either
way, a warning is good idea. And we already have a helper
function to handle this pattern; let's just call
warn_on_fopen_error().

Note that technically the errno from strbuf_read_file()
might be from a read() error, not open(). But since read()
would never return ENOENT or ENOTDIR, and since it produces
a generic "unable to access" error, it's suitable for
handling errors from either.

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

Merge branch 'jk/info-alternates-fix-2.11' into jk... Junio C Hamano Wed, 20 Sep 2017 02:33:06 +0000 (11:33 +0900)

Merge branch 'jk/info-alternates-fix-2.11' into jk/info-alternates-fix

* jk/info-alternates-fix-2.11:
read_info_alternates: read contents into strbuf

read_info_alternates: read contents into strbufJeff King Tue, 19 Sep 2017 19:41:07 +0000 (15:41 -0400)

read_info_alternates: read contents into strbuf

This patch fixes a regression in v2.11.1 where we might read
past the end of an mmap'd buffer. It was introduced in
cf3c635210.

The link_alt_odb_entries() function has always taken a
ptr/len pair as input. Until cf3c635210 (alternates: accept
double-quoted paths, 2016-12-12), we made a copy of those
bytes in a string. But after that commit, we switched to
parsing the input left-to-right, and we ignore "len"
totally, instead reading until we hit a NUL.

This has mostly gone unnoticed for a few reasons:

1. All but one caller passes a NUL-terminated string, with
"len" pointing to the NUL.

2. The remaining caller, read_info_alternates(), passes in
an mmap'd file. Unless the file is an exact multiple of
the page size, it will generally be followed by NUL
padding to the end of the page, which just works.

The easiest way to demonstrate the problem is to build with:

make SANITIZE=address NO_MMAP=Nope test

Any test which involves $GIT_DIR/info/alternates will fail,
as the mmap emulation (correctly) does not add an extra NUL,
and ASAN complains about reading past the end of the buffer.

One solution would be to teach link_alt_odb_entries() to
respect "len". But it's actually a bit tricky, since we
depend on unquote_c_style() under the hood, and it has no
ptr/len variant.

We could also just make a NUL-terminated copy of the input
bytes and operate on that. But since all but one caller
already is passing a string, instead let's just fix that
caller to provide NUL-terminated input in the first place,
by swapping out mmap for strbuf_read_file().

There's no advantage to using mmap on the alternates file.
It's not expected to be large (and anyway, we're copying its
contents into an in-memory linked list). Nor is using
git_open() buying us anything here, since we don't keep the
descriptor open for a long period of time.

Let's also drop the "len" parameter entirely from
link_alt_odb_entries(), since it's completely ignored. That
will avoid any new callers re-introducing a similar bug.

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

t9010-*.sh: skip all tests if the PIPE prereq is missingRamsay Jones Sun, 17 Sep 2017 22:58:18 +0000 (23:58 +0100)

t9010-*.sh: skip all tests if the PIPE prereq is missing

Every test in this file, except one, is marked with the PIPE prereq.
However, that lone test ('set up svn repo'), only performs some setup
work and checks whether the following test should be executed (by
setting an additional SVNREPO prerequisite). Since the following test
also requires the PIPE prerequisite, performing the setup test, when the
PIPE preequisite is missing, is simply wasted effort. Use the skip-all
test facility to skip all tests when the PIPE prerequisite is missing.

Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: use more compact expression in PIPE prerequisiteRamsay Jones Sun, 17 Sep 2017 22:56:00 +0000 (23:56 +0100)

test-lib: use more compact expression in PIPE prerequisite

Signed-off-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse: rev-parse: add --is-shallow-repositoryØystein Walle Mon, 18 Sep 2017 17:04:29 +0000 (19:04 +0200)

rev-parse: rev-parse: add --is-shallow-repository

Running `git fetch --unshallow` on a repo that is not in fact shallow
produces a fatal error message. Add a helper to rev-parse that scripters
can use to determine whether a repo is shallow or not.

Signed-off-by: Øystein Walle <oystwa@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/README: fix typo and grammatically improve a sentenceKaartic Sivaraam Sun, 17 Sep 2017 10:18:15 +0000 (10:18 +0000)

t/README: fix typo and grammatically improve a sentence

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

The eighth batch for 2.15Junio C Hamano Tue, 19 Sep 2017 01:55:19 +0000 (10:55 +0900)

The eighth batch for 2.15

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

Merge branch 'rk/commit-tree-make-F-verbatim'Junio C Hamano Tue, 19 Sep 2017 01:47:57 +0000 (10:47 +0900)

Merge branch 'rk/commit-tree-make-F-verbatim'

Unlike "git commit-tree < file", "git commit-tree -F file" did not
pass the contents of the file verbatim and instead completed an
incomplete line at the end, if exists. The latter has been updated
to match the behaviour of the former.

* rk/commit-tree-make-F-verbatim:
commit-tree: do not complete line in -F input

Merge branch 'rs/strbuf-leakfix'Junio C Hamano Tue, 19 Sep 2017 01:47:57 +0000 (10:47 +0900)

Merge branch 'rs/strbuf-leakfix'

Many leaks of strbuf have been fixed.

* rs/strbuf-leakfix: (34 commits)
wt-status: release strbuf after use in wt_longstatus_print_tracking()
wt-status: release strbuf after use in read_rebase_todolist()
vcs-svn: release strbuf after use in end_revision()
utf8: release strbuf on error return in strbuf_utf8_replace()
userdiff: release strbuf after use in userdiff_get_textconv()
transport-helper: release strbuf after use in process_connect_service()
sequencer: release strbuf after use in save_head()
shortlog: release strbuf after use in insert_one_record()
sha1_file: release strbuf on error return in index_path()
send-pack: release strbuf on error return in send_pack()
remote: release strbuf after use in set_url()
remote: release strbuf after use in migrate_file()
remote: release strbuf after use in read_remote_branches()
refs: release strbuf on error return in write_pseudoref()
notes: release strbuf after use in notes_copy_from_stdin()
merge: release strbuf after use in write_merge_heads()
merge: release strbuf after use in save_state()
mailinfo: release strbuf on error return in handle_boundary()
mailinfo: release strbuf after use in handle_from()
help: release strbuf on error return in exec_woman_emacs()
...

Merge branch 'jk/shortlog-ident-cleanup'Junio C Hamano Tue, 19 Sep 2017 01:47:56 +0000 (10:47 +0900)

Merge branch 'jk/shortlog-ident-cleanup'

Code clean-up.

* jk/shortlog-ident-cleanup:
shortlog: skip format/parse roundtrip for internal traversal

Merge branch 'mh/packed-ref-transactions'Junio C Hamano Tue, 19 Sep 2017 01:47:56 +0000 (10:47 +0900)

Merge branch 'mh/packed-ref-transactions'

Implement transactional update to the packed-ref representation of
references.

* mh/packed-ref-transactions:
files_transaction_finish(): delete reflogs before references
packed-backend: rip out some now-unused code
files_ref_store: use a transaction to update packed refs
t1404: demonstrate two problems with reference transactions
files_initial_transaction_commit(): use a transaction for packed refs
prune_refs(): also free the linked list
files_pack_refs(): use a reference transaction to write packed refs
packed_delete_refs(): implement method
packed_ref_store: implement reference transactions
struct ref_transaction: add a place for backends to store data
packed-backend: don't adjust the reference count on lock/unlock

Merge branch 'kw/merge-recursive-cleanup'Junio C Hamano Tue, 19 Sep 2017 01:47:56 +0000 (10:47 +0900)

Merge branch 'kw/merge-recursive-cleanup'

A leakfix and code clean-up.

* kw/merge-recursive-cleanup:
merge-recursive: change current file dir string_lists to hashmap
merge-recursive: remove return value from get_files_dirs
merge-recursive: fix memory leak

Merge branch 'sb/merge-commit-msg-hook'Junio C Hamano Tue, 19 Sep 2017 01:47:56 +0000 (10:47 +0900)

Merge branch 'sb/merge-commit-msg-hook'

As "git commit" to conclude a conflicted "git merge" honors the
commit-msg hook, "git merge" that recoreds a merge commit that
cleanly auto-merges should, but it didn't.

* sb/merge-commit-msg-hook:
builtin/merge: honor commit-msg hook for merges

Merge branch 'jk/leak-checkers'Junio C Hamano Tue, 19 Sep 2017 01:47:55 +0000 (10:47 +0900)

Merge branch 'jk/leak-checkers'

Many of our programs consider that it is OK to release dynamic
storage that is used throughout the life of the program by simply
exiting, but this makes it harder to leak detection tools to avoid
reporting false positives. Plug many existing leaks and introduce
a mechanism for developers to mark that the region of memory
pointed by a pointer is not lost/leaking to help these tools.

* jk/leak-checkers:
add UNLEAK annotation for reducing leak false positives
set_git_dir: handle feeding gitdir to itself
repository: free fields before overwriting them
reset: free allocated tree buffers
reset: make tree counting less confusing
config: plug user_config leak
update-index: fix cache entry leak in add_one_file()
add: free leaked pathspec after add_files_to_cache()
test-lib: set LSAN_OPTIONS to abort by default
test-lib: --valgrind should not override --verbose-log

Merge branch 'nm/pull-submodule-recurse-config'Junio C Hamano Tue, 19 Sep 2017 01:47:55 +0000 (10:47 +0900)

Merge branch 'nm/pull-submodule-recurse-config'

"git -c submodule.recurse=yes pull" did not work as if the
"--recurse-submodules" option was given from the command line.
This has been corrected.

* nm/pull-submodule-recurse-config:
pull: honor submodule.recurse config option
pull: fix cli and config option parsing order

Merge branch 'mh/packed-ref-store-prep'Junio C Hamano Tue, 19 Sep 2017 01:47:55 +0000 (10:47 +0900)

Merge branch 'mh/packed-ref-store-prep'

Fix regression to "gitk --bisect" by a recent update.

* mh/packed-ref-store-prep:
rev-parse: don't trim bisect refnames

Merge branch 'ma/remove-config-maybe-bool'Junio C Hamano Tue, 19 Sep 2017 01:47:55 +0000 (10:47 +0900)

Merge branch 'ma/remove-config-maybe-bool'

Finishing touches to a recent topic.

* ma/remove-config-maybe-bool:
config: remove git_config_maybe_bool

Merge branch 'jk/system-path-cleanup'Junio C Hamano Tue, 19 Sep 2017 01:47:55 +0000 (10:47 +0900)

Merge branch 'jk/system-path-cleanup'

Code clean-up.

* jk/system-path-cleanup:
git_extract_argv0_path: do nothing without RUNTIME_PREFIX
system_path: move RUNTIME_PREFIX to a sub-function

Merge branch 'jh/hashmap-disable-counting'Junio C Hamano Tue, 19 Sep 2017 01:47:54 +0000 (10:47 +0900)

Merge branch 'jh/hashmap-disable-counting'

Our hashmap implementation in hashmap.[ch] is not thread-safe when
adding a new item needs to expand the hashtable by rehashing; add
an API to disable the automatic rehashing to work it around.

* jh/hashmap-disable-counting:
hashmap: add API to disable item counting when threaded

Merge branch 'bb/doc-eol-dirty'Junio C Hamano Tue, 19 Sep 2017 01:47:54 +0000 (10:47 +0900)

Merge branch 'bb/doc-eol-dirty'

Doc update.

* bb/doc-eol-dirty:
Documentation: mention that `eol` can change the dirty status of paths

Merge branch 'jt/packmigrate'Junio C Hamano Tue, 19 Sep 2017 01:47:53 +0000 (10:47 +0900)

Merge branch 'jt/packmigrate'

Remove unneeded file added by a topic already in 'master'.

* jt/packmigrate:
Remove inadvertently added outgoing/packfile.h

Merge branch 'jk/incore-lockfile-removal'Junio C Hamano Tue, 19 Sep 2017 01:47:53 +0000 (10:47 +0900)

Merge branch 'jk/incore-lockfile-removal'

The long-standing rule that an in-core lockfile instance, once it
is used, must not be freed, has been lifted and the lockfile and
tempfile APIs have been updated to reduce the chance of programming
errors.

* jk/incore-lockfile-removal:
stop leaking lock structs in some simple cases
ref_lock: stop leaking lock_files
lockfile: update lifetime requirements in documentation
tempfile: auto-allocate tempfiles on heap
tempfile: remove deactivated list entries
tempfile: use list.h for linked list
tempfile: release deactivated strbufs instead of resetting
tempfile: robustify cleanup handler
tempfile: factor out deactivation
tempfile: factor out activation
tempfile: replace die("BUG") with BUG()
tempfile: handle NULL tempfile pointers gracefully
tempfile: prefer is_tempfile_active to bare access
lockfile: do not rollback lock on failed close
tempfile: do not delete tempfile on failed close
always check return value of close_tempfile
verify_signed_buffer: prefer close_tempfile() to close()
setup_temporary_shallow: move tempfile struct into function
setup_temporary_shallow: avoid using inactive tempfile
write_index_as_tree: cleanup tempfile on error

Merge branch 'nd/prune-in-worktree'Junio C Hamano Tue, 19 Sep 2017 01:47:53 +0000 (10:47 +0900)

Merge branch 'nd/prune-in-worktree'

"git gc" and friends when multiple worktrees are used off of a
single repository did not consider the index and per-worktree refs
of other worktrees as the root for reachability traversal, making
objects that are in use only in other worktrees to be subject to
garbage collection.

* nd/prune-in-worktree:
refs.c: reindent get_submodule_ref_store()
refs.c: remove fallback-to-main-store code get_submodule_ref_store()
rev-list: expose and document --single-worktree
revision.c: --reflog add HEAD reflog from all worktrees
files-backend: make reflog iterator go through per-worktree reflog
revision.c: --all adds HEAD from all worktrees
refs: remove dead for_each_*_submodule()
refs.c: move for_each_remote_ref_submodule() to submodule.c
revision.c: use refs_for_each*() instead of for_each_*_submodule()
refs: add refs_head_ref()
refs: move submodule slash stripping code to get_submodule_ref_store
refs.c: refactor get_submodule_ref_store(), share common free block
revision.c: --indexed-objects add objects from all worktrees
revision.c: refactor add_index_objects_to_pending()
refs.c: use is_dir_sep() in resolve_gitlink_ref()
revision.h: new flag in struct rev_info wrt. worktree-related refs

Merge branch 'ma/split-symref-update-fix'Junio C Hamano Tue, 19 Sep 2017 01:47:53 +0000 (10:47 +0900)

Merge branch 'ma/split-symref-update-fix'

A leakfix.

* ma/split-symref-update-fix:
refs/files-backend: add `refname`, not "HEAD", to list
refs/files-backend: correct return value in lock_ref_for_update
refs/files-backend: fix memory leak in lock_ref_for_update
refs/files-backend: add longer-scoped copy of string to list

Merge branch 'mh/notes-cleanup'Junio C Hamano Tue, 19 Sep 2017 01:47:52 +0000 (10:47 +0900)

Merge branch 'mh/notes-cleanup'

Code clean-up.

* mh/notes-cleanup:
load_subtree(): check that `prefix_len` is in the expected range
load_subtree(): declare some variables to be `size_t`
hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`
get_oid_hex_segment(): don't pad the rest of `oid`
load_subtree(): combine some common code
get_oid_hex_segment(): return 0 on success
load_subtree(): only consider blobs to be potential notes
load_subtree(): check earlier whether an internal node is a tree entry
load_subtree(): separate logic for internal vs. terminal entries
load_subtree(): fix incorrect comment
load_subtree(): reduce the scope of some local variables
load_subtree(): remove unnecessary conditional
notes: make GET_NIBBLE macro more robust

Merge branch 'mg/timestamp-t-fix'Junio C Hamano Tue, 19 Sep 2017 01:47:52 +0000 (10:47 +0900)

Merge branch 'mg/timestamp-t-fix'

A mismerge fix.

* mg/timestamp-t-fix:
name-rev: change ULONG_MAX to TIME_MAX

Merge branch 'ma/pkt-line-leakfix'Junio C Hamano Tue, 19 Sep 2017 01:47:52 +0000 (10:47 +0900)

Merge branch 'ma/pkt-line-leakfix'

A leakfix.

* ma/pkt-line-leakfix:
pkt-line: re-'static'-ify buffer in packet_write_fmt_1()

Merge branch 'jk/config-lockfile-leak-fix'Junio C Hamano Tue, 19 Sep 2017 01:47:51 +0000 (10:47 +0900)

Merge branch 'jk/config-lockfile-leak-fix'

A leakfix.

* jk/config-lockfile-leak-fix:
config: use a static lock_file struct

Merge branch 'dw/diff-highlight-makefile-fix'Junio C Hamano Tue, 19 Sep 2017 01:47:50 +0000 (10:47 +0900)

Merge branch 'dw/diff-highlight-makefile-fix'

Build clean-up.

* dw/diff-highlight-makefile-fix:
diff-highlight: add clean target to Makefile

Merge branch 'ti/external-sha1dc'Junio C Hamano Tue, 19 Sep 2017 01:47:50 +0000 (10:47 +0900)

Merge branch 'ti/external-sha1dc'

Platforms that ship with a separate sha1 with collision detection
library can link to it instead of using the copy we ship as part of
our source tree.

* ti/external-sha1dc:
sha1dc: allow building with the external sha1dc library
sha1dc: build git plumbing code more explicitly

gc: call fscanf() with %<len>s, not %<len>c, when readi... Junio C Hamano Sun, 17 Sep 2017 03:16:55 +0000 (12:16 +0900)

gc: call fscanf() with %<len>s, not %<len>c, when reading hostname

Earlier in this codepath, we (ab)used "%<len>c" to read the hostname
recorded in the lockfile into locking_host[HOST_NAME_MAX + 1] while
substituting <len> with the actual value of HOST_NAME_MAX.

This turns out to be incorrect, as it is an instruction to read
exactly the specified number of bytes. Because we are trying to
read at most that many bytes, we should be using "%<len>s" instead.

Helped-by: A. Wilcox <awilfox@adelielinux.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

add test for bug in git-mv for recursive submodulesHeiko Voigt Fri, 15 Sep 2017 11:50:21 +0000 (13:50 +0200)

add test for bug in git-mv for recursive submodules

When using git-mv with a submodule it will detect that and update the
paths for its configurations (.gitmodules, worktree and gitfile). This
does not work for recursive submodules where a user renames the root
submodule.

We discovered this fact when working on on-demand fetch for renamed
submodules. Lets add a test to document.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: use curl by default when possibleNicolas Morey-Chaisemartin Thu, 14 Sep 2017 07:52:11 +0000 (09:52 +0200)

imap-send: use curl by default when possible

Set curl as the runtime default when it is available.
When linked against older curl versions (< 7_34_0) or without curl,
use the legacy imap implementation.

The goal is to validate feature parity between the legacy and
the curl implementation, deprecate the legacy implementation
later on and in the long term, hopefully drop it altogether.

Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@morey-chaisemartin.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap_send: setup_curl: retreive credentials if not... Nicolas Morey-Chaisemartin Thu, 14 Sep 2017 07:52:06 +0000 (09:52 +0200)

imap_send: setup_curl: retreive credentials if not set in config file

Up to this point, the curl mode only supported getting the username
and password from the gitconfig file while the legacy mode could also
fetch them using the credential API.

Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@morey-chaisemartin.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: add wrapper to get server credentials if... Nicolas Morey-Chaisemartin Thu, 14 Sep 2017 07:52:02 +0000 (09:52 +0200)

imap-send: add wrapper to get server credentials if needed

Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@morey-chaisemartin.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

imap-send: return with error if curl failedNicolas Morey-Chaisemartin Thu, 14 Sep 2017 07:51:57 +0000 (09:51 +0200)

imap-send: return with error if curl failed

curl_append_msgs_to_imap always returned 0, whether curl failed or not.
Return a proper status so git imap-send will exit with an error code
if something wrong happened.

Signed-off-by: Nicolas Morey-Chaisemartin <nicolas@morey-chaisemartin.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit-template: change a message to be more intuitiveKaartic Sivaraam Wed, 13 Sep 2017 13:05:38 +0000 (13:05 +0000)

commit-template: change a message to be more intuitive

It's not good to use the phrase 'do not touch' to convey the
information that the cut-line should not be modified or removed as
it could possibly be mis-interpreted by a person who doesn't know
that the word 'touch' has the meaning of 'tamper with'. Further, it
could make translations a little difficult as it might not have the
intended meaning in a few languages when translated as such.

So, use more intuitive terms in the sentence.

Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>