gitweb.git
Git 2.9-rc0 v2.9.0-rc0Junio C Hamano Mon, 23 May 2016 22:02:48 +0000 (15:02 -0700)

Git 2.9-rc0

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

Merge branch 'svn-travis' of git://bogomips.org/git-svnJunio C Hamano Mon, 23 May 2016 22:01:03 +0000 (15:01 -0700)

Merge branch 'svn-travis' of git://bogomips.org/git-svn

* 'svn-travis' of git://bogomips.org/git-svn:
travis-ci: enable Git SVN tests t91xx on Linux

Merge branch 'jc/rerere-multi'Junio C Hamano Mon, 23 May 2016 21:54:37 +0000 (14:54 -0700)

Merge branch 'jc/rerere-multi'

* jc/rerere-multi:
rerere: remove an null statement
rerere: plug memory leaks upon "rerere forget" failure

Merge branch 'da/difftool'Junio C Hamano Mon, 23 May 2016 21:54:36 +0000 (14:54 -0700)

Merge branch 'da/difftool'

"git difftool" learned to handle unmerged paths correctly in
dir-diff mode.

* da/difftool:
difftool: handle unmerged files in dir-diff mode
difftool: initialize variables for readability

Merge branch 'jk/test-z-n-unquoted'Junio C Hamano Mon, 23 May 2016 21:54:35 +0000 (14:54 -0700)

Merge branch 'jk/test-z-n-unquoted'

t9xxx series has been updated primarily for readability, while
fixing small bugs in it. A few scripted Porcelains have also been
updated to fix possible bugs around their use of "test -z" and
"test -n".

* jk/test-z-n-unquoted:
always quote shell arguments to test -z/-n
t9103: modernize test style
t9107: switch inverted single/double quotes in test
t9107: use "return 1" instead of "exit 1"
t9100,t3419: enclose all test code in single-quotes
t/lib-git-svn: drop $remote_git_svn and $git_svn_id

Merge branch 'ar/diff-args-osx-precompose'Junio C Hamano Mon, 23 May 2016 21:54:35 +0000 (14:54 -0700)

Merge branch 'ar/diff-args-osx-precompose'

Many commands normalize command line arguments from NFD to NFC
variant of UTF-8 on OSX, but commands in the "diff" family did
not, causing "git diff $path" to complain that no such path is
known to Git. They have been taught to do the normalization.

* ar/diff-args-osx-precompose:
diff: run arguments through precompose_argv

Merge branch 'jc/doc-lint'Junio C Hamano Mon, 23 May 2016 21:54:34 +0000 (14:54 -0700)

Merge branch 'jc/doc-lint'

Find common mistakes when writing gitlink: in our documentation and
drive the check from "make check-docs".

I am not entirely happy with the way the script chooses what input
file to validate, but it is not worse than not having anything, so
let's move it forward and have the logic improved later when people
care about it deeply.

* jc/doc-lint:
ci: validate "linkgit:" in documentation

Merge branch 'js/perf-rebase-i'Junio C Hamano Mon, 23 May 2016 21:54:33 +0000 (14:54 -0700)

Merge branch 'js/perf-rebase-i'

Add perf test for "rebase -i"

* js/perf-rebase-i:
perf: run "rebase -i" under perf
perf: make the tests work in worktrees
perf: let's disable symlinks when they are not available

Merge branch 'jc/test-parse-options-expect'Junio C Hamano Mon, 23 May 2016 21:54:32 +0000 (14:54 -0700)

Merge branch 'jc/test-parse-options-expect'

t0040 had too many unnecessary repetitions in its test data. Teach
test-parse-options program so that a caller can tell what it
expects in its output, so that these repetitions can be cleaned up.

* jc/test-parse-options-expect:
t0040: convert a few tests to use test-parse-options --expect
t0040: remove unused test helpers
test-parse-options: --expect=<string> option to simplify tests
test-parse-options: fix output when callback option fails

Merge branch 'pb/commit-verbose-config'Junio C Hamano Mon, 23 May 2016 21:54:31 +0000 (14:54 -0700)

Merge branch 'pb/commit-verbose-config'

"git commit" learned to pay attention to "commit.verbose"
configuration variable and act as if "--verbose" option was
given from the command line.

* pb/commit-verbose-config:
commit: add a commit.verbose config variable
t7507-commit-verbose: improve test coverage by testing number of diffs
parse-options.c: make OPTION_COUNTUP respect "unspecified" values
t/t7507: improve test coverage
t0040-parse-options: improve test coverage
test-parse-options: print quiet as integer
t0040-test-parse-options.sh: fix style issues

Merge branch 'xy/format-patch-base'Junio C Hamano Mon, 23 May 2016 21:54:31 +0000 (14:54 -0700)

Merge branch 'xy/format-patch-base'

"git format-patch" learned a new "--base" option to record what
(public, well-known) commit the original series was built on in
its output.

* xy/format-patch-base:
format-patch: introduce format.useAutoBase configuration
format-patch: introduce --base=auto option
format-patch: add '--base' option to record base tree info
patch-ids: make commit_patch_id() a public helper function

Merge branch 'tb/core-eol-fix'Junio C Hamano Mon, 23 May 2016 21:54:30 +0000 (14:54 -0700)

Merge branch 'tb/core-eol-fix'

A couple of bugs around core.autocrlf have been fixed.

* tb/core-eol-fix:
convert.c: ident + core.autocrlf didn't work
t0027: test cases for combined attributes
convert: allow core.autocrlf=input and core.eol=crlf
t0027: make commit_chk_wrnNNO() reliable

Merge branch 'nd/worktree-various-heads'Junio C Hamano Mon, 23 May 2016 21:54:29 +0000 (14:54 -0700)

Merge branch 'nd/worktree-various-heads'

The experimental "multiple worktree" feature gains more safety to
forbid operations on a branch that is checked out or being actively
worked on elsewhere, by noticing that e.g. it is being rebased.

* nd/worktree-various-heads:
branch: do not rename a branch under bisect or rebase
worktree.c: check whether branch is bisected in another worktree
wt-status.c: split bisect detection out of wt_status_get_state()
worktree.c: check whether branch is rebased in another worktree
worktree.c: avoid referencing to worktrees[i] multiple times
wt-status.c: make wt_status_check_rebase() work on any worktree
wt-status.c: split rebase detection out of wt_status_get_state()
path.c: refactor and add worktree_git_path()
worktree.c: mark current worktree
worktree.c: make find_shared_symref() return struct worktree *
worktree.c: store "id" instead of "git_dir"
path.c: add git_common_path() and strbuf_git_common_path()
dir.c: rename str(n)cmp_icase to fspath(n)cmp

Merge branch 'ss/commit-dry-run-resolve-merge-to-no-op'Junio C Hamano Mon, 23 May 2016 21:54:28 +0000 (14:54 -0700)

Merge branch 'ss/commit-dry-run-resolve-merge-to-no-op'

"git commit --dry-run" reported "No, no, you cannot commit." in one
case where "git commit" would have allowed you to commit, and this
improves it a little bit ("git commit --dry-run --short" still does
not give you the correct answer, for example). This is a stop-gap
measure in that "commit --short --dry-run" still gives an incorrect
result.

* ss/commit-dry-run-resolve-merge-to-no-op:
wt-status.c: set commitable bit if there is a meaningful merge.

travis-ci: enable Git SVN tests t91xx on LinuxLars Schneider Thu, 19 May 2016 09:10:08 +0000 (11:10 +0200)

travis-ci: enable Git SVN tests t91xx on Linux

Install the "git-svn" package to make the Perl SVN libraries available
to the Git SVN tests on Travis-CI Linux build machines.

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Signed-off-by: Eric Wong <e@80x24.org>

t0008: 4 tests fail with ksh88Armin Kunaschik Fri, 20 May 2016 14:31:30 +0000 (16:31 +0200)

t0008: 4 tests fail with ksh88

In t0008, we have

cat <<-EOF
...
a/b/.gitignore:8:!on* "a/b/one\"three"
...
EOF

and expect that the backslash-dq is passed through literally.

ksh88 eats the backslash and produces a wrong expect file to
compare the actual output with.

Using \\" works this around without breaking other POSIX shells
(which collapse backslash-backslash to a single backslash), and
ksh88 does so, too.

It makes it easier to read, too, because the reason why we are
writing backslash there is *not* because we think dq is special and
want to quote it (if that were the case we would have two more
backslashes on that line). It is simply because we want a single
literal backslash there. Since backslash is treated specially in
unquoted here-document, explicitly doubling it to quote it expresses
our intent better than relying on the character that immediately
comes after it (i.e. '"') not being a special character.

Signed-off-by: Armin Kunaschik <megabreit@googlemail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rerere: remove an null statementJunio C Hamano Thu, 19 May 2016 19:51:22 +0000 (12:51 -0700)

rerere: remove an null statement

J6t spotted that previous commit added an empty statement by
mistake.

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

Sync with 2.8.3Junio C Hamano Wed, 18 May 2016 22:33:57 +0000 (15:33 -0700)

Sync with 2.8.3

* maint:
Git 2.8.3

Git 2.8.3 v2.8.3Junio C Hamano Wed, 18 May 2016 21:45:08 +0000 (14:45 -0700)

Git 2.8.3

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

Merge branch 'jk/push-client-deadlock-fix'Junio C Hamano Wed, 18 May 2016 22:11:46 +0000 (15:11 -0700)

Merge branch 'jk/push-client-deadlock-fix'

Some Windows SDK lacks pthread_sigmask() implementation and fails
to compile the recently updated "git push" codepath that uses it.

* jk/push-client-deadlock-fix:
Windows: only add a no-op pthread_sigmask() when needed
Windows: add pthread_sigmask() that does nothing

Merge branch 'sb/misc-cleanups' into HEADJunio C Hamano Wed, 18 May 2016 21:40:15 +0000 (14:40 -0700)

Merge branch 'sb/misc-cleanups' into HEAD

* sb/misc-cleanups:
submodule-config: don't shadow `cache`
config.c: drop local variable
credential-cache, send_request: close fd when done
bundle: don't leak an fd in case of early return
abbrev_sha1_in_line: don't leak memory
notes: don't leak memory in git_config_get_notes_strategy

Merge branch 'ew/doc-split-pack-disables-bitmap' into... Junio C Hamano Wed, 18 May 2016 21:40:15 +0000 (14:40 -0700)

Merge branch 'ew/doc-split-pack-disables-bitmap' into HEAD

Doc update.

* ew/doc-split-pack-disables-bitmap:
pack-objects: warn on split packs disabling bitmaps

Merge branch 'sb/clean-test-fix' into HEADJunio C Hamano Wed, 18 May 2016 21:40:14 +0000 (14:40 -0700)

Merge branch 'sb/clean-test-fix' into HEAD

* sb/clean-test-fix:
t7300: mark test with SANITY

Merge branch 'rn/glossary-typofix' into HEADJunio C Hamano Wed, 18 May 2016 21:40:13 +0000 (14:40 -0700)

Merge branch 'rn/glossary-typofix' into HEAD

* rn/glossary-typofix:
Documentation: fix typo 'In such these cases'

Merge branch 'ew/normal-to-e' into HEADJunio C Hamano Wed, 18 May 2016 21:40:12 +0000 (14:40 -0700)

Merge branch 'ew/normal-to-e' into HEAD

* ew/normal-to-e:
.mailmap: update to my shorter email address

Merge branch 'sb/config-exit-status-list' into HEADJunio C Hamano Wed, 18 May 2016 21:40:12 +0000 (14:40 -0700)

Merge branch 'sb/config-exit-status-list' into HEAD

Doc update.

* sb/config-exit-status-list:
config doc: improve exit code listing

Merge branch 'rt/string-list-lookup-cleanup' into HEADJunio C Hamano Wed, 18 May 2016 21:40:12 +0000 (14:40 -0700)

Merge branch 'rt/string-list-lookup-cleanup' into HEAD

Code cleanup.

* rt/string-list-lookup-cleanup:
string_list: use string-list API in unsorted_string_list_lookup()

Merge branch 'jk/fix-attribute-macro-in-2.5' into HEADJunio C Hamano Wed, 18 May 2016 21:40:12 +0000 (14:40 -0700)

Merge branch 'jk/fix-attribute-macro-in-2.5' into HEAD

Code fixup.

* jk/fix-attribute-macro-in-2.5:
remote.c: spell __attribute__ correctly

Merge branch 'sg/test-lib-simplify-expr-away' into... Junio C Hamano Wed, 18 May 2016 21:40:11 +0000 (14:40 -0700)

Merge branch 'sg/test-lib-simplify-expr-away' into HEAD

Code cleanup.

* sg/test-lib-simplify-expr-away:
test-lib: simplify '--option=value' parsing

Merge branch 'nd/remove-unused' into HEADJunio C Hamano Wed, 18 May 2016 21:40:11 +0000 (14:40 -0700)

Merge branch 'nd/remove-unused' into HEAD

Code cleanup.

* nd/remove-unused:
wrapper.c: delete dead function git_mkstemps()
dir.c: remove dead function fnmatch_icase()

Merge branch 'sk/gitweb-highlight-encoding' into HEADJunio C Hamano Wed, 18 May 2016 21:40:10 +0000 (14:40 -0700)

Merge branch 'sk/gitweb-highlight-encoding' into HEAD

Some multi-byte encoding can have a backslash byte as a later part
of one letter, which would confuse "highlight" filter used in
gitweb.

* sk/gitweb-highlight-encoding:
gitweb: apply fallback encoding before highlight

Merge branch 'ls/travis-submitting-patches' into HEADJunio C Hamano Wed, 18 May 2016 21:40:09 +0000 (14:40 -0700)

Merge branch 'ls/travis-submitting-patches' into HEAD

* ls/travis-submitting-patches:
Documentation: add setup instructions for Travis CI

Merge branch 'js/close-packs-before-gc' into HEADJunio C Hamano Wed, 18 May 2016 21:40:09 +0000 (14:40 -0700)

Merge branch 'js/close-packs-before-gc' into HEAD

* js/close-packs-before-gc:
t5510: run auto-gc in the foreground

Merge branch 'ls/p4-lfs' into HEADJunio C Hamano Wed, 18 May 2016 21:40:08 +0000 (14:40 -0700)

Merge branch 'ls/p4-lfs' into HEAD

Recent update to Git LFS broke "git p4" by changing the output from
its "lfs pointer" subcommand.

* ls/p4-lfs:
git-p4: fix Git LFS pointer parsing
travis-ci: express Linux/OS X dependency versions more clearly
travis-ci: update Git-LFS and P4 to the latest version

Merge branch 'ls/p4-lfs-test-fix-2.7.0' into HEADJunio C Hamano Wed, 18 May 2016 21:40:08 +0000 (14:40 -0700)

Merge branch 'ls/p4-lfs-test-fix-2.7.0' into HEAD

Fix a broken test.

* ls/p4-lfs-test-fix-2.7.0:
t9824: fix wrong reference value
t9824: fix broken &&-chain in a subshell

Merge branch 'nf/mergetool-prompt' into HEADJunio C Hamano Wed, 18 May 2016 21:40:07 +0000 (14:40 -0700)

Merge branch 'nf/mergetool-prompt' into HEAD

UI consistency improvements.

* nf/mergetool-prompt:
difftool/mergetool: make the form of yes/no questions consistent

Merge branch 'jd/send-email-to-whom' into HEADJunio C Hamano Wed, 18 May 2016 21:40:07 +0000 (14:40 -0700)

Merge branch 'jd/send-email-to-whom' into HEAD

A question by "git send-email" to ask the identity of the sender
has been updated.

* jd/send-email-to-whom:
send-email: fix grammo in the prompt that asks e-mail recipients

Merge branch 'js/win32-mmap' into HEADJunio C Hamano Wed, 18 May 2016 21:40:06 +0000 (14:40 -0700)

Merge branch 'js/win32-mmap' into HEAD

mmap emulation on Windows has been optimized and work better without
consuming paging store when not needed.

* js/win32-mmap:
mmap(win32): avoid expensive fstat() call
mmap(win32): avoid copy-on-write when it is unnecessary
win32mmap: set errno appropriately

Merge branch 'jk/push-client-deadlock-fix' into HEADJunio C Hamano Wed, 18 May 2016 21:40:06 +0000 (14:40 -0700)

Merge branch 'jk/push-client-deadlock-fix' into HEAD

Some Windows SDK lacks pthread_sigmask() implementation and fails
to compile the recently updated "git push" codepath that uses it.

* jk/push-client-deadlock-fix:
Windows: only add a no-op pthread_sigmask() when needed
Windows: add pthread_sigmask() that does nothing
t5504: drop sigpipe=ok from push tests
fetch-pack: isolate sigpipe in demuxer thread
send-pack: isolate sigpipe in demuxer thread
run-command: teach async threads to ignore SIGPIPE
send-pack: close demux pipe before finishing async process

Merge branch 'sb/mv-submodule-fix' into HEADJunio C Hamano Wed, 18 May 2016 21:40:05 +0000 (14:40 -0700)

Merge branch 'sb/mv-submodule-fix' into HEAD

"git mv old new" did not adjust the path for a submodule that lives
as a subdirectory inside old/ directory correctly.

* sb/mv-submodule-fix:
mv: allow moving nested submodules

Merge branch 'da/user-useconfigonly' into HEADJunio C Hamano Wed, 18 May 2016 21:40:05 +0000 (14:40 -0700)

Merge branch 'da/user-useconfigonly' into HEAD

The "user.useConfigOnly" configuration variable makes it an error
if users do not explicitly set user.name and user.email. However,
its check was not done early enough and allowed another error to
trigger, reporting that the default value we guessed from the
system setting was unusable. This was a suboptimal end-user
experience as we want the users to set user.name/user.email without
relying on the auto-detection at all.

* da/user-useconfigonly:
ident: give "please tell me" message upon useConfigOnly error
ident: check for useConfigOnly before auto-detection of name/email

Merge branch 'ld/p4-test-py3' into HEADJunio C Hamano Wed, 18 May 2016 21:40:04 +0000 (14:40 -0700)

Merge branch 'ld/p4-test-py3' into HEAD

The test scripts for "git p4" (but not "git p4" implementation
itself) has been updated so that they would work even on a system
where the installed version of Python is python 3.

* ld/p4-test-py3:
git-p4 tests: time_in_seconds should use $PYTHON_PATH
git-p4 tests: work with python3 as well as python2
git-p4 tests: cd to / before running python

cat-file: default to --buffer when --batch-all-objects... Jeff King Wed, 18 May 2016 16:56:14 +0000 (12:56 -0400)

cat-file: default to --buffer when --batch-all-objects is used

Traditionally cat-file's batch-mode does not do any output
buffering. The reason is that a caller may have pipes
connected to its input and output, and would want to use
cat-file interactively, getting output immediately for each
input it sends.

This may involve a lot of small write() calls, which can be
slow. So we introduced --buffer to improve this, but we
can't turn it on by default, as it would break the
interactive case above.

However, when --batch-all-objects is used, we do not read
stdin at all. We generate the output ourselves as quickly as
possible, and then exit. In this case buffering is a strict
win, and it is simply a hassle for the user to have to
remember to specify --buffer.

This patch makes --buffer the default when --batch-all-objects
is used. Specifying "--buffer" manually is still OK, and you
can even override it with "--no-buffer" if you're a
masochist (or debugging).

For some real numbers, running:

git cat-file --batch-all-objects --batch-check='%(objectname)'

on torvalds/linux goes from:

real 0m1.464s
user 0m1.208s
sys 0m0.252s

to:

real 0m1.230s
user 0m1.172s
sys 0m0.056s

for a 16% speedup.

Suggested-by: Charles Bailey <charles@hashpling.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cat-file: avoid noop calls to sha1_object_info_extendedJeff King Wed, 18 May 2016 16:55:23 +0000 (12:55 -0400)

cat-file: avoid noop calls to sha1_object_info_extended

It is not unreasonable to ask cat-file for a batch-check
format of simply "%(objectname)". At first glance this seems
like a noop (you are generally already feeding the object
names on stdin!), but it has a few uses:

1. With --batch-all-objects, you can generate a listing of
the sha1s present in the repository, without any input.

2. You do not have to feed sha1s; you can feed arbitrary
sha1 expressions and have git resolve them en masse.

3. You can even feed a raw sha1, with the result that git
will tell you whether we actually have the object or
not.

In case 3, the call to sha1_object_info is useful; it tells
us whether the object exists or not (technically we could
swap this out for has_sha1_file, but the cost is roughly the
same).

In case 2, the existence check is of debatable value. A
mass-resolution might prefer performance to safety (against
outputting a value for a corrupted ref, for example).
However, the object lookup cost is likely not as noticeable
compared to the resolution cost. And since we have provided
that safety in the past, the conservative choice is to keep
it.

In case 1, though, the object lookup is a definite noop; we
know about the object because we found it in the object
database. There is no new information gained by making the
call.

This patch detects that case and optimizes out the call.
Here are best-of-five timings for linux.git:

[before]
$ time git cat-file --buffer \
--batch-all-objects \
--batch-check='%(objectname)'
real 0m2.117s
user 0m2.044s
sys 0m0.072s

[after]
$ time git cat-file --buffer \
--batch-all-objects \
--batch-check='%(objectname)'
real 0m1.230s
user 0m1.176s
sys 0m0.052s

There are two implementation details to note here.

One is that we detect the noop case by seeing that "struct
object_info" does not request any information. But besides
object existence, there is one other piece of information
which sha1_object_info may fill in: whether the object is
cached, loose, or packed. We don't currently provide that
information in the output, but if we were to do so later,
we'd need to take note and disable the optimization in that
case.

And that leads to the second note. If we were to output
that information, a better implementation would be to
remember where we saw the object in --batch-all-objects in
the first place, and avoid looking it up again by sha1.

In fact, we could probably squeeze out some extra
performance for less-trivial cases, too, by remembering the
pack location where we saw the object, and going directly
there to find its information (like type, size, etc). That
would in theory make this optimization unnecessary.

I didn't pursue that path here for two reasons:

1. It's non-trivial to implement, and has memory
implications. Because we sort and de-dup the list of
output sha1s, we'd have to record the pack information
for each object, too.

2. It doesn't save as much as you might hope. It saves the
find_pack_entry() call, but getting the size and type
for deltified objects requires walking down the delta
chain (for the real type) or reading the delta data
header (for the size). These costs tend to dominate the
non-trivial cases.

By contrast, this optimization is easy and self-contained,
and speeds up a real-world case I've used.

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

t1500: avoid setting environment variables outside... Eric Sunshine Wed, 18 May 2016 20:15:45 +0000 (16:15 -0400)

t1500: avoid setting environment variables outside of tests

Ideally, each test should be responsible for setting up state it needs
rather than relying upon transient global state. Toward this end, teach
test_rev_parse() to accept a "-g <dir>" option to allow callers to
specify the value of the GIT_DIR environment variable explicitly. Take
advantage of this new option to avoid polluting the global scope with
GIT_DIR assignments.

Implementation note: Typically, tests avoid polluting the global state
by wrapping transient environment variable assignments within a
subshell, however, this technique doesn't work here since test_config()
and test_unconfig() need to know GIT_DIR, as well, but neither function
can be used within a subshell. Consequently, GIT_DIR is instead cleared
manually via test_when_finished().

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1500: avoid setting configuration options outside... Eric Sunshine Wed, 18 May 2016 20:15:44 +0000 (16:15 -0400)

t1500: avoid setting configuration options outside of tests

Ideally, each test should be responsible for setting up state it needs
rather than relying upon transient global state. Toward this end, teach
test_rev_parse() to accept a "-b <value>" option to allow callers to set
"core.bare" explicitly or undefine it. Take advantage of this new option
to avoid setting "core.bare" outside of tests.

Under the hood, "-b <value>" invokes "test_config -C <dir>" (or
"test_unconfig -C <dir>"), thus git-config knows explicitly where to
find its configuration file. Consequently, the global GIT_CONFIG
environment variable required by the manual git-config invocations
outside of tests is no longer needed, and is thus dropped.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1500: avoid changing working directory outside of... Eric Sunshine Wed, 18 May 2016 20:15:43 +0000 (16:15 -0400)

t1500: avoid changing working directory outside of tests

Ideally, each test should be responsible for setting up state it needs
rather than relying upon transient global state. Toward this end, teach
test_rev_parse() to accept a "-C <dir>" option to allow callers to
instruct it explicitly in which directory its tests should be run. Take
advantage of this new option to avoid changing the working directory
outside of tests.

Implementation note: test_rev_parse() passes "-C <dir>" along to
git-rev-parse with <dir> properly quoted. The natural and POSIX way to
do so is via ${dir:+-C "$dir"}, however, with some older broken shells,
this expression evaluates incorrectly to a single argument ("-C <dir>")
rather than the expected two (-C and "<dir>"). Work around this problem
with the slightly ungainly expression: ${dir:+-C} ${dir:+"$dir"}

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1500: test_rev_parse: facilitate future test enhancementsEric Sunshine Wed, 18 May 2016 20:15:42 +0000 (16:15 -0400)

t1500: test_rev_parse: facilitate future test enhancements

Tests run by test_rev_parse() are nearly identical; each invokes
git-rev-parse with a single option and compares the result against an
expected value. Such duplication makes it onerous to extend the tests
since any change needs to be repeated in each test. Avoid the
duplication by parameterizing the test and driving it via a for-loop.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t6044: replace seq by test_seqJohannes Sixt Wed, 18 May 2016 05:51:39 +0000 (07:51 +0200)

t6044: replace seq by test_seq

seq is not available everywhere.

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

fast-import: do not truncate exported marks fileFelipe Contreras Tue, 17 May 2016 21:40:23 +0000 (16:40 -0500)

fast-import: do not truncate exported marks file

Certain lines of the marks file might be corrupted (or the objects
missing due to a garbage collection), but that's no reason to truncate
the file and essentially destroy the rest of it.

Ideally missing objects should not cause a crash, we could just skip
them, but that's another patch.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Thirteenth batch for 2.9Junio C Hamano Tue, 17 May 2016 21:47:06 +0000 (14:47 -0700)

Thirteenth batch for 2.9

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

Merge branch 'kf/gpg-sig-verification-doc'Junio C Hamano Tue, 17 May 2016 21:38:39 +0000 (14:38 -0700)

Merge branch 'kf/gpg-sig-verification-doc'

Documentation for "git merge --verify-signatures" has been updated
to clarify that the signature of only the commit at the tip is
verified. Also the phrasing used for signature and key validity is
adjusted to align with that used by OpenPGP.

* kf/gpg-sig-verification-doc:
Documentation: clarify signature verification

Merge branch 'js/windows-dotgit'Junio C Hamano Tue, 17 May 2016 21:38:39 +0000 (14:38 -0700)

Merge branch 'js/windows-dotgit'

On Windows, .git and optionally any files whose name starts with a
dot are now marked as hidden, with a core.hideDotFiles knob to
customize this behaviour.

* js/windows-dotgit:
mingw: remove unnecessary definition
mingw: introduce the 'core.hideDotFiles' setting

Merge branch 'va/mailinfo-doc-typofix'Junio C Hamano Tue, 17 May 2016 21:38:37 +0000 (14:38 -0700)

Merge branch 'va/mailinfo-doc-typofix'

Typofix.

* va/mailinfo-doc-typofix:
Documentation/git-mailinfo: fix typo

Merge branch 'jk/test-send-sh-x-trace-elsewhere'Junio C Hamano Tue, 17 May 2016 21:38:36 +0000 (14:38 -0700)

Merge branch 'jk/test-send-sh-x-trace-elsewhere'

Running tests with '-x' option to trace the individual command
executions is a useful way to debug test scripts, but some tests
that capture the standard error stream and check what the command
said can be broken with the trace output mixed in. When running
our tests under "bash", however, we can redirect the trace output
to another file descriptor to keep the standard error of programs
being tested intact.

* jk/test-send-sh-x-trace-elsewhere:
test-lib: set BASH_XTRACEFD automatically

Merge branch 'js/http-custom-headers'Junio C Hamano Tue, 17 May 2016 21:38:35 +0000 (14:38 -0700)

Merge branch 'js/http-custom-headers'

Update tests for "http.extraHeaders=<header>" to be portable back
to Apache 2.2 (the original depended on <RequireAll/> which is a
more recent feature).

* js/http-custom-headers:
submodule: ensure that -c http.extraheader is heeded
t5551: make the test for extra HTTP headers more robust
tests: adjust the configuration for Apache 2.2

Merge branch 'jk/rebase-interative-eval-fix'Junio C Hamano Tue, 17 May 2016 21:38:35 +0000 (14:38 -0700)

Merge branch 'jk/rebase-interative-eval-fix'

Portability enhancement for "rebase -i" to help platforms whose
shell does not like "for i in <empty>" (which is not POSIX-kosher).

* jk/rebase-interative-eval-fix:
rebase--interactive: avoid empty list in shell for-loop

Merge branch 'jc/fsck-nul-in-commit'Junio C Hamano Tue, 17 May 2016 21:38:34 +0000 (14:38 -0700)

Merge branch 'jc/fsck-nul-in-commit'

"git fsck" learned to catch NUL byte in a commit object as
potential error and warn.

* jc/fsck-nul-in-commit:
fsck: detect and warn a commit with embedded NUL
fsck_commit_buffer(): do not special case the last validation

Merge branch 'nd/test-helpers'Junio C Hamano Tue, 17 May 2016 21:38:33 +0000 (14:38 -0700)

Merge branch 'nd/test-helpers'

Switching between 'master' and 'next', between which the paths to
test helper binaries have changed, did not update bin-wrappers/*
scripts used in tests, causing false test failures.

* nd/test-helpers:
wrap-for-bin.sh: regenerate bin-wrappers when switching branches

Merge branch 'ls/travis-build-doc'Junio C Hamano Tue, 17 May 2016 21:38:33 +0000 (14:38 -0700)

Merge branch 'ls/travis-build-doc'

CI test was taught to build documentation pages.

* ls/travis-build-doc:
travis-ci: build documentation

Merge branch 'jc/ll-merge-internal'Junio C Hamano Tue, 17 May 2016 21:38:32 +0000 (14:38 -0700)

Merge branch 'jc/ll-merge-internal'

"git rerere" can get confused by conflict markers deliberately left
by the inner merge step, because they are indistinguishable from
the real conflict markers left by the outermost merge which are
what the end user and "rerere" need to look at. This was fixed by
making the conflict markers left by the inner merges a bit longer.

* jc/ll-merge-internal:
t6036: remove pointless test that expects failure
ll-merge: use a longer conflict marker for internal merge
ll-merge: fix typo in comment

Merge branch 'jc/linkgit-fix'Junio C Hamano Tue, 17 May 2016 21:38:31 +0000 (14:38 -0700)

Merge branch 'jc/linkgit-fix'

Many 'linkgit:<git documentation page>' references were broken,
which are all fixed with this.

* jc/linkgit-fix:
Documentation: fix linkgit references

Merge branch 'va/i18n-remote-comment-to-align'Junio C Hamano Tue, 17 May 2016 21:38:30 +0000 (14:38 -0700)

Merge branch 'va/i18n-remote-comment-to-align'

Message fix.

* va/i18n-remote-comment-to-align:
i18n: remote: add comment for translators

Merge branch 'tb/t5601-sed-fix'Junio C Hamano Tue, 17 May 2016 21:38:29 +0000 (14:38 -0700)

Merge branch 'tb/t5601-sed-fix'

Test fix.

* tb/t5601-sed-fix:
t5601: Remove trailing space in sed expression

Merge branch 'nd/error-errno'Junio C Hamano Tue, 17 May 2016 21:38:28 +0000 (14:38 -0700)

Merge branch 'nd/error-errno'

The code for warning_errno/die_errno has been refactored and a new
error_errno() reporting helper is introduced.

* nd/error-errno: (41 commits)
wrapper.c: use warning_errno()
vcs-svn: use error_errno()
upload-pack.c: use error_errno()
unpack-trees.c: use error_errno()
transport-helper.c: use error_errno()
sha1_file.c: use {error,die,warning}_errno()
server-info.c: use error_errno()
sequencer.c: use error_errno()
run-command.c: use error_errno()
rerere.c: use error_errno() and warning_errno()
reachable.c: use error_errno()
mailmap.c: use error_errno()
ident.c: use warning_errno()
http.c: use error_errno() and warning_errno()
grep.c: use error_errno()
gpg-interface.c: use error_errno()
fast-import.c: use error_errno()
entry.c: use error_errno()
editor.c: use error_errno()
diff-no-index.c: use error_errno()
...

Merge branch 'jc/test-seq'Junio C Hamano Tue, 17 May 2016 21:38:28 +0000 (14:38 -0700)

Merge branch 'jc/test-seq'

Test fix.

* jc/test-seq:
test-lib-functions.sh: rewrite test_seq without Perl
test-lib-functions.sh: remove misleading comment on test_seq

Merge branch 'es/test-gpg-tags'Junio C Hamano Tue, 17 May 2016 21:38:27 +0000 (14:38 -0700)

Merge branch 'es/test-gpg-tags'

Test fix.

* es/test-gpg-tags:
t6302: simplify non-gpg cases

Merge branch 'ak/t4151-ls-files-could-be-empty'Junio C Hamano Tue, 17 May 2016 21:38:26 +0000 (14:38 -0700)

Merge branch 'ak/t4151-ls-files-could-be-empty'

Test fix.

* ak/t4151-ls-files-could-be-empty:
t4151: make sure argument to 'test -z' is given

Merge branch 'jk/submodule-c-credential'Junio C Hamano Tue, 17 May 2016 21:38:25 +0000 (14:38 -0700)

Merge branch 'jk/submodule-c-credential'

An earlier addition of "sanitize_submodule_env" with 14111fc4 (git:
submodule honor -c credential.* from command line, 2016-02-29)
turned out to be a convoluted no-op; implement what it wanted to do
correctly, and stop filtering settings given via "git -c var=val".

* jk/submodule-c-credential:
submodule: stop sanitizing config options
submodule: use prepare_submodule_repo_env consistently
submodule--helper: move config-sanitizing to submodule.c
submodule: export sanitized GIT_CONFIG_PARAMETERS
t5550: break submodule config test into multiple sub-tests
t5550: fix typo in $HTTPD_URL

Merge branch 'nd/remote-plural-ours-plus-theirs'Junio C Hamano Tue, 17 May 2016 21:38:24 +0000 (14:38 -0700)

Merge branch 'nd/remote-plural-ours-plus-theirs'

Message fix.

* nd/remote-plural-ours-plus-theirs:
remote.c: specify correct plural form in "commit diverge" message

Merge branch 'bn/config-doc-tt-varnames'Junio C Hamano Tue, 17 May 2016 21:38:23 +0000 (14:38 -0700)

Merge branch 'bn/config-doc-tt-varnames'

Doc formatting fixes.

* bn/config-doc-tt-varnames:
config: consistently format $variables in monospaced font

Merge branch 'va/i18n-misc-updates'Junio C Hamano Tue, 17 May 2016 21:38:22 +0000 (14:38 -0700)

Merge branch 'va/i18n-misc-updates'

Mark several messages for translation.

* va/i18n-misc-updates:
i18n: unpack-trees: avoid substituting only a verb in sentences
i18n: builtin/pull.c: split strings marked for translation
i18n: builtin/pull.c: mark placeholders for translation
i18n: git-parse-remote.sh: mark strings for translation
i18n: branch: move comment for translators
i18n: branch: unmark string for translation
i18n: builtin/rm.c: remove a comma ',' from string
i18n: unpack-trees: mark strings for translation
i18n: builtin/branch.c: mark option for translation
i18n: index-pack: use plural string instead of normal one

Merge branch 'js/t3404-typofix'Junio C Hamano Tue, 17 May 2016 21:38:22 +0000 (14:38 -0700)

Merge branch 'js/t3404-typofix'

* js/t3404-typofix:
t3404: fix typo

Merge branch 'sb/z-is-gnutar-ism'Junio C Hamano Tue, 17 May 2016 21:38:21 +0000 (14:38 -0700)

Merge branch 'sb/z-is-gnutar-ism'

* sb/z-is-gnutar-ism:
t6041: do not compress backup tar file
t3513: do not compress backup tar file

Merge branch 'lp/typofixes'Junio C Hamano Tue, 17 May 2016 21:38:20 +0000 (14:38 -0700)

Merge branch 'lp/typofixes'

* lp/typofixes:
typofix: assorted typofixes in comments, documentation and messages

Merge branch 'sb/submodule-deinit-all'Junio C Hamano Tue, 17 May 2016 21:38:19 +0000 (14:38 -0700)

Merge branch 'sb/submodule-deinit-all'

Correct faulty recommendation to use "git submodule deinit ." when
de-initialising all submodules, which would result in a strange
error message in a pathological corner case.

* sb/submodule-deinit-all:
submodule deinit: require '--all' instead of '.' for all submodules

Merge branch 'jc/config-pathname-type'Junio C Hamano Tue, 17 May 2016 21:38:19 +0000 (14:38 -0700)

Merge branch 'jc/config-pathname-type'

Consolidate description of tilde-expansion that is done to
configuration variables that take pathname to a single place.

* jc/config-pathname-type:
config: describe 'pathname' value type

Merge branch 'bn/http-cookiefile-config'Junio C Hamano Tue, 17 May 2016 21:38:18 +0000 (14:38 -0700)

Merge branch 'bn/http-cookiefile-config'

"http.cookieFile" configuration variable clearly wants a pathname,
but we forgot to treat it as such by e.g. applying tilde expansion.

* bn/http-cookiefile-config:
http: expand http.cookieFile as a path
Documentation: config: improve word ordering for http.cookieFile

Merge branch 'ab/hooks'Junio C Hamano Tue, 17 May 2016 21:38:17 +0000 (14:38 -0700)

Merge branch 'ab/hooks'

A new configuration variable core.hooksPath allows customizing
where the hook directory is.

* ab/hooks:
hooks: allow customizing where the hook directory is
githooks.txt: minor improvements to the grammar & phrasing
githooks.txt: amend dangerous advice about 'update' hook ACL
githooks.txt: improve the intro section

Merge branch 'sb/submodule-init'Junio C Hamano Tue, 17 May 2016 21:38:16 +0000 (14:38 -0700)

Merge branch 'sb/submodule-init'

Update of "git submodule" to move pieces of logic to C continues.

* sb/submodule-init:
submodule init: redirect stdout to stderr
submodule--helper update-clone: abort gracefully on missing .gitmodules
submodule init: fail gracefully with a missing .gitmodules file
submodule: port init from shell to C
submodule: port resolve_relative_url from shell to C

t1500: be considerate to future potential testsEric Sunshine Tue, 17 May 2016 19:36:26 +0000 (15:36 -0400)

t1500: be considerate to future potential tests

The final batch of git-rev-parse tests work against a non-local object
database named repo.git. This is done by renaming .git to repo.git and
pointing GIT_DIR at it, but the name is never restored to .git at the
end of the script, which can be problematic for tests added in the
future. Be more friendly by instead making repo.git a copy of .git.

Furthermore, make it clear that tests in repo.git will be independent
from the results of earlier tests done in .git by initializing repo.git
earlier in the test sequence.

Likewise, bundle remaining preparation (such as directory creation) into
a common setup test consistent with modern practice.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

difftool: handle unmerged files in dir-diff modeDavid Aguilar Mon, 16 May 2016 18:05:37 +0000 (11:05 -0700)

difftool: handle unmerged files in dir-diff mode

When files are unmerged they can show up as both unmerged and
modified in the output of `git diff --raw`. This causes
difftool's dir-diff to create filesystem entries for the same
path twice, which fails when it encounters a duplicate path.

Ensure that each worktree path is only processed once.
Add a test to demonstrate the breakage.

Reported-by: Jan Smets <jan@smets.cx>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

difftool: initialize variables for readabilityDavid Aguilar Mon, 16 May 2016 18:05:36 +0000 (11:05 -0700)

difftool: initialize variables for readability

The code always goes into one of the two conditional blocks but make it
clear that not doing so is an error condition by setting $ok to 0.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

always quote shell arguments to test -z/-nJeff King Fri, 13 May 2016 20:47:33 +0000 (16:47 -0400)

always quote shell arguments to test -z/-n

In shell code like:

test -z $foo
test -n $foo

that does not quote its arguments, it's easy to think that
it is actually looking at the contents of $foo in each case.
But if $foo is empty, then "test" does not see any argument
at all! The results are quite subtle.

POSIX specifies that test's behavior depends on the number
of arguments it sees, and if $foo is empty, it sees only
one. The behavior in this case is:

1 argument: Exit true (0) if $1 is not null; otherwise,
exit false.

So in the "-z $foo" case, if $foo is empty, then we check
that "-z" is non-null, and it returns success. Which happens
to match what we expected. But for "-n $foo", if $foo is
empty, we'll see that "-n" is non-null and still return
success. That's the opposite of what we intended!

Furthermore, if $foo contains whitespace, we'll end up with
more than 2 arguments. The results in this case are
generally unspecified (unless the first part of $foo happens
to be a valid binary operator, in which case the results are
specified but certainly not what we intended).

And on top of this, even though "test -z $foo" _should_ work
for the empty case, some older shells (reportedly ksh88)
complain about the missing argument.

So let's make sure we consistently quote our variable
arguments to "test". After this patch, the results of:

git grep 'test -[zn] [^"]'

are empty.

Reported-by: Armin Kunaschik <megabreit@googlemail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9103: modernize test styleJeff King Fri, 13 May 2016 20:47:28 +0000 (16:47 -0400)

t9103: modernize test style

The main goal here was to avoid double-quotes for
surrounding the test snippet, since it makes the code hard
to read (and to grep for common problems).

But while we're here, we can fix a few other things:

- use test_path_* helpers, which are more robust and give
better error messages

- only "cd" inside a subshell, which leaves the
environment pristine if further tests are added

- consistently quote shell arguments. These aren't wrong
if we assume find-rev output doesn't have any
whitespace, but it doesn't hurt to be careful.

- replace the old-style 'test x$foo = x' with 'test -z
"$foo"'. Besides the quoting fix, this is the form we
generally use in our test suite.

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

t9107: switch inverted single/double quotes in testJeff King Fri, 13 May 2016 20:47:24 +0000 (16:47 -0400)

t9107: switch inverted single/double quotes in test

One of the test snippets in t9107 is enclosed in double
quotes, but then uses single quotes to surround an
interpolated variable inside the snippet, like:

test_expect_success '...' "
test -n '$head'
"

This happens to work because the variable is interpolated
_before_ the snippet is run, and the result is eval'd. So as
long as the variable does not contain any single quotes, the
two are equivalent. And it doesn't, as we know it is a sha1
from rev-parse above. But this construct is unnecessarily
confusing.

But we can go a step further in cleaning up. The test is
really checking that a particular ref has a value. Rather
than checking if rev-parse produced output, we can just move
rev-parse into the test itself, and rely on the exit code
from --verify. Nobody else cares about the $head variable at
all.

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

t9107: use "return 1" instead of "exit 1"Jeff King Fri, 13 May 2016 20:47:21 +0000 (16:47 -0400)

t9107: use "return 1" instead of "exit 1"

When a test runs a loop, it cannot rely on the usual
&&-chaining to propagate a failure inside the loop; it needs
to break out with a failure signal. However, unless you are
in a subshell, doing so with "exit 1" will exit the entire
test script, not just the test snippet we are in (and cause
the harness to complain that test_done was never reached).

So the fundamental point of this patch is s/exit/return/.
But while we're there, let's fix a number of style and
readability issues:

- snippets in double-quotes need an extra layer of quoting
for their meta-characters; let's avoid that by using
single quotes

- accumulating loop output by appending to a file in each
iteration is brittle, as it can be affected by content
left in the file by earlier tests. Instead, it's better
to redirect stdout for the whole loop, so we know the
output only comes from that loop.

- using "test -z" to check that diff output is empty is
overly verbose; we can just ask diff to use --exit-code.

- we can factor out long lists of refs to make it more
obvious we're using the same ones in each loop

- subshells are unnecessary when ending an &&-chain with
"|| return 1"

- minor style fixups like space-after-redirection, and
"do" and "done" on their own lines

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

diff: run arguments through precompose_argvAlexander Rinass Fri, 13 May 2016 20:41:02 +0000 (22:41 +0200)

diff: run arguments through precompose_argv

When running diff commands, a pathspec containing decomposed
unicode code points is not converted to precomposed unicode form
under Mac OS X, but we normalize the paths in the index and the
history to precomposed form on that platform. As a result, the
pathspec would not match and no diff is shown.

Unlike many builtin commands, the "diff" family of commands do
not use parse_options(), which is how other builtin commands
indirectly call precompose_argv() to normalize argv[] into
precomposed form on Mac OSX. Teach these commands to call
precompose_argv() themselves.

Note that precomopose_argv() normalizes not just paths but all
command line arguments, so things like "git diff -G $string"
when $string has the decomposed form would first be normalized
into the precomposed form and would stop hitting the same string
in the decomposed form in the diff output with this change.

It is not a problem per-se, as "log" family of commands already use
parse_options() and call precompose_argv()--we can think of this
change as making the "diff" family of commands behave in a similar
way as the commands in the "log" family.

Signed-off-by: Alexander Rinass <alex@fournova.com>
Helped-by: Torsten Bòˆgershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t9100,t3419: enclose all test code in single-quotesJeff King Fri, 13 May 2016 20:47:18 +0000 (16:47 -0400)

t9100,t3419: enclose all test code in single-quotes

A few tests here use double-quotes around the snippets of
shell code to run the tests. None of these tests wants to do
any interpolation at all, and it just leads to an extra
layer of quoting around all double-quotes and dollar signs
inside the snippet. Let's switch to single quotes, like
most other test scripts.

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

t/lib-git-svn: drop $remote_git_svn and $git_svn_idJeff King Fri, 13 May 2016 20:47:14 +0000 (16:47 -0400)

t/lib-git-svn: drop $remote_git_svn and $git_svn_id

These variables were added in 16805d3 (t/t91XX-svn: start
removing use of "git-" from these tests, 2008-09-08) so that
running:

git grep git-

would return fewer hits. At the time, we were transitioning
away from the use of the "dashed" git-foo form.

That transition has been over for years, and grepping for
"git-" in the test suite yields thousands of hits anyway
(all presumably false positives).

With their original purpose gone, these variables serve only
to obfuscate the tests. Let's get rid of them.

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

Twelfth batch for 2.9Junio C Hamano Fri, 13 May 2016 20:23:24 +0000 (13:23 -0700)

Twelfth batch for 2.9

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

Merge branch 'sb/submodule-module-list-pathspec-fix'Junio C Hamano Fri, 13 May 2016 20:18:28 +0000 (13:18 -0700)

Merge branch 'sb/submodule-module-list-pathspec-fix'

* sb/submodule-module-list-pathspec-fix:
submodule deinit test: fix broken && chain in subshell

Merge branch 'jc/commit-tree-ignore-commit-gpgsign'Junio C Hamano Fri, 13 May 2016 20:18:27 +0000 (13:18 -0700)

Merge branch 'jc/commit-tree-ignore-commit-gpgsign'

"git commit-tree" plumbing command required the user to always sign
its result when the user sets the commit.gpgsign configuration
variable, which was an ancient mistake. Rework "git rebase" that
relied on this mistake so that it reads commit.gpgsign and pass (or
not pass) the -S option to "git commit-tree" to keep the end-user
expectation the same, while teaching "git commit-tree" to ignore
the configuration variable. This will stop requiring the users to
sign commit objects used internally as an implementation detail of
"git stash".

* jc/commit-tree-ignore-commit-gpgsign:
commit-tree: do not pay attention to commit.gpgsign

git-multimail: update to release 1.3.1Matthieu Moy Fri, 13 May 2016 17:00:41 +0000 (19:00 +0200)

git-multimail: update to release 1.3.1

The changes are described in CHANGES.

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

Documentation: clarify signature verificationKeller Fuchs Fri, 13 May 2016 09:51:01 +0000 (09:51 +0000)

Documentation: clarify signature verification

Clarify that "merge --verify-signatures" checks the signature on the
tip commit of the history being merged.

Uniformise the vocabulary used wrt. key/signature validity with OpenPGP:
- a signature is valid if made by a key with a valid uid;
- in the default trust-model, a uid is valid if signed by a trusted key;
- a key is trusted if the (local) user set a trust level for it.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Keller Fuchs <KellerFuchs@hashbang.sh>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

perf: run "rebase -i" under perfJohannes Schindelin Fri, 13 May 2016 13:26:03 +0000 (15:26 +0200)

perf: run "rebase -i" under perf

This developer spent a lot of time trying to speed up the interactive
rebase, in particular on Windows. And will continue to do so.

To make it easier to demonstrate the performance improvement, let's have
a reproducible performance test.

The topic branch we use to test performance was found using these shell
commands (essentially searching for a long-enough topic branch in Git's
own history that touched the same file multiple times):

git rev-list --parents origin/master |
grep ' .* ' |
while read commit rest
do
patch_count=$(git rev-list --count $commit^..$commit^2)
test $patch_count -gt 20 || continue

merges="$(git rev-list --parents $commit^..$commit^2 |
grep ' .* ')"
test -z "$merges" || continue

patches_per_file="$(git log --pretty=%H --name-only \
$commit^..$commit^2 |
grep -v '^$' |
sort |
uniq -c -d |
sort -n -r)"
test -n "$patches_per_file" &&
test 20 -lt $(echo "$patches_per_file" |
sed -n '1s/^ *\([0-9]*\).*/\1/p') || continue

printf 'commit %s\n%s\n' "$commit" "$patches_per_file"
done

Note that we can get away with *not* having to reset to the original
branch tip before rebasing: we switch the first two "pick" lines every
time, so we end up with the same patch order after two rebases, and the
complexity of both rebases is equivalent.

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

perf: make the tests work in worktreesJohannes Schindelin Fri, 13 May 2016 13:25:58 +0000 (15:25 +0200)

perf: make the tests work in worktrees

This patch makes perf-lib.sh more robust so that it can run correctly
even inside a worktree. For example, it assumed that $GIT_DIR/objects is
the objects directory (which is not the case for worktrees) and it used
the commondir file verbatim, even if it contained a relative path.

Furthermore, the setup code expected `git rev-parse --git-dir` to spit
out a relative path, which is also not true for worktrees. Let's just
change the code to accept both relative and absolute paths, by avoiding
the `cd` into the copied working directory.

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

perf: let's disable symlinks when they are not availableJohannes Schindelin Fri, 13 May 2016 13:25:51 +0000 (15:25 +0200)

perf: let's disable symlinks when they are not available

We already have a perfectly fine prereq to tell us whether it is safe to
use symlinks. So let's use it.

This fixes the performance tests in Git for Windows' SDK, where symlinks
are not really available ([*1*]). This is not an issue with Git for
Windows itself because it configures core.symlinks=false in its system
config. However, the system config is disabled for the performance
tests, for obvious reasons: we want them to be independent of the
vagaries of any local configuration.

Footnote *1*: Windows has symbolic links. Git for Windows disables them
by default, though (for example: in standard setups, non-admins lack the
privilege to create symbolic links). For details, see
https://github.com/git-for-windows/git/wiki/Symbolic-Links

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

i18n: unpack-trees: avoid substituting only a verb... Vasco Almeida Thu, 12 May 2016 23:16:26 +0000 (23:16 +0000)

i18n: unpack-trees: avoid substituting only a verb in sentences

Instead of reusing the same set of message templates for checkout
and other actions and substituting the verb with "%s", prepare
separate message templates for each known action. That would make
it easier for translation into languages where the same verb may
conjugate differently depending on the message we are giving.

See gettext documentation for details:
http://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rerere: plug memory leaks upon "rerere forget" failureJunio C Hamano Wed, 11 May 2016 23:19:17 +0000 (16:19 -0700)

rerere: plug memory leaks upon "rerere forget" failure

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