gitweb.git
cvsimport: shell-quote variable used in backticksJeff King Mon, 11 Sep 2017 14:24:26 +0000 (10:24 -0400)

cvsimport: shell-quote variable used in backticks

We run `git rev-parse` though the shell, and quote its
argument only with single-quotes. This prevents most
metacharacters from being a problem, but misses the obvious
case when $name itself has single-quotes in it. We can fix
this by applying the usual shell-quoting formula.

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

Git 2.9.5 v2.9.5Junio C Hamano Sun, 30 Jul 2017 21:53:25 +0000 (14:53 -0700)

Git 2.9.5

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

Merge tag 'v2.8.6' into maint-2.9Junio C Hamano Sun, 30 Jul 2017 21:52:14 +0000 (14:52 -0700)

Merge tag 'v2.8.6' into maint-2.9

Git 2.8.6

Git 2.8.6 v2.8.6Junio C Hamano Sun, 30 Jul 2017 21:49:08 +0000 (14:49 -0700)

Git 2.8.6

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

Merge tag 'v2.7.6' into maint-2.8Junio C Hamano Sun, 30 Jul 2017 21:46:43 +0000 (14:46 -0700)

Merge tag 'v2.7.6' into maint-2.8

Git 2.7.6

Git 2.7.6 v2.7.6Junio C Hamano Sun, 30 Jul 2017 21:45:13 +0000 (14:45 -0700)

Git 2.7.6

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

Merge branch 'jk/ssh-funny-url' into maint-2.7Junio C Hamano Fri, 28 Jul 2017 23:11:54 +0000 (16:11 -0700)

Merge branch 'jk/ssh-funny-url' into maint-2.7

connect: reject paths that look like command line optionsJeff King Fri, 28 Jul 2017 19:28:55 +0000 (15:28 -0400)

connect: reject paths that look like command line options

If we get a repo path like "-repo.git", we may try to invoke
"git-upload-pack -repo.git". This is going to fail, since
upload-pack will interpret it as a set of bogus options. But
let's reject this before we even run the sub-program, since
we would not want to allow any mischief with repo names that
actually are real command-line options.

You can still ask for such a path via git-daemon, but there's no
security problem there, because git-daemon enters the repo itself
and then passes "." on the command line.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: reject dashed arguments for proxy commandsJeff King Fri, 28 Jul 2017 19:26:50 +0000 (15:26 -0400)

connect: reject dashed arguments for proxy commands

If you have a GIT_PROXY_COMMAND configured, we will run it
with the host/port on the command-line. If a URL contains a
mischievous host like "--foo", we don't know how the proxy
command may handle it. It's likely to break, but it may also
do something dangerous and unwanted (technically it could
even do something useful, but that seems unlikely).

We should err on the side of caution and reject this before
we even run the command.

The hostname check matches the one we do in a similar
circumstance for ssh. The port check is not present for ssh,
but there it's not necessary because the syntax is "-p
<port>", and there's no ambiguity on the parsing side.

It's not clear whether you can actually get a negative port
to the proxy here or not. Doing:

git fetch git://remote:-1234/repo.git

keeps the "-1234" as part of the hostname, with the default
port of 9418. But it's a good idea to keep this check close
to the point of running the command to make it clear that
there's no way to circumvent it (and at worst it serves as a
belt-and-suspenders check).

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: factor out "looks like command line option... Jeff King Fri, 28 Jul 2017 19:25:45 +0000 (15:25 -0400)

connect: factor out "looks like command line option" check

We reject hostnames that start with a dash because they may
be confused for command-line options. Let's factor out that
notion into a helper function, as we'll use it in more
places. And while it's simple now, it's not clear if some
systems might need more complex logic to handle all cases.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5813: add test for hostname starting with dashJeff King Fri, 28 Jul 2017 19:23:32 +0000 (15:23 -0400)

t5813: add test for hostname starting with dash

Per the explanation in the previous patch, this should be
(and is) rejected.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

connect: reject ssh hostname that begins with a dashJunio C Hamano Wed, 26 Jul 2017 17:24:20 +0000 (10:24 -0700)

connect: reject ssh hostname that begins with a dash

When commands like "git fetch" talk with ssh://$rest_of_URL/, the
code splits $rest_of_URL into components like host, port, etc., and
then spawns the underlying "ssh" program by formulating argv[] array
that has:

- the path to ssh command taken from GIT_SSH_COMMAND, etc.

- dashed options like '-batch' (for Tortoise), '-p <port>' as
needed.

- ssh_host, which is supposed to be the hostname parsed out of
$rest_of_URL.

- then the command to be run on the other side, e.g. git
upload-pack.

If the ssh_host ends up getting '-<anything>', the argv[] that is
used to spawn the command becomes something like:

{ "ssh", "-p", "22", "-<anything>", "command", "to", "run", NULL }

which obviously is bogus, but depending on the actual value of
"<anything>", will make "ssh" parse and use it as an option.

Prevent this by forbidding ssh_host that begins with a "-".

Noticed-by: Joern Schneeweisz of Recurity Labs
Reported-by: Brian at GitLab
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.9.4 v2.9.4Junio C Hamano Fri, 5 May 2017 04:18:23 +0000 (13:18 +0900)

Git 2.9.4

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

Merge branch 'maint-2.8' into maint-2.9Junio C Hamano Fri, 5 May 2017 04:13:48 +0000 (13:13 +0900)

Merge branch 'maint-2.8' into maint-2.9

Git 2.8.5 v2.8.5Junio C Hamano Fri, 5 May 2017 04:08:54 +0000 (13:08 +0900)

Git 2.8.5

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

Merge branch 'maint-2.7' into maint-2.8Junio C Hamano Fri, 5 May 2017 04:05:03 +0000 (13:05 +0900)

Merge branch 'maint-2.7' into maint-2.8

Git 2.7.5 v2.7.5Junio C Hamano Fri, 5 May 2017 04:03:40 +0000 (13:03 +0900)

Git 2.7.5

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

Merge branch 'maint-2.6' into maint-2.7Junio C Hamano Fri, 5 May 2017 03:59:16 +0000 (12:59 +0900)

Merge branch 'maint-2.6' into maint-2.7

Git 2.6.7 v2.6.7Junio C Hamano Fri, 5 May 2017 03:56:19 +0000 (12:56 +0900)

Git 2.6.7

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

Merge branch 'maint-2.5' into maint-2.6Junio C Hamano Fri, 5 May 2017 03:52:26 +0000 (12:52 +0900)

Merge branch 'maint-2.5' into maint-2.6

Git 2.5.6 v2.5.6Junio C Hamano Fri, 5 May 2017 03:49:00 +0000 (12:49 +0900)

Git 2.5.6

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

Merge branch 'maint-2.4' into maint-2.5Junio C Hamano Fri, 5 May 2017 03:46:53 +0000 (12:46 +0900)

Merge branch 'maint-2.4' into maint-2.5

Git 2.4.12 v2.4.12Junio C Hamano Fri, 5 May 2017 03:25:09 +0000 (12:25 +0900)

Git 2.4.12

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

Merge branch 'jk/shell-no-repository-that-begins-with... Junio C Hamano Fri, 5 May 2017 03:17:55 +0000 (12:17 +0900)

Merge branch 'jk/shell-no-repository-that-begins-with-dash' into maint-2.4

* jk/shell-no-repository-that-begins-with-dash:
shell: disallow repo names beginning with dash

shell: disallow repo names beginning with dashJeff King Sat, 29 Apr 2017 12:36:44 +0000 (08:36 -0400)

shell: disallow repo names beginning with dash

When a remote server uses git-shell, the client side will
connect to it like:

ssh server "git-upload-pack 'foo.git'"

and we literally exec ("git-upload-pack", "foo.git"). In
early versions of upload-pack and receive-pack, we took a
repository argument and nothing else. But over time they
learned to accept dashed options. If the user passes a
repository name that starts with a dash, the results are
confusing at best (we complain of a bogus option instead of
a non-existent repository) and malicious at worst (the user
can start an interactive pager via "--help").

We could pass "--" to the sub-process to make sure the
user's argument is interpreted as a branch name. I.e.:

git-upload-pack -- -foo.git

But adding "--" automatically would make us inconsistent
with a normal shell (i.e., when git-shell is not in use),
where "-foo.git" would still be an error. For that case, the
client would have to specify the "--", but they can't do so
reliably, as existing versions of git-shell do not allow
more than a single argument.

The simplest thing is to simply disallow "-" at the start of
the repo name argument. This hasn't worked either with or
without git-shell since version 1.0.0, and nobody has
complained.

Note that this patch just applies to do_generic_cmd(), which
runs upload-pack, receive-pack, and upload-archive. There
are two other types of commands that git-shell runs:

- do_cvs_cmd(), but this already restricts the argument to
be the literal string "server"

- admin-provided commands in the git-shell-commands
directory. We'll pass along arbitrary arguments there,
so these commands could have similar problems. But these
commands might actually understand dashed arguments, so
we cannot just block them here. It's up to the writer of
the commands to make sure they are safe. With great
power comes great responsibility.

Reported-by: Timo Schmid <tschmid@ernw.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Prepare for 2.9.4Junio C Hamano Fri, 9 Sep 2016 04:37:59 +0000 (21:37 -0700)

Prepare for 2.9.4

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

Merge branch 'hv/doc-commit-reference-style' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:03 +0000 (21:36 -0700)

Merge branch 'hv/doc-commit-reference-style' into maint

A small doc update.

* hv/doc-commit-reference-style:
SubmittingPatches: use gitk's "Copy commit summary" format
SubmittingPatches: document how to reference previous commits

Merge branch 'sg/reflog-past-root' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:02 +0000 (21:36 -0700)

Merge branch 'sg/reflog-past-root' into maint

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

Merge branch 'rs/mailinfo-lib' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:01 +0000 (21:36 -0700)

Merge branch 'rs/mailinfo-lib' into maint

Small code clean-up.

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

Merge branch 'jk/tighten-alloc' into maintJunio C Hamano Fri, 9 Sep 2016 04:36:00 +0000 (21:36 -0700)

Merge branch 'jk/tighten-alloc' into maint

Small code and comment clean-up.

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

Merge branch 'rs/use-strbuf-add-unique-abbrev' into... Junio C Hamano Fri, 9 Sep 2016 04:35:59 +0000 (21:35 -0700)

Merge branch 'rs/use-strbuf-add-unique-abbrev' into maint

A small code clean-up.

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

Merge branch 'rs/merge-recursive-string-list-init'... Junio C Hamano Fri, 9 Sep 2016 04:35:59 +0000 (21:35 -0700)

Merge branch 'rs/merge-recursive-string-list-init' into maint

A small code clean-up.

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

Merge branch 'rs/merge-add-strategies-simplification... Junio C Hamano Fri, 9 Sep 2016 04:35:58 +0000 (21:35 -0700)

Merge branch 'rs/merge-add-strategies-simplification' into maint

A small code clean-up.

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

Merge branch 'ls/packet-line-protocol-doc-fix' into... Junio C Hamano Fri, 9 Sep 2016 04:35:57 +0000 (21:35 -0700)

Merge branch 'ls/packet-line-protocol-doc-fix' into maint

Correct an age-old calco (is that a typo-like word for calc)
in the documentation.

* ls/packet-line-protocol-doc-fix:
pack-protocol: fix maximum pkt-line size

Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile... Junio C Hamano Fri, 9 Sep 2016 04:35:56 +0000 (21:35 -0700)

Merge branch 'bw/mingw-avoid-inheriting-fd-to-lockfile' into maint

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

Merge branch 'dg/document-git-c-in-git-config-doc'... Junio C Hamano Fri, 9 Sep 2016 04:35:56 +0000 (21:35 -0700)

Merge branch 'dg/document-git-c-in-git-config-doc' into maint

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)

Merge branch 'js/no-html-bypass-on-windows' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:55 +0000 (21:35 -0700)

Merge branch 'js/no-html-bypass-on-windows' into maint

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"

Merge branch 'jk/difftool-command-not-found' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'jk/difftool-command-not-found' into maint

"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

Merge branch 'sb/checkout-explit-detach-no-advice'... Junio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'sb/checkout-explit-detach-no-advice' into maint

"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

Merge branch 'rs/pull-signed-tag' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'rs/pull-signed-tag' into maint

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()

Merge branch 'js/test-lint-pathname' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/test-lint-pathname' into maint

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

Merge branch 'js/mv-dir-to-new-directory' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/mv-dir-to-new-directory' into maint

"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/`

Merge branch 'js/import-tars-hardlinks' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:54 +0000 (21:35 -0700)

Merge branch 'js/import-tars-hardlinks' into maint

"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

Merge branch 'ms/document-pack-window-memory-is-per... Junio C Hamano Fri, 9 Sep 2016 04:35:53 +0000 (21:35 -0700)

Merge branch 'ms/document-pack-window-memory-is-per-thread' into maint

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

Merge branch 'jk/push-force-with-lease-creation' into... Junio C Hamano Fri, 9 Sep 2016 04:35:53 +0000 (21:35 -0700)

Merge branch 'jk/push-force-with-lease-creation' into maint

"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

Merge branch 'jk/reflog-date' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:52 +0000 (21:35 -0700)

Merge branch 'jk/reflog-date' into maint

The reflog output format is documented better, and a new format
--date=unix to report the seconds-since-epoch (without timezone)
has been added.

* jk/reflog-date:
date: clarify --date=raw description
date: add "unix" format
date: document and test "raw-local" mode
doc/pretty-formats: explain shortening of %gd
doc/pretty-formats: describe index/time formats for %gd
doc/rev-list-options: explain "-g" output formats
doc/rev-list-options: clarify "commit@{Nth}" for "-g" option

Merge branch 'jc/renormalize-merge-kill-safer-crlf... Junio C Hamano Fri, 9 Sep 2016 04:35:51 +0000 (21:35 -0700)

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

"git merge" with renormalization did not work well with
merge-recursive, due to "safer crlf" conversion kicking in when it
shouldn't.

* jc/renormalize-merge-kill-safer-crlf:
merge: avoid "safer crlf" during recording of merge results
convert: unify the "auto" handling of CRLF

Merge branch 'jk/common-main' into maintJunio C Hamano Fri, 9 Sep 2016 04:35:50 +0000 (21:35 -0700)

Merge branch 'jk/common-main' into maint

There are certain house-keeping tasks that need to be performed at
the very beginning of any Git program, and programs that are not
built-in commands had to do them exactly the same way as "git"
potty does. It was easy to make mistakes in one-off standalone
programs (like test helpers). A common "main()" function that
calls cmd_main() of individual program has been introduced to
make it harder to make mistakes.

* jk/common-main:
mingw: declare main()'s argv as const
common-main: call git_setup_gettext()
common-main: call restore_sigpipe_to_default()
common-main: call sanitize_stdfds()
common-main: call git_extract_argv0_path()
add an extra level of indirection to main()

pack-protocol: fix maximum pkt-line sizeLars Schneider Mon, 29 Aug 2016 17:55:09 +0000 (19:55 +0200)

pack-protocol: fix maximum pkt-line size

According to LARGE_PACKET_MAX in pkt-line.h the maximal length of a
pkt-line packet is 65520 bytes. The pkt-line header takes 4 bytes and
therefore the pkt-line data component must not exceed 65516 bytes.

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

SubmittingPatches: use gitk's "Copy commit summary... Beat Bolli Fri, 26 Aug 2016 16:59:01 +0000 (18:59 +0200)

SubmittingPatches: use gitk's "Copy commit summary" format

Update the suggestion in 175d38ca ("SubmittingPatches: document how
to reference previous commits", 2016-07-28) on the format to refer
to a commit to match what gitk has been giving since last year with
its "Copy commit summary" command; also mention this as one of the
ways to obtain a commit reference in this format.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

doc: 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>

mingw: ensure temporary file handles are not inherited... 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>

Revert "display HTML in default browser using Windows... 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>

t6026-merge-attr: child processes must not inherit... 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>

SubmittingPatches: document how to reference previous... 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>

t/Makefile: ensure that paths are valid on platforms... 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>

difftool: always honor fatal error exit codesJohn 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>

checkout: do not mention detach advice for explicit... 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>

t1410: remove superfluous 'git reflog' from the 'walk... 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>

receive-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>

commit: use FLEX_ARRAY in struct merge_remote_descRené 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>

merge-recursive: fix verbose output for multiple base... 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>

commit: 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>

commit: 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>

mailinfo: 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>

correct FLEXPTR_* example in commentRené 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>

Git 2.9.3 v2.9.3Junio 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>

Merge branch 'jk/difftool-in-subdir' into maintJunio 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

Merge branch 'jk/reset-ident-time-per-commit' into... 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

Yet another batch for 2.9.3Junio C Hamano Wed, 10 Aug 2016 18:56:56 +0000 (11:56 -0700)

Yet another batch for 2.9.3

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

Merge branch 'jh/clean-smudge-f-doc' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:34 +0000 (11:55 -0700)

Merge branch 'jh/clean-smudge-f-doc' into maint

A minor documentation update.

This was split out from a stalled jh/clean-smudge-annex topic
before discarding it.

* jh/clean-smudge-f-doc:
clarify %f documentation

Merge branch 'rs/use-strbuf-addstr' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:33 +0000 (11:55 -0700)

Merge branch 'rs/use-strbuf-addstr' into maint

* rs/use-strbuf-addstr:
use strbuf_addstr() instead of strbuf_addf() with "%s"
use strbuf_addstr() for adding constant strings to a strbuf

Merge branch 'cp/completion-clone-recurse-submodules... Junio C Hamano Wed, 10 Aug 2016 18:55:33 +0000 (11:55 -0700)

Merge branch 'cp/completion-clone-recurse-submodules' into maint

* cp/completion-clone-recurse-submodules:
completion: add option '--recurse-submodules' to 'git clone'

Merge branch 'jk/t4205-cleanup' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:32 +0000 (11:55 -0700)

Merge branch 'jk/t4205-cleanup' into maint

Test modernization.

* jk/t4205-cleanup:
t4205: indent here documents
t4205: drop top-level &&-chaining

Merge branch 'jc/hashmap-doc-init' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:31 +0000 (11:55 -0700)

Merge branch 'jc/hashmap-doc-init' into maint

The API documentation for hashmap was unclear if hashmap_entry
can be safely discarded without any other consideration. State
that it is safe to do so.

* jc/hashmap-doc-init:
hashmap: clarify that hashmap_entry can safely be discarded

Merge branch 'js/nedmalloc-gcc6-warnings' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:31 +0000 (11:55 -0700)

Merge branch 'js/nedmalloc-gcc6-warnings' into maint

Squelch compiler warnings for netmalloc (in compat/) library.

* js/nedmalloc-gcc6-warnings:
nedmalloc: work around overzealous GCC 6 warning
nedmalloc: fix misleading indentation

Merge branch 'nd/fbsd-lazy-mtime' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:30 +0000 (11:55 -0700)

Merge branch 'nd/fbsd-lazy-mtime' into maint

FreeBSD can lie when asked mtime of a directory, which made the
untracked cache code to fall back to a slow-path, which in turn
caused tests in t7063 to fail because it wanted to verify the
behaviour of the fast-path.

* nd/fbsd-lazy-mtime:
t7063: work around FreeBSD's lazy mtime update feature

Merge branch 'ab/gitweb-link-html-escape' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:30 +0000 (11:55 -0700)

Merge branch 'ab/gitweb-link-html-escape' into maint

The characters in the label shown for tags/refs for commits in
"gitweb" output are now properly escaped for proper HTML output.

* ab/gitweb-link-html-escape:
gitweb: escape link body in format_ref_marker

Merge branch 'js/t4130-rename-without-ino' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:29 +0000 (11:55 -0700)

Merge branch 'js/t4130-rename-without-ino' into maint

Windows port was failing some tests in t4130, due to the lack of
inum in the returned values by its lstat(2) emulation.

* js/t4130-rename-without-ino:
t4130: work around Windows limitation

Merge branch 'jc/grep-commandline-vs-configuration... Junio C Hamano Wed, 10 Aug 2016 18:55:29 +0000 (11:55 -0700)

Merge branch 'jc/grep-commandline-vs-configuration' into maint

"git -c grep.patternType=extended log --basic-regexp" misbehaved
because the internal API to access the grep machinery was not
designed well.

* jc/grep-commandline-vs-configuration:
grep: further simplify setting the pattern type

Merge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning... Junio C Hamano Wed, 10 Aug 2016 18:55:28 +0000 (11:55 -0700)

Merge branch 'jk/diff-do-not-reuse-wtf-needs-cleaning' into maint

There is an optimization used in "git diff $treeA $treeB" to borrow
an already checked-out copy in the working tree when it is known to
be the same as the blob being compared, expecting that open/mmap of
such a file is faster than reading it from the object store, which
involves inflating and applying delta. This however kicked in even
when the checked-out copy needs to go through the convert-to-git
conversion (including the clean filter), which defeats the whole
point of the optimization. The optimization has been disabled when
the conversion is necessary.

* jk/diff-do-not-reuse-wtf-needs-cleaning:
diff: do not reuse worktree files that need "clean" conversion

Merge branch 'pm/build-persistent-https-with-recent... Junio C Hamano Wed, 10 Aug 2016 18:55:27 +0000 (11:55 -0700)

Merge branch 'pm/build-persistent-https-with-recent-go' into maint

The build procedure for "git persistent-https" helper (in contrib/)
has been updated so that it can be built with more recent versions
of Go.

* pm/build-persistent-https-with-recent-go:
contrib/persistent-https: use Git version for build label
contrib/persistent-https: update ldflags syntax for Go 1.7+

Merge branch 'da/subtree-2.9-regression' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:26 +0000 (11:55 -0700)

Merge branch 'da/subtree-2.9-regression' into maint

"git merge" in Git v2.9 was taught to forbid merging an unrelated
lines of history by default, but that is exactly the kind of thing
the "--rejoin" mode of "git subtree" (in contrib/) wants to do.
"git subtree" has been taught to use the "--allow-unrelated-histories"
option to override the default.

* da/subtree-2.9-regression:
subtree: fix "git subtree split --rejoin"
t7900-subtree.sh: fix quoting and broken && chains

Merge branch 'os/no-verify-skips-commit-msg-too' into... Junio C Hamano Wed, 10 Aug 2016 18:55:25 +0000 (11:55 -0700)

Merge branch 'os/no-verify-skips-commit-msg-too' into maint

"git commit --help" said "--no-verify" is only about skipping the
pre-commit hook, and failed to say that it also skipped the
commit-msg hook.

* os/no-verify-skips-commit-msg-too:
commit: describe that --no-verify skips the commit-msg hook in the help text

Merge branch 'rs/rm-strbuf-optim' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:24 +0000 (11:55 -0700)

Merge branch 'rs/rm-strbuf-optim' into maint

The use of strbuf in "git rm" to build filename to remove was a bit
suboptimal, which has been fixed.

* rs/rm-strbuf-optim:
rm: reuse strbuf for all remove_dir_recursively() calls

Merge branch 'jk/parse-options-concat' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:23 +0000 (11:55 -0700)

Merge branch 'jk/parse-options-concat' into maint

Users of the parse_options_concat() API function need to allocate
extra slots in advance and fill them with OPT_END() when they want
to decide the set of supported options dynamically, which makes the
code error-prone and hard to read. This has been corrected by tweaking
the API to allocate and return a new copy of "struct option" array.

* jk/parse-options-concat:
parse_options: allocate a new array when concatenating

Merge branch 'ls/travis-enable-httpd-tests' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:22 +0000 (11:55 -0700)

Merge branch 'ls/travis-enable-httpd-tests' into maint

Allow http daemon tests in Travis CI tests.

* ls/travis-enable-httpd-tests:
travis-ci: enable web server tests t55xx on Linux

Merge branch 'ew/autoconf-pthread' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:20 +0000 (11:55 -0700)

Merge branch 'ew/autoconf-pthread' into maint

Existing autoconf generated test for the need to link with pthread
library did not check all the functions from pthread libraries;
recent FreeBSD has some functions in libc but not others, and we
mistakenly thought linking with libc is enough when it is not.

* ew/autoconf-pthread:
configure.ac: stronger test for pthread linkage

Merge branch 'rs/help-c-source-with-gitattributes'... Junio C Hamano Wed, 10 Aug 2016 18:55:19 +0000 (11:55 -0700)

Merge branch 'rs/help-c-source-with-gitattributes' into maint

The .c/.h sources are marked as such in our .gitattributes file so
that "git diff -W" and friends would work better.

* rs/help-c-source-with-gitattributes:
.gitattributes: set file type for C files

Merge branch 'mm/status-suggest-merge-abort' into maintJunio C Hamano Wed, 10 Aug 2016 18:55:19 +0000 (11:55 -0700)

Merge branch 'mm/status-suggest-merge-abort' into maint

"git status" learned to suggest "merge --abort" during a conflicted
merge, just like it already suggests "rebase --abort" during a
conflicted rebase.

* mm/status-suggest-merge-abort:
status: suggest 'git merge --abort' when appropriate

document git-repack interaction of pack.threads and... Michael Stahl Wed, 10 Aug 2016 10:39:35 +0000 (12:39 +0200)

document git-repack interaction of pack.threads and pack.windowMemory

Signed-off-by: Michael Stahl <mstahl@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Hopefully final batch for 2.9.3Junio C Hamano Mon, 8 Aug 2016 21:22:36 +0000 (14:22 -0700)

Hopefully final batch for 2.9.3

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

Merge branch 'sb/pack-protocol-doc-nak' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:47 +0000 (14:21 -0700)

Merge branch 'sb/pack-protocol-doc-nak' into maint

A doc update.

* sb/pack-protocol-doc-nak:
Documentation: pack-protocol correct NAK response

Merge branch 'rs/submodule-config-code-cleanup' into... Junio C Hamano Mon, 8 Aug 2016 21:21:46 +0000 (14:21 -0700)

Merge branch 'rs/submodule-config-code-cleanup' into maint

Code cleanup.

* rs/submodule-config-code-cleanup:
submodule-config: fix test binary crashing when no arguments given
submodule-config: combine early return code into one goto
submodule-config: passing name reference for .gitmodule blobs
submodule-config: use explicit empty string instead of strbuf in config_from()

Merge branch 'sb/submodule-deinit-all' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:46 +0000 (14:21 -0700)

Merge branch 'sb/submodule-deinit-all' into maint

A comment update for a topic that was merged to Git v2.8.

* sb/submodule-deinit-all:
submodule deinit: remove outdated comment

Merge branch 'rs/worktree-use-strbuf-absolute-path... Junio C Hamano Mon, 8 Aug 2016 21:21:45 +0000 (14:21 -0700)

Merge branch 'rs/worktree-use-strbuf-absolute-path' into maint

Code simplification.

* rs/worktree-use-strbuf-absolute-path:
worktree: use strbuf_add_absolute_path() directly

Merge branch 'jc/doc-diff-filter-exclude' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:44 +0000 (14:21 -0700)

Merge branch 'jc/doc-diff-filter-exclude' into maint

Belated doc update for a feature added in v1.8.5.

* jc/doc-diff-filter-exclude:
diff: document diff-filter exclusion

Merge branch 'nd/test-helpers' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:43 +0000 (14:21 -0700)

Merge branch 'nd/test-helpers' into maint

Build clean-up.

* nd/test-helpers:
t/test-lib.sh: fix running tests with --valgrind
Makefile: use VCSSVN_LIB to refer to svn library
Makefile: drop extra dependencies for test helpers

Merge branch 'rs/use-strbuf-addbuf' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:42 +0000 (14:21 -0700)

Merge branch 'rs/use-strbuf-addbuf' into maint

Code cleanup.

* rs/use-strbuf-addbuf:
strbuf: avoid calling strbuf_grow() twice in strbuf_addbuf()
use strbuf_addbuf() for appending a strbuf to another

Merge branch 'lf/recv-sideband-cleanup' into maintJunio C Hamano Mon, 8 Aug 2016 21:21:41 +0000 (14:21 -0700)

Merge branch 'lf/recv-sideband-cleanup' into maint

Code simplification.

* lf/recv-sideband-cleanup:
sideband.c: small optimization of strbuf usage
sideband.c: refactor recv_sideband()