git
6 years agoconvert "hashcmp() != 0" to "!hasheq()"
Jeff King [Tue, 28 Aug 2018 21:22:52 +0000 (17:22 -0400)] 
convert "hashcmp() != 0" to "!hasheq()"

This rounds out the previous three patches, covering the
inequality logic for the "hash" variant of the functions.

As with the previous three, the accompanying code changes
are the mechanical result of applying the coccinelle patch;
see those patches for more discussion.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoconvert "oidcmp() != 0" to "!oideq()"
Jeff King [Tue, 28 Aug 2018 21:22:48 +0000 (17:22 -0400)] 
convert "oidcmp() != 0" to "!oideq()"

This is the flip side of the previous two patches: checking
for a non-zero oidcmp() can be more strictly expressed as
inequality. Like those patches, we write "!= 0" in the
coccinelle transformation, which covers by isomorphism the
more common:

  if (oidcmp(E1, E2))

As with the previous two patches, this patch can be achieved
almost entirely by running "make coccicheck"; the only
differences are manual line-wrap fixes to match the original
code.

There is one thing to note for anybody replicating this,
though: coccinelle 1.0.4 seems to miss the case in
builtin/tag.c, even though it's basically the same as all
the others. Running with 1.0.7 does catch this, so
presumably it's just a coccinelle bug that was fixed in the
interim.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoconvert "hashcmp() == 0" to hasheq()
Jeff King [Tue, 28 Aug 2018 21:22:44 +0000 (17:22 -0400)] 
convert "hashcmp() == 0" to hasheq()

This is the partner patch to the previous one, but covering
the "hash" variants instead of "oid".  Note that our
coccinelle rule is slightly more complex to avoid triggering
the call in hasheq().

I didn't bother to add a new rule to convert:

  - hasheq(E1->hash, E2->hash)
  + oideq(E1, E2)

Since these are new functions, there won't be any such
existing callers. And since most of the code is already
using oideq, we're not likely to introduce new ones.

We might still see "!hashcmp(E1->hash, E2->hash)" from topics
in flight. But because our new rule comes after the existing
ones, that should first get converted to "!oidcmp(E1, E2)"
and then to "oideq(E1, E2)".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoconvert "oidcmp() == 0" to oideq()
Jeff King [Tue, 28 Aug 2018 21:22:40 +0000 (17:22 -0400)] 
convert "oidcmp() == 0" to oideq()

Using the more restrictive oideq() should, in the long run,
give the compiler more opportunities to optimize these
callsites. For now, this conversion should be a complete
noop with respect to the generated code.

The result is also perhaps a little more readable, as it
avoids the "zero is equal" idiom. Since it's so prevalent in
C, I think seasoned programmers tend not to even notice it
anymore, but it can sometimes make for awkward double
negations (e.g., we can drop a few !!oidcmp() instances
here).

This patch was generated almost entirely by the included
coccinelle patch. This mechanical conversion should be
completely safe, because we check explicitly for cases where
oidcmp() is compared to 0, which is what oideq() is doing
under the hood. Note that we don't have to catch "!oidcmp()"
separately; coccinelle's standard isomorphisms make sure the
two are treated equivalently.

I say "almost" because I did hand-edit the coccinelle output
to fix up a few style violations (it mostly keeps the
original formatting, but sometimes unwraps long lines).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agointroduce hasheq() and oideq()
Jeff King [Tue, 28 Aug 2018 21:22:35 +0000 (17:22 -0400)] 
introduce hasheq() and oideq()

The main comparison functions we provide for comparing
object ids are hashcmp() and oidcmp(). These are more
flexible than a strict equality check, since they also
express ordering. That makes them useful for sorting and
binary searching. However, it also makes them potentially
slower than a strict equality check. Consider this C code,
which is traditionally what our hashcmp has looked like:

  #include <string.h>
  int hashcmp(const unsigned char *a, const unsigned char *b)
  {
          return memcmp(a, b, 20);
  }

Compiling with "gcc -O2 -S -fverbose-asm", the generated
assembly shows that we actually call memcmp(). But if we
change this to a strict equality check:

          return !memcmp(a, b, 20);

we get a faster inline version:

          movq    (%rdi), %rax    # MEM[(void *)a_4(D)], MEM[(void *)a_4(D)]
          movq    8(%rdi), %rdx   # MEM[(void *)a_4(D)], tmp101
          xorq    (%rsi), %rax    # MEM[(void *)b_5(D)], tmp94
          xorq    8(%rsi), %rdx   # MEM[(void *)b_5(D)], tmp93
          orq     %rax, %rdx      # tmp94, tmp93
          jne     .L2     #,
          movl    16(%rsi), %eax  # MEM[(void *)b_5(D)], tmp104
          cmpl    %eax, 16(%rdi)  # tmp104, MEM[(void *)a_4(D)]
          je      .L5     #,

Obviously our hashcmp() doesn't include the "!". But because
it's an inline function, optimizing compilers are able to
see "!hashcmp(a,b)" in calling code and take advantage of
this case. So there has been no value thus far in
introducing a more restricted interface for doing strict
equality checks.

But as Git learns about more values for the_hash_algo, our
hashcmp() will grow more complicated and may even delegate
at runtime to functions optimized specifically for that hash
size. That breaks the inline connection we have, and the
compiler will have to assume that the caller really cares
about the sign and magnitude of the memcmp() result, even
though the vast majority don't.

We can solve that by introducing a hasheq() function (and
matching oideq() wrapper), which callers can use to make it
clear that they only care about equality. For now, the
implementation will literally be "!hashcmp()", but it frees
us up later to introduce code optimized specifically for the
equality check.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agococcinelle: use <...> for function exclusion
Jeff King [Tue, 28 Aug 2018 21:22:32 +0000 (17:22 -0400)] 
coccinelle: use <...> for function exclusion

Sometimes we want to suppress a coccinelle transformation
inside a particular function. For example, in finding
conversions of hashcmp() to oidcmp(), we should not convert
the call in oidcmp() itself, since that would cause infinite
recursion. We write that like this:

  @@
  identifier f != oidcmp;
  expression E1, E2;
  @@
    f(...) {...
  - hashcmp(E1->hash, E2->hash)
  + oidcmp(E1, E2)
    ...}

to match the interior of any function _except_ oidcmp().

Unfortunately, this doesn't catch all cases (e.g., the one
in sequencer.c that this patch fixes). The problem, as
explained by one of the Coccinelle developers in [1], is:

  For transformation, A ... B requires that B occur on every
  execution path starting with A, unless that execution path
  ends up in error handling code.  (eg, if (...) { ...
  return; }).  Here your A is the start of the function.  So
  you need a call to hashcmp on every path through the
  function, which fails when you add ifs.

  [...]

  Another issue with A ... B is that by default A and B
  should not appear in the matched region.  So your original
  rule matches only the case where every execution path
  contains exactly one call to hashcmp, not more than one.

One way to solve this is to put the pattern inside an
angle-bracket pattern like "<... P ...>", which allows zero
or more matches of P. That works (and is what this patch
does), but it has one drawback: it matches more than we care
about, and Coccinelle uses extra CPU. Here are timings for
"make coccicheck" before and after this patch:

  [before]
  real 1m27.122s
  user 7m34.451s
  sys 0m37.330s

  [after]
  real 2m18.040s
  user 10m58.310s
  sys 0m41.549s

That's not ideal, but it's more important for this to be
correct than to be fast. And coccicheck is already fairly
slow (and people don't run it for every single patch). So
it's an acceptable tradeoff.

There _is_ a better way to do it, which is to record the
position at which we find hashcmp(), and then check it
against the forbidden function list. Like:

  @@
  position p : script:python() { p[0].current_element != "oidcmp" };
  expression E1,E2;
  @@
  - hashcmp@p(E1->hash, E2->hash)
  + oidcmp(E1, E2)

This is only a little slower than the current code, and does
the right thing in all cases. Unfortunately, not all builds
of Coccinelle include python support (including the ones in
Debian). Requiring it may mean that fewer people can easily
run the tool, which is worse than it simply being a little
slower.

We may want to revisit this decision in the future if:

  - builds with python become more common

  - we find more uses for python support that tip the
    cost-benefit analysis

But for now this patch sticks with the angle-bracket
solution, and converts all existing cocci patches. This
fixes only one missed case in the current code, though it
makes a much better difference for some new rules I'm adding
(converting "!hashcmp()" to "hasheq()" misses over half the
possible conversions using the old form).

[1] https://public-inbox.org/git/alpine.DEB.2.21.1808240652370.2344@hadrien/

Helped-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGit 2.19-rc1 v2.19.0-rc1
Junio C Hamano [Tue, 28 Aug 2018 19:01:01 +0000 (12:01 -0700)] 
Git 2.19-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGetting ready for -rc1
Junio C Hamano [Mon, 27 Aug 2018 21:34:54 +0000 (14:34 -0700)] 
Getting ready for -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'ja/i18n-message-fixes'
Junio C Hamano [Mon, 27 Aug 2018 21:33:52 +0000 (14:33 -0700)] 
Merge branch 'ja/i18n-message-fixes'

Messages fix.

* ja/i18n-message-fixes:
  i18n: fix mistakes in translated strings

6 years agoMerge branch 'ds/commit-graph-fsck'
Junio C Hamano [Mon, 27 Aug 2018 21:33:51 +0000 (14:33 -0700)] 
Merge branch 'ds/commit-graph-fsck'

Finishing touches to doc.

* ds/commit-graph-fsck:
  config: fix commit-graph related config docs

6 years agoMerge branch 'js/range-diff'
Junio C Hamano [Mon, 27 Aug 2018 21:33:51 +0000 (14:33 -0700)] 
Merge branch 'js/range-diff'

Finishing touched to help string.

* js/range-diff:
  range-diff: update stale summary of --no-dual-color

6 years agoMerge branch 'sg/test-rebase-editor-fix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:50 +0000 (14:33 -0700)] 
Merge branch 'sg/test-rebase-editor-fix'

Test fix.

* sg/test-rebase-editor-fix:
  t/lib-rebase.sh: support explicit 'pick' commands in 'fake_editor.sh'

6 years agoMerge branch 'jk/hashcmp-optim-for-2.19'
Junio C Hamano [Mon, 27 Aug 2018 21:33:50 +0000 (14:33 -0700)] 
Merge branch 'jk/hashcmp-optim-for-2.19'

Partially revert the support for multiple hash functions to regain
hash comparison performance; we'd think of a way to do this better
in the next cycle.

* jk/hashcmp-optim-for-2.19:
  hashcmp: assert constant hash size

6 years agoMerge branch 'ab/test-must-be-empty-for-master'
Junio C Hamano [Mon, 27 Aug 2018 21:33:49 +0000 (14:33 -0700)] 
Merge branch 'ab/test-must-be-empty-for-master'

Test fixes.

* ab/test-must-be-empty-for-master:
  t6018-rev-list-glob: fix 'empty stdin' test

6 years agoMerge branch 'sg/t3420-autostash-fix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:49 +0000 (14:33 -0700)] 
Merge branch 'sg/t3420-autostash-fix'

Test fixes.

* sg/t3420-autostash-fix:
  t3420-rebase-autostash: don't try to grep non-existing files

6 years agoMerge branch 'sg/t3903-missing-fix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:48 +0000 (14:33 -0700)] 
Merge branch 'sg/t3903-missing-fix'

Test fixes.

* sg/t3903-missing-fix:
  t3903-stash: don't try to grep non-existing file

6 years agoMerge branch 'sg/t7501-thinkofix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:48 +0000 (14:33 -0700)] 
Merge branch 'sg/t7501-thinkofix'

Test fixes.

* sg/t7501-thinkofix:
  t7501-commit: drop silly command substitution

6 years agoMerge branch 'sg/t0020-conversion-fix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:46 +0000 (14:33 -0700)] 
Merge branch 'sg/t0020-conversion-fix'

Test fixes.

* sg/t0020-conversion-fix:
  t0020-crlf: check the right file

6 years agoMerge branch 'sg/t4051-fix'
Junio C Hamano [Mon, 27 Aug 2018 21:33:45 +0000 (14:33 -0700)] 
Merge branch 'sg/t4051-fix'

Test fixes.

* sg/t4051-fix:
  t4051-diff-function-context: read the right file

6 years agoMerge branch 'js/larger-timestamps'
Junio C Hamano [Mon, 27 Aug 2018 21:33:44 +0000 (14:33 -0700)] 
Merge branch 'js/larger-timestamps'

Portability fix.

* js/larger-timestamps:
  commit: use timestamp_t for author_date_slab

6 years agoMerge branch 'jk/use-compat-util-in-test-tool'
Junio C Hamano [Mon, 27 Aug 2018 21:33:43 +0000 (14:33 -0700)] 
Merge branch 'jk/use-compat-util-in-test-tool'

Dev tool update.

* jk/use-compat-util-in-test-tool:
  test-tool.h: include git-compat-util.h

6 years agoMerge branch 'sg/test-must-be-empty'
Junio C Hamano [Mon, 27 Aug 2018 21:33:43 +0000 (14:33 -0700)] 
Merge branch 'sg/test-must-be-empty'

Test fixes.

* sg/test-must-be-empty:
  tests: use 'test_must_be_empty' instead of 'test_cmp <empty> <out>'
  tests: use 'test_must_be_empty' instead of 'test_cmp /dev/null <out>'
  tests: use 'test_must_be_empty' instead of 'test ! -s'
  tests: use 'test_must_be_empty' instead of '! test -s'

6 years agoMerge branch 'rs/opt-updates'
Junio C Hamano [Mon, 27 Aug 2018 21:33:43 +0000 (14:33 -0700)] 
Merge branch 'rs/opt-updates'

"git cmd -h" updates.

* rs/opt-updates:
  parseopt: group literal string alternatives in argument help
  remote: improve argument help for add --mirror
  checkout-index: improve argument help for --stage

6 years agoMerge branch 'nd/complete-config-vars'
Junio C Hamano [Mon, 27 Aug 2018 21:33:42 +0000 (14:33 -0700)] 
Merge branch 'nd/complete-config-vars'

"git help --config" (which is used in command line completion)
missed the configuration variables not described in the main
config.txt file but are described in another file that is included
by it, which has been corrected.

* nd/complete-config-vars:
  generate-cmdlist.sh: collect config from all config.txt files

6 years agoMerge branch 'ab/unconditional-free-and-null'
Junio C Hamano [Mon, 27 Aug 2018 21:33:42 +0000 (14:33 -0700)] 
Merge branch 'ab/unconditional-free-and-null'

Code clean-up.

* ab/unconditional-free-and-null:
  refactor various if (x) FREE_AND_NULL(x) to just FREE_AND_NULL(x)

6 years agoMerge branch 'ep/worktree-quiet-option'
Junio C Hamano [Mon, 27 Aug 2018 21:33:42 +0000 (14:33 -0700)] 
Merge branch 'ep/worktree-quiet-option'

"git worktree" command learned "--quiet" option to make it less
verbose.

* ep/worktree-quiet-option:
  worktree: add --quiet option

6 years agoMerge branch 'sm/branch-sort-config'
Junio C Hamano [Mon, 27 Aug 2018 21:33:42 +0000 (14:33 -0700)] 
Merge branch 'sm/branch-sort-config'

"git branch --list" learned to take the default sort order from the
'branch.sort' configuration variable, just like "git tag --list"
pays attention to 'tag.sort'.

* sm/branch-sort-config:
  branch: support configuring --sort via .gitconfig

6 years agoMerge branch 'nd/config-core-checkstat-doc'
Junio C Hamano [Mon, 27 Aug 2018 21:33:42 +0000 (14:33 -0700)] 
Merge branch 'nd/config-core-checkstat-doc'

The meaning of the possible values the "core.checkStat"
configuration variable can take were not adequately documented,
which has been fixed.

* nd/config-core-checkstat-doc:
  config.txt: clarify core.checkStat

6 years agorange-diff: update stale summary of --no-dual-color
Kyle Meyer [Thu, 23 Aug 2018 21:57:48 +0000 (17:57 -0400)] 
range-diff: update stale summary of --no-dual-color

275267937b (range-diff: make dual-color the default mode, 2018-08-13)
replaced --dual-color with --no-dual-color but left the option's
summary untouched.  Rewrite the summary to describe --no-dual-color
rather than dual-color.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Kyle Meyer <kyle@kyleam.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoi18n: fix mistakes in translated strings
Jean-Noël Avila [Thu, 23 Aug 2018 21:00:56 +0000 (23:00 +0200)] 
i18n: fix mistakes in translated strings

Fix typos and convert a question which does not expect to be replied
to a simple advice.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoconfig: fix commit-graph related config docs
Derrick Stolee [Thu, 23 Aug 2018 15:51:19 +0000 (15:51 +0000)] 
config: fix commit-graph related config docs

The core.commitGraph config setting was accidentally removed from
the config documentation. In that same patch, the config setting
that writes a commit-graph during garbage collection was incorrectly
written to the doc as "gc.commitGraph" instead of "gc.writeCommitGraph".

Reported-by: Szeder Gábor <szeder.dev@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot/lib-rebase.sh: support explicit 'pick' commands in 'fake_editor.sh'
SZEDER Gábor [Thu, 23 Aug 2018 10:09:15 +0000 (12:09 +0200)] 
t/lib-rebase.sh: support explicit 'pick' commands in 'fake_editor.sh'

The verbose output of the test 'reword without issues functions as
intended' in 't3423-rebase-reword.sh', added in a9279c6785 (sequencer:
do not squash 'reword' commits when we hit conflicts, 2018-06-19),
contains the following error output:

  sed: -e expression #1, char 2: extra characters after command

This error comes from within the 'fake-editor.sh' script created by
'lib-rebase.sh's set_fake_editor() function, and the root cause is the
FAKE_LINES="pick 1 reword 2" variable in the test in question, in
particular the "pick" word.  'fake-editor.sh' assumes 'pick' to be the
default rebase command and doesn't support an explicit 'pick' command
in FAKE_LINES.  As a result, 'pick' will be used instead of a line
number when assembling the following 'sed' script:

  sed -n picks/^pick/pick/p

which triggers the aforementioned error.

Luckily, this didn't affect the test's correctness: the erroring 'sed'
command doesn't write anything to the todo script, and processing the
rest of FAKE_LINES generates the desired todo script, as if that
'pick' command were not there at all.

The minimal fix would be to remove the 'pick' word from FAKE_LINES,
but that would leave us susceptible to similar issues in the future.

Instead, teach the fake-editor script to recognize an explicit 'pick'
command, which is still a fairly trivial change.

In the future we might want to consider reinforcing this fake editor
script with an &&-chain and stricter parsing of the FAKE_LINES
variable (e.g. to error out when encountering unknown rebase commands
or commands and line numbers in the wrong order).

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agohashcmp: assert constant hash size
Jeff King [Thu, 23 Aug 2018 05:02:25 +0000 (01:02 -0400)] 
hashcmp: assert constant hash size

Prior to 509f6f62a4 (cache: update object ID functions for
the_hash_algo, 2018-07-16), hashcmp() called memcmp() with a
constant size of 20 bytes. Some compilers were able to turn
that into a few quad-word comparisons, which is faster than
actually calling memcmp().

In 509f6f62a4, we started using the_hash_algo->rawsz
instead. Even though this will always be 20, the compiler
doesn't know that while inlining hashcmp() and ends up just
generating a call to memcmp().

Eventually we'll have to deal with multiple hash sizes, but
for the upcoming v2.19, we can restore some of the original
performance by asserting on the size. That gives the
compiler enough information to know that the memcmp will
always be called with a length of 20, and it performs the
same optimization.

Here are numbers for p0001.2 run against linux.git on a few
versions. This is using -O2 with gcc 8.2.0.

  Test     v2.18.0             v2.19.0-rc0               HEAD
  ------------------------------------------------------------------------------
  0001.2:  34.24(33.81+0.43)   34.83(34.42+0.40) +1.7%   33.90(33.47+0.42) -1.0%

You can see that v2.19 is a little slower than v2.18. This
commit ended up slightly faster than v2.18, but there's a
fair bit of run-to-run noise (the generated code in the two
cases is basically the same). This patch does seem to be
consistently 1-2% faster than v2.19.

I tried changing hashcpy(), which was also touched by
509f6f62a4, in the same way, but couldn't measure any
speedup. Which makes sense, at least for this workload. A
traversal of the whole commit graph requires looking up
every entry of every tree via lookup_object(). That's many
multiples of the numbers of objects in the repository (most
of the lookups just return "yes, we already saw that
object").

[jn: verified using "make object.s" that the memcmp call goes away.]

Reported-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Jeff King <peff@peff.net
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot3420-rebase-autostash: don't try to grep non-existing files
SZEDER Gábor [Wed, 22 Aug 2018 18:13:20 +0000 (20:13 +0200)] 
t3420-rebase-autostash: don't try to grep non-existing files

Several tests in 't3420-rebase-autostash.sh' start various rebase
processes that are expected to fail because of merge conflicts.  These
tests then run '! grep' to ensure that the autostash feature did its
job, and the dirty contents of a file is gone.  However, due to the
test repo's history and the choice of upstream branch that file
shouldn't exist in the conflicted state at all.  Consequently, this
'grep' doesn't fail as expected, because it can't find the dirty
content, but it fails because it can't open the file.

Tighten this check by using 'test_path_is_missing' instead, thereby
avoiding unexpected errors from 'grep' as well.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot3903-stash: don't try to grep non-existing file
SZEDER Gábor [Wed, 22 Aug 2018 18:13:19 +0000 (20:13 +0200)] 
t3903-stash: don't try to grep non-existing file

The test 'store updates stash ref and reflog' in 't3903-stash.sh'
creates a stash from a new file, runs 'git reset --hard' to throw away
any modifications to the work tree, and then runs '! grep' to ensure
that the staged contents are gone.  Since the file didn't exist
before, it shouldn't exist after 'git reset' either.  Consequently,
this 'grep' doesn't fail as expected, because it can't find the staged
content, but it fails because it can't open the file.

Tighten this check by using 'test_path_is_missing' instead, thereby
avoiding an unexpected error from 'grep' as well.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'nd/pack-deltify-regression-fix'
Junio C Hamano [Wed, 22 Aug 2018 18:17:05 +0000 (11:17 -0700)] 
Merge branch 'nd/pack-deltify-regression-fix'

In a recent update in 2.18 era, "git pack-objects" started
producing a larger than necessary packfiles by missing
opportunities to use large deltas.

* nd/pack-deltify-regression-fix:
  pack-objects: fix performance issues on packing large deltas

6 years agot6018-rev-list-glob: fix 'empty stdin' test
SZEDER Gábor [Wed, 22 Aug 2018 17:48:20 +0000 (19:48 +0200)] 
t6018-rev-list-glob: fix 'empty stdin' test

Prior to d3c6751b18 (tests: make use of the test_must_be_empty
function, 2018-07-27), in the test 'rev-list should succeed with empty
output on empty stdin' in 't6018-rev-list-glob' the empty 'expect'
file served dual purpose: besides specifying the expected output, as
usual, it also served as empty input for 'git rev-list --stdin'.

Then d3c6751b18 came along, and, as part of the conversion to
'test_must_be_empty', removed this empty 'expect' file, not realizing
its secondary purpose.  Redirecting stdin from the now non-existing
file failed the test, but since this test expects failure in the first
place, this issue went unnoticed.

Redirect 'git rev-list's stdin explicitly from /dev/null to provide
empty input.  (Strictly speaking we don't need this redirection,
because the test script's stdin is already redirected from /dev/null
anyway, but I think it's better to be explicit about it.)

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot4051-diff-function-context: read the right file
SZEDER Gábor [Wed, 22 Aug 2018 12:44:37 +0000 (14:44 +0200)] 
t4051-diff-function-context: read the right file

The test ' context does not include preceding empty lines' in the
block of tests 'change with long common tail and no context' in
't4051-diff-function-context.sh' tries to read the file
'long_common_tail.diff.diff', but that file doesn't exist as its name
contains one more '.diff' suffixes than necessary.

Despite this error the test still succeeded without checking what it's
supposed to, because this erroneous read is done on the line:

  test "$(first_context_line <long_common_tail.diff.diff)" != " "

which means that:

  - the command substitution hides the error, so it won't fail the
    test, and

  - the result of the command substitution is the empty string, which
    is, of course, not equal to a single space character, so the
    condition is fulfilled, and the test succeeds.

As a minimal fix, fix the name of the file to be read.

In the future we might want to reorganize this test script (1) to use
'test_cmp' instead of 'test's and command substitutions to catch
failing commands and to provide helpful error messages, and (2) to
specify what the expected result actually _is_ instead of what it
isn't.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot0020-crlf: check the right file
SZEDER Gábor [Wed, 22 Aug 2018 12:44:36 +0000 (14:44 +0200)] 
t0020-crlf: check the right file

In the test 'checkout with autocrlf=input' in 't0020-crlf.sh', one of
the 'has_cr' checks looks at the non-existing file 'two' instead of
'dir/two'.  The test still succeeds, without actually checking what it
was supposed to, because this check is expected to fail anyway.

As a minimal fix, fix the name of the file to be checked.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agot7501-commit: drop silly command substitution
SZEDER Gábor [Tue, 21 Aug 2018 23:28:11 +0000 (01:28 +0200)] 
t7501-commit: drop silly command substitution

The test '--dry-run with conflicts fixed from a merge' in
't7501-commit.sh', added in 8dc874b2ee (wt-status.c: set commitable
bit if there is a meaningful merge., 2016-02-15), runs the following
unnecessary and downright bogus command substitution:

  ! $(git merge --no-commit commit-1) &&

I.e. after 'git merge ...' is executed and expectedly fails, the test
attempts to execute its output:

  Merging:
  80f2ea2 commit 2
  virtual commit-1
  found 1 common ancestor:
  e60d113 Initial commit
  Auto-merging test-file
  CONFLICT (content): Merge conflict in test-file
  Automatic merge failed; fix conflicts and then commit the result.

as a command, which most likely fails, because there is no such
command as "Merging:".  Then '!' negates the failed exit status, the
test continues, and eventually succeeds.

Remove this command substitution and use 'test_must_fail' to ensure
that 'git merge' fails.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocommit: use timestamp_t for author_date_slab
Derrick Stolee [Tue, 21 Aug 2018 20:54:12 +0000 (20:54 +0000)] 
commit: use timestamp_t for author_date_slab

The author_date_slab is used to store the author date of a commit
when walking with the --author-date flag in rev-list or log. This
was added as an 'unsigned long' in

81c6b38b "log: --author-date-order"

Since 'unsigned long' is ambiguous in its bit-ness across platforms
(64-bit in Linux, 32-bit in Windows, for example), most references
to the author dates in commit.c were converted to timestamp_t in

dddbad72 "timestamp_t: a new data type for timestamps"

However, the slab definition was missed, leading to a mismatch in
the data types in Windows. This would not reveal itself as a bug
unless someone authors a commit after February 2106, but commits
can store anything as their author date.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotest-tool.h: include git-compat-util.h
Jeff King [Tue, 21 Aug 2018 18:41:40 +0000 (14:41 -0400)] 
test-tool.h: include git-compat-util.h

The test-tool programs include "test-tool.h" as their first
include, which breaks our CodingGuideline of "the first
include must be git-compat-util.h or an equivalent".

Rather than change them all, let's instead make test-tool.h
one of those equivalents, just like we do for builtin.h
(which many of the actual git builtins include first).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotests: use 'test_must_be_empty' instead of 'test_cmp <empty> <out>'
SZEDER Gábor [Sun, 19 Aug 2018 21:57:25 +0000 (23:57 +0200)] 
tests: use 'test_must_be_empty' instead of 'test_cmp <empty> <out>'

Using 'test_must_be_empty' is shorter and more idiomatic than

  >empty &&
  test_cmp empty out

as it saves the creation of an empty file.  Furthermore, sometimes the
expected empty file doesn't have such a descriptive name like 'empty',
and its creation is far away from the place where it's finally used
for comparison (e.g. in 't7600-merge.sh', where two expected empty
files are created in the 'setup' test, but are used only about 500
lines later).

These cases were found by instrumenting 'test_cmp' to error out the
test script when it's used to compare empty files, and then converted
manually.

Note that even after this patch there still remain a lot of cases
where we use 'test_cmp' to check empty files:

  - Sometimes the expected output is not hard-coded in the test, but
    'test_cmp' is used to ensure that two similar git commands produce
    the same output, and that output happens to be empty, e.g. the
    test 'submodule update --merge  - ignores --merge  for new
    submodules' in 't7406-submodule-update.sh'.

  - Repetitive common tasks, including preparing the expected results
    and running 'test_cmp', are often extracted into a helper
    function, and some of this helper's callsites expect no output.

  - For the same reason as above, the whole 'test_expect_success'
    block is within a helper function, e.g. in 't3070-wildmatch.sh'.

  - Or 'test_cmp' is invoked in a loop, e.g. the test 'cvs update
    (-p)' in 't9400-git-cvsserver-server.sh'.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotests: use 'test_must_be_empty' instead of 'test_cmp /dev/null <out>'
SZEDER Gábor [Sun, 19 Aug 2018 21:57:24 +0000 (23:57 +0200)] 
tests: use 'test_must_be_empty' instead of 'test_cmp /dev/null <out>'

Using 'test_must_be_empty' is more idiomatic than 'test_cmp /dev/null
out', and its message on error is perhaps a bit more to the point.

This patch was basically created by running:

  sed -i -e 's%test_cmp /dev/null%test_must_be_empty%' t[0-9]*.sh

with the exception of the change in 'should not fail in an empty repo'
in 't7401-submodule-summary.sh', where it was 'test_cmp output
/dev/null'.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotests: use 'test_must_be_empty' instead of 'test ! -s'
SZEDER Gábor [Sun, 19 Aug 2018 21:57:23 +0000 (23:57 +0200)] 
tests: use 'test_must_be_empty' instead of 'test ! -s'

Using 'test_must_be_empty' is preferable to 'test ! -s', because it
gives a helpful error message if the given file is unexpectedly no
empty, while the latter remains completely silent.  Furthermore, it
also catches cases when the given file unexpectedly does not exist at
all.

This patch was created by:

  sed -i -e 's/test ! -s/test_must_be_empty/' t[0-9]*.sh

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agotests: use 'test_must_be_empty' instead of '! test -s'
SZEDER Gábor [Sun, 19 Aug 2018 21:57:22 +0000 (23:57 +0200)] 
tests: use 'test_must_be_empty' instead of '! test -s'

Using 'test_must_be_empty' is preferable to '! test -s', because it
gives a helpful error message if the given file is unexpectedly not
empty, while the latter remains completely silent.  Furthermore, it
also catches cases when the given file unexpectedly does not exist at
all.

This patch was basically created by:

  sed -i -e 's/! test -s/test_must_be_empty/' t[0-9]*.sh

with the following notable exceptions:

  - The '! test -s' check in '.gitmodules ignore=dirty suppresses
    submodules with untracked content' in 't7508-status.sh' is left
    as-is, because it's bogus and, therefore, it's subject of a
    dedicated patch.

  - The '! test -s' checks in 't9131-git-svn-empty-symlink.sh' and
    't9135-git-svn-moved-branch-empty-file.sh' are immediately
    preceeded by a 'test -f' to ensure that the files exist in the
    first place.  'test_must_be_empty' ensures that as well, so those
    'test -f' commands are removed as well.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoparseopt: group literal string alternatives in argument help
René Scharfe [Sun, 19 Aug 2018 17:34:48 +0000 (19:34 +0200)] 
parseopt: group literal string alternatives in argument help

This formally clarifies that the "--option=" part is the same for all
alternatives.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoremote: improve argument help for add --mirror
René Scharfe [Sun, 19 Aug 2018 17:34:43 +0000 (19:34 +0200)] 
remote: improve argument help for add --mirror

Group the possible values using a pair of parentheses and don't mark
them for translation, as they are literal strings that have to be used
as-is in any locale.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agocheckout-index: improve argument help for --stage
René Scharfe [Sun, 19 Aug 2018 17:34:35 +0000 (19:34 +0200)] 
checkout-index: improve argument help for --stage

Spell out all alternatives and avoid using a numerical range operator,
as it is not mentioned in CodingGuidelines and the resulting string is
still concise.  Wrap them in parentheses to document clearly that the
"--stage=" part is common among them.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agogenerate-cmdlist.sh: collect config from all config.txt files
Nguyễn Thái Ngọc Duy [Sun, 19 Aug 2018 10:52:10 +0000 (12:52 +0200)] 
generate-cmdlist.sh: collect config from all config.txt files

This script uses Documentation/config.txt as input for "git help
--config" and "git config" completion but it misses the fact that
config.txt includes other txt files. Include all *config.txt as input
when scanning for config keys. This could produce false positives, but
as long as we stick to the blah-config.txt naming convention, we
should be ok.

While at there, move diff.* from config.txt to diff-config.txt where
all other diff config keys are.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoGit 2.19-rc0 v2.19.0-rc0
Junio C Hamano [Mon, 20 Aug 2018 18:37:21 +0000 (11:37 -0700)] 
Git 2.19-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'ab/checkout-default-remote'
Junio C Hamano [Mon, 20 Aug 2018 19:53:46 +0000 (12:53 -0700)] 
Merge branch 'ab/checkout-default-remote'

* ab/checkout-default-remote:
  t2024: mark test using "checkout -p" with PERL prerequisite

6 years agoMerge branch 'hn/highlight-sideband-keywords'
Junio C Hamano [Mon, 20 Aug 2018 19:41:34 +0000 (12:41 -0700)] 
Merge branch 'hn/highlight-sideband-keywords'

The sideband code learned to optionally paint selected keywords at
the beginning of incoming lines on the receiving end.

* hn/highlight-sideband-keywords:
  sideband: do not read beyond the end of input
  sideband: highlight keywords in remote sideband output

6 years agoMerge branch 'nd/cherry-pick-quit-fix'
Junio C Hamano [Mon, 20 Aug 2018 19:41:34 +0000 (12:41 -0700)] 
Merge branch 'nd/cherry-pick-quit-fix'

"git cherry-pick --quit" failed to remove CHERRY_PICK_HEAD even
though we won't be in a cherry-pick session after it returns, which
has been corrected.

* nd/cherry-pick-quit-fix:
  cherry-pick: fix --quit not deleting CHERRY_PICK_HEAD

6 years agoMerge branch 'sb/submodule-cleanup'
Junio C Hamano [Mon, 20 Aug 2018 19:41:33 +0000 (12:41 -0700)] 
Merge branch 'sb/submodule-cleanup'

A few preliminary minor clean-ups in the area around submodules.

* sb/submodule-cleanup:
  builtin/submodule--helper: remove stray new line
  t7410: update to new style

6 years agoMerge branch 'pw/rebase-i-merge-segv-fix'
Junio C Hamano [Mon, 20 Aug 2018 19:41:33 +0000 (12:41 -0700)] 
Merge branch 'pw/rebase-i-merge-segv-fix'

"git rebase -i", when a 'merge <branch>' insn in its todo list
fails, segfaulted, which has been (minimally) corrected.

* pw/rebase-i-merge-segv-fix:
  rebase -i: fix SIGSEGV when 'merge <branch>' fails
  t3430: add conflicting commit

6 years agoMerge branch 'pw/rebase-i-squash-number-fix'
Junio C Hamano [Mon, 20 Aug 2018 19:41:33 +0000 (12:41 -0700)] 
Merge branch 'pw/rebase-i-squash-number-fix'

When "git rebase -i" is told to squash two or more commits into
one, it labeled the log message for each commit with its number.
It correctly called the first one "1st commit", but the next one
was "commit #1", which was off-by-one.  This has been corrected.

* pw/rebase-i-squash-number-fix:
  rebase -i: fix numbering in squash message

6 years agoMerge branch 'sb/config-write-fix'
Junio C Hamano [Mon, 20 Aug 2018 19:41:32 +0000 (12:41 -0700)] 
Merge branch 'sb/config-write-fix'

Recent update to "git config" broke updating variable in a
subsection, which has been corrected.

* sb/config-write-fix:
  git-config: document accidental multi-line setting in deprecated syntax
  config: fix case sensitive subsection names on writing
  t1300: document current behavior of setting options

6 years agoMerge branch 'ab/submodule-relative-url-tests'
Junio C Hamano [Mon, 20 Aug 2018 19:41:32 +0000 (12:41 -0700)] 
Merge branch 'ab/submodule-relative-url-tests'

Test updates.

* ab/submodule-relative-url-tests:
  submodule: add more exhaustive up-path testing

6 years agoMerge branch 'en/incl-forward-decl'
Junio C Hamano [Mon, 20 Aug 2018 19:41:32 +0000 (12:41 -0700)] 
Merge branch 'en/incl-forward-decl'

Code hygiene improvement for the header files.

* en/incl-forward-decl:
  Remove forward declaration of an enum
  compat/precompose_utf8.h: use more common include guard style
  urlmatch.h: fix include guard
  Move definition of enum branch_track from cache.h to branch.h
  alloc: make allocate_alloc_state and clear_alloc_state more consistent
  Add missing includes and forward declarations

6 years agoMerge branch 'jt/repack-promisor-packs'
Junio C Hamano [Mon, 20 Aug 2018 18:33:55 +0000 (11:33 -0700)] 
Merge branch 'jt/repack-promisor-packs'

After a partial clone, repeated fetches from promisor remote would
have accumulated many packfiles marked with .promisor bit without
getting them coalesced into fewer packfiles, hurting performance.
"git repack" now learned to repack them.

* jt/repack-promisor-packs:
  repack: repack promisor objects if -a or -A is set
  repack: refactor setup of pack-objects cmd

6 years agoMerge branch 'wc/make-funnynames-shared-lazy-prereq'
Junio C Hamano [Mon, 20 Aug 2018 18:33:55 +0000 (11:33 -0700)] 
Merge branch 'wc/make-funnynames-shared-lazy-prereq'

A test prerequisite defined by various test scripts with slightly
different semantics has been consolidated into a single copy and
made into a lazily defined one.

* wc/make-funnynames-shared-lazy-prereq:
  t: factor out FUNNYNAMES as shared lazy prereq

6 years agoMerge branch 'jh/partial-clone-doc'
Junio C Hamano [Mon, 20 Aug 2018 18:33:55 +0000 (11:33 -0700)] 
Merge branch 'jh/partial-clone-doc'

Doc updates.

* jh/partial-clone-doc:
  partial-clone: render design doc using asciidoc

6 years agoMerge branch 'js/chain-lint-attrfix'
Junio C Hamano [Mon, 20 Aug 2018 18:33:54 +0000 (11:33 -0700)] 
Merge branch 'js/chain-lint-attrfix'

Test fix.

* js/chain-lint-attrfix:
  chainlint: fix for core.autocrlf=true

6 years agoMerge branch 'sb/pull-rebase-submodule'
Junio C Hamano [Mon, 20 Aug 2018 18:33:54 +0000 (11:33 -0700)] 
Merge branch 'sb/pull-rebase-submodule'

"git pull --rebase -v" in a repository with a submodule barfed as
an intermediate process did not understand what "-v(erbose)" flag
meant, which has been fixed.

* sb/pull-rebase-submodule:
  git-submodule.sh: accept verbose flag in cmd_update to be non-quiet

6 years agoMerge branch 'js/range-diff'
Junio C Hamano [Mon, 20 Aug 2018 18:33:53 +0000 (11:33 -0700)] 
Merge branch 'js/range-diff'

"git tbdiff" that lets us compare individual patches in two
iterations of a topic has been rewritten and made into a built-in
command.

* js/range-diff: (21 commits)
  range-diff: use dim/bold cues to improve dual color mode
  range-diff: make --dual-color the default mode
  range-diff: left-pad patch numbers
  completion: support `git range-diff`
  range-diff: populate the man page
  range-diff --dual-color: skip white-space warnings
  range-diff: offer to dual-color the diffs
  diff: add an internal option to dual-color diffs of diffs
  color: add the meta color GIT_COLOR_REVERSE
  range-diff: use color for the commit pairs
  range-diff: add tests
  range-diff: do not show "function names" in hunk headers
  range-diff: adjust the output of the commit pairs
  range-diff: suppress the diff headers
  range-diff: indent the diffs just like tbdiff
  range-diff: right-trim commit messages
  range-diff: also show the diff between patches
  range-diff: improve the order of the shown commits
  range-diff: first rudimentary implementation
  Introduce `range-diff` to compare iterations of a topic branch
  ...

6 years agoMerge branch 'nd/no-the-index'
Junio C Hamano [Mon, 20 Aug 2018 18:33:53 +0000 (11:33 -0700)] 
Merge branch 'nd/no-the-index'

The more library-ish parts of the codebase learned to work on the
in-core index-state instance that is passed in by their callers,
instead of always working on the singleton "the_index" instance.

* nd/no-the-index: (24 commits)
  blame.c: remove implicit dependency on the_index
  apply.c: remove implicit dependency on the_index
  apply.c: make init_apply_state() take a struct repository
  apply.c: pass struct apply_state to more functions
  resolve-undo.c: use the right index instead of the_index
  archive-*.c: use the right repository
  archive.c: avoid access to the_index
  grep: use the right index instead of the_index
  attr: remove index from git_attr_set_direction()
  entry.c: use the right index instead of the_index
  submodule.c: use the right index instead of the_index
  pathspec.c: use the right index instead of the_index
  unpack-trees: avoid the_index in verify_absent()
  unpack-trees: convert clear_ce_flags* to avoid the_index
  unpack-trees: don't shadow global var the_index
  unpack-trees: add a note about path invalidation
  unpack-trees: remove 'extern' on function declaration
  ls-files: correct index argument to get_convert_attr_ascii()
  preload-index.c: use the right index instead of the_index
  dir.c: remove an implicit dependency on the_index in pathspec code
  ...

6 years agoMerge branch 'es/chain-lint-more'
Junio C Hamano [Mon, 20 Aug 2018 18:33:53 +0000 (11:33 -0700)] 
Merge branch 'es/chain-lint-more'

Improve built-in facility to catch broken &&-chain in the tests.

* es/chain-lint-more:
  chainlint: add test of pathological case which triggered false positive
  chainlint: recognize multi-line quoted strings more robustly
  chainlint: let here-doc and multi-line string commence on same line
  chainlint: recognize multi-line $(...) when command cuddled with "$("
  chainlint: match 'quoted' here-doc tags
  chainlint: match arbitrary here-docs tags rather than hard-coded names

6 years agoMerge branch 'sg/t5310-empty-input-fix'
Junio C Hamano [Mon, 20 Aug 2018 18:33:52 +0000 (11:33 -0700)] 
Merge branch 'sg/t5310-empty-input-fix'

Test fix.

* sg/t5310-empty-input-fix:
  t5310-pack-bitmaps: fix bogus 'pack-objects to file can use bitmap' test

6 years agoMerge branch 'js/mingw-o-append'
Junio C Hamano [Mon, 20 Aug 2018 18:33:52 +0000 (11:33 -0700)] 
Merge branch 'js/mingw-o-append'

Among the three codepaths we use O_APPEND to open a file for
appending, one used for writing GIT_TRACE output requires O_APPEND
implementation that behaves sensibly when multiple processes are
writing to the same file.  POSIX emulation used in the Windows port
has been updated to improve in this area.

* js/mingw-o-append:
  mingw: enable atomic O_APPEND

6 years agoMerge branch 'jk/for-each-object-iteration'
Junio C Hamano [Mon, 20 Aug 2018 18:33:52 +0000 (11:33 -0700)] 
Merge branch 'jk/for-each-object-iteration'

The API to iterate over all objects learned to optionally list
objects in the order they appear in packfiles, which helps locality
of access if the caller accesses these objects while as objects are
enumerated.

* jk/for-each-object-iteration:
  for_each_*_object: move declarations to object-store.h
  cat-file: use a single strbuf for all output
  cat-file: split batch "buf" into two variables
  cat-file: use oidset check-and-insert
  cat-file: support "unordered" output for --batch-all-objects
  cat-file: rename batch_{loose,packed}_object callbacks
  t1006: test cat-file --batch-all-objects with duplicates
  for_each_packed_object: support iterating in pack-order
  for_each_*_object: give more comprehensive docstrings
  for_each_*_object: take flag arguments as enum
  for_each_*_object: store flag definitions in a single location

6 years agoMerge branch 'ab/fetch-tags-noclobber'
Junio C Hamano [Mon, 20 Aug 2018 18:33:52 +0000 (11:33 -0700)] 
Merge branch 'ab/fetch-tags-noclobber'

Test and doc clean-ups.

* ab/fetch-tags-noclobber:
  pull doc: fix a long-standing grammar error
  fetch tests: correct a comment "remove it" -> "remove them"
  push tests: assert re-pushing annotated tags
  push tests: add more testing for forced tag pushing
  push tests: fix logic error in "push" test assertion
  push tests: remove redundant 'git push' invocation
  fetch tests: change "Tag" test tag to "testTag"

6 years agoMerge branch 'ng/mergetool-lose-final-prompt'
Junio C Hamano [Mon, 20 Aug 2018 18:33:51 +0000 (11:33 -0700)] 
Merge branch 'ng/mergetool-lose-final-prompt'

"git mergetool" stopped and gave an extra prompt to continue after
the last path has been handled, which did not make much sense.

* ng/mergetool-lose-final-prompt:
  mergetool: don't suggest to continue after last file

6 years agoMerge branch 'jt/commit-graph-per-object-store'
Junio C Hamano [Mon, 20 Aug 2018 18:33:51 +0000 (11:33 -0700)] 
Merge branch 'jt/commit-graph-per-object-store'

Test update.

* jt/commit-graph-per-object-store:
  t5318: avoid unnecessary command substitutions

6 years agoMerge branch 'ds/commit-graph-fsck'
Junio C Hamano [Mon, 20 Aug 2018 18:33:51 +0000 (11:33 -0700)] 
Merge branch 'ds/commit-graph-fsck'

Test fix.

* ds/commit-graph-fsck:
  t5318: use 'test_cmp_bin' to compare commit-graph files

6 years agoMerge branch 'jt/fetch-negotiator-skipping'
Junio C Hamano [Mon, 20 Aug 2018 18:33:51 +0000 (11:33 -0700)] 
Merge branch 'jt/fetch-negotiator-skipping'

Test fix.

* jt/fetch-negotiator-skipping:
  t5552: suppress upload-pack trace output

6 years agoMerge branch 'jc/gpg-status'
Junio C Hamano [Mon, 20 Aug 2018 18:33:50 +0000 (11:33 -0700)] 
Merge branch 'jc/gpg-status'

"git verify-tag" and "git verify-commit" have been taught to use
the exit status of underlying "gpg --verify" to signal bad or
untrusted signature they found.

* jc/gpg-status:
  gpg-interface: propagate exit status from gpg back to the callers

6 years agoMerge branch 'jc/update-index-doc'
Junio C Hamano [Mon, 20 Aug 2018 18:33:50 +0000 (11:33 -0700)] 
Merge branch 'jc/update-index-doc'

Doc update.

* jc/update-index-doc:
  update-index: there no longer is `apply --index-info`

6 years agoMerge branch 'en/update-index-doc'
Junio C Hamano [Mon, 20 Aug 2018 18:33:50 +0000 (11:33 -0700)] 
Merge branch 'en/update-index-doc'

Doc update.

* en/update-index-doc:
  git-update-index.txt: reword possibly confusing example

6 years agoMerge branch 'js/typofixes'
Junio C Hamano [Mon, 20 Aug 2018 18:33:50 +0000 (11:33 -0700)] 
Merge branch 'js/typofixes'

Comment update.

* js/typofixes:
  remote-curl: remove spurious period
  git-compat-util.h: fix typo

6 years agoMerge branch 'sk/instaweb-rh-update'
Junio C Hamano [Mon, 20 Aug 2018 18:33:49 +0000 (11:33 -0700)] 
Merge branch 'sk/instaweb-rh-update'

"git instaweb" has been adjusted to run better with newer Apache on
RedHat based distros.

* sk/instaweb-rh-update:
  git-instaweb: fix apache2 config with apache >= 2.4
  git-instaweb: support Fedora/Red Hat apache module path

6 years agoMerge branch 'en/t7406-fixes'
Junio C Hamano [Mon, 20 Aug 2018 18:33:48 +0000 (11:33 -0700)] 
Merge branch 'en/t7406-fixes'

Test fixes.

* en/t7406-fixes:
  t7406: avoid using test_must_fail for commands other than git
  t7406: prefer test_* helper functions to test -[feds]
  t7406: avoid having git commands upstream of a pipe
  t7406: simplify by using diff --name-only instead of diff --raw
  t7406: fix call that was failing for the wrong reason

6 years agoMerge branch 'js/rebase-merges-exec-fix'
Junio C Hamano [Mon, 20 Aug 2018 18:33:48 +0000 (11:33 -0700)] 
Merge branch 'js/rebase-merges-exec-fix'

The "--exec" option to "git rebase --rebase-merges" placed the exec
commands at wrong places, which has been corrected.

* js/rebase-merges-exec-fix:
  rebase --exec: make it work with --rebase-merges
  t3430: demonstrate what -r, --autosquash & --exec should do

6 years agoMerge branch 'ab/test-must-be-empty-for-master'
Junio C Hamano [Mon, 20 Aug 2018 18:33:48 +0000 (11:33 -0700)] 
Merge branch 'ab/test-must-be-empty-for-master'

Test updates.

* ab/test-must-be-empty-for-master:
  tests: make use of the test_must_be_empty function

6 years agoMerge branch 'ab/newhash-is-sha256'
Junio C Hamano [Mon, 20 Aug 2018 18:33:48 +0000 (11:33 -0700)] 
Merge branch 'ab/newhash-is-sha256'

Documentation update.

* ab/newhash-is-sha256:
  doc hash-function-transition: pick SHA-256 as NewHash
  doc hash-function-transition: note the lack of a changelog

6 years agot2024: mark test using "checkout -p" with PERL prerequisite
Ævar Arnfjörð Bjarmason [Sat, 18 Aug 2018 07:01:47 +0000 (07:01 +0000)] 
t2024: mark test using "checkout -p" with PERL prerequisite

Checkout with the -p switch uses the "add interactive" framework which
is written in Perl.

One test added in 8d7b558bae ("checkout & worktree: introduce
checkout.defaultRemote", 2018-06-05) didn't declare the PERL
prerequisite, breaking the test when built with NO_PERL.

Reported-by: CB Bailey <cb@hashpling.org>
Signed-off-by: CB Bailey <cb@hashpling.org>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agosideband: do not read beyond the end of input
Junio C Hamano [Sat, 18 Aug 2018 16:16:28 +0000 (09:16 -0700)] 
sideband: do not read beyond the end of input

The caller of maybe_colorize_sideband() gives a counted buffer
<src, n>, but the callee checked src[] as if it were a NUL terminated
buffer.  If src[] had all isspace() bytes in it, we would have made
n negative, and then

 (1) made number of strncasecmp() calls to see if the remaining
     bytes in src[] matched keywords, reading beyond the end of the
     array (this actually happens even if n does not go negative),
     and/or

 (2) called strbuf_add() with negative count, most likely triggering
     the "you want to use way too much memory" error due to unsigned
     integer overflow.

Fix both issues by making sure we do not go beyond &src[n].

In the longer term we may want to accept size_t as parameter for
clarity (even though we know that a sideband message we are painting
typically would fit on a line on a terminal and int is sufficient).
Write it down as a NEEDSWORK comment.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoworktree: add --quiet option
Elia Pinto [Wed, 15 Aug 2018 20:56:30 +0000 (20:56 +0000)] 
worktree: add --quiet option

Add the '--quiet' option to git worktree, as for the other git
commands. 'add' is the only command affected by it since all other
commands, except 'list', are currently silent by default.

[jc: appiled trivial fix-up to keep the tests from touching outside
the scratch area]

Helped-by: Martin Ågren <martin.agren@gmail.com>
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoSeventh batch for 2.19 cycle
Junio C Hamano [Fri, 17 Aug 2018 20:15:06 +0000 (13:15 -0700)] 
Seventh batch for 2.19 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
6 years agoMerge branch 'nd/complete-config-vars'
Junio C Hamano [Fri, 17 Aug 2018 20:09:59 +0000 (13:09 -0700)] 
Merge branch 'nd/complete-config-vars'

Build fix.

* nd/complete-config-vars:
  Makefile: add missing dependency for command-list.h

6 years agoMerge branch 'ar/t4150-am-scissors-test-fix'
Junio C Hamano [Fri, 17 Aug 2018 20:09:59 +0000 (13:09 -0700)] 
Merge branch 'ar/t4150-am-scissors-test-fix'

Test fix.

* ar/t4150-am-scissors-test-fix:
  t4150: fix broken test for am --scissors

6 years agoMerge branch 'js/pull-rebase-type-shorthand'
Junio C Hamano [Fri, 17 Aug 2018 20:09:59 +0000 (13:09 -0700)] 
Merge branch 'js/pull-rebase-type-shorthand'

"git pull --rebase=interactive" learned "i" as a short-hand for
"interactive".

* js/pull-rebase-type-shorthand:
  pull --rebase=<type>: allow single-letter abbreviations for the type

6 years agoMerge branch 'jk/diff-rendered-docs'
Junio C Hamano [Fri, 17 Aug 2018 20:09:58 +0000 (13:09 -0700)] 
Merge branch 'jk/diff-rendered-docs'

The end result of documentation update has been made to be
inspected more easily to help developers.

* jk/diff-rendered-docs:
  add a script to diff rendered documentation

6 years agoMerge branch 'hn/config-in-code-comment'
Junio C Hamano [Fri, 17 Aug 2018 20:09:58 +0000 (13:09 -0700)] 
Merge branch 'hn/config-in-code-comment'

Header update.

* hn/config-in-code-comment:
  config: document git config getter return value

6 years agoMerge branch 'nd/config-blame-sort'
Junio C Hamano [Fri, 17 Aug 2018 20:09:58 +0000 (13:09 -0700)] 
Merge branch 'nd/config-blame-sort'

Doc fix.

* nd/config-blame-sort:
  config.txt: reorder blame stuff to keep config keys sorted

6 years agoMerge branch 'en/t3031-title-fix'
Junio C Hamano [Fri, 17 Aug 2018 20:09:58 +0000 (13:09 -0700)] 
Merge branch 'en/t3031-title-fix'

Test fix.

* en/t3031-title-fix:
  t3031: update test description to mention desired behavior

6 years agoMerge branch 'sb/indent-heuristic-optim'
Junio C Hamano [Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)] 
Merge branch 'sb/indent-heuristic-optim'

"git diff --indent-heuristic" had a bad corner case performance.

* sb/indent-heuristic-optim:
  xdiff: reduce indent heuristic overhead

6 years agoMerge branch 'en/abort-df-conflict-fixes'
Junio C Hamano [Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)] 
Merge branch 'en/abort-df-conflict-fixes'

"git merge --abort" etc. did not clean things up properly when
there were conflicted entries in the index in certain order that
are involved in D/F conflicts.  This has been corrected.

* en/abort-df-conflict-fixes:
  read-cache: fix directory/file conflict handling in read_index_unmerged()
  t1015: demonstrate directory/file conflict recovery failures

6 years agoMerge branch 'mk/http-backend-content-length'
Junio C Hamano [Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)] 
Merge branch 'mk/http-backend-content-length'

The http-backend (used for smart-http transport) used to slurp the
whole input until EOF, without paying attention to CONTENT_LENGTH
that is supplied in the environment and instead expecting the Web
server to close the input stream.  This has been fixed.

* mk/http-backend-content-length:
  t5562: avoid non-portable "export FOO=bar" construct
  http-backend: respect CONTENT_LENGTH for receive-pack
  http-backend: respect CONTENT_LENGTH as specified by rfc3875
  http-backend: cleanup writing to child process

6 years agoMerge branch 'ot/ref-filter-object-info'
Junio C Hamano [Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)] 
Merge branch 'ot/ref-filter-object-info'

A few atoms like %(objecttype) and %(objectsize) in the format
specifier of "for-each-ref --format=<format>" can be filled without
getting the full contents of the object, but just with the object
header.  These cases have been optimized by calling
oid_object_info() API (instead of reading and inspecting the data).

* ot/ref-filter-object-info:
  ref-filter: use oid_object_info() to get object
  ref-filter: merge get_obj and get_object
  ref-filter: initialize eaten variable
  ref-filter: fill empty fields with empty values
  ref-filter: add info_source to valid_atom