gitweb.git
diff-parseopt: convert --dirstat and friendsNguyễn Thái Ngọc Duy Thu, 21 Feb 2019 11:16:03 +0000 (18:16 +0700)

diff-parseopt: convert --dirstat and friends

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

protocol-capabilities.txt: document symrefJosh Steadmon Wed, 20 Feb 2019 00:32:26 +0000 (16:32 -0800)

protocol-capabilities.txt: document symref

In 7171d8c15f ("upload-pack: send symbolic ref information as
capability"), we added a symref capability to the pack protocol, but it
was never documented. Adapt the patch notes from that commit and add
them to the capabilities documentation.

While we're at it, add a disclaimer to the top of
protocol-capabilities.txt noting that the doc only applies to v0/v1 of
the wire protocol.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

merge-options.txt: correct wording of --no-commit optionElijah Newren Thu, 21 Feb 2019 17:50:29 +0000 (09:50 -0800)

merge-options.txt: correct wording of --no-commit option

The former wording implied that --no-commit would always cause the
merge operation to "pause" and allow the user to make further changes
and/or provide a special commit message for the merge commit. This
is not the case for fast-forward merges, as there is no merge commit
to create. Without a merge commit, there is no place where it makes
sense to "stop the merge and allow the user to tweak changes"; doing
that would require a full rebase of some sort.

Since users may be unaware of whether their branches have diverged or
not, modify the wording to correctly address fast-forward cases as well
and suggest using --no-ff with --no-commit if the point is to ensure
that the merge stops before completing.

Reported-by: Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mention use of "hooks.allownonascii" in "man githooks"Robert P. J. Day Wed, 20 Feb 2019 07:53:54 +0000 (02:53 -0500)

mention use of "hooks.allownonascii" in "man githooks"

The default pre-commit script checks the config variable
"hooks.allownonascii" to determine whether to allow non-ASCII file
names -- mention this in "man githooks", just as the section on
"update" mentions the use of "hooks.allowunannotated".

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

receive-pack: fix use-after-free bugÆvar Arnfjörð Bjarmason Wed, 20 Feb 2019 00:00:33 +0000 (01:00 +0100)

receive-pack: fix use-after-free bug

The resolve_ref_unsafe() function can, and sometimes will in the case
of this codepath, return the char * passed to it to the caller. In
this case we construct a strbuf, free it, and then continue using the
dst_name after that free().

The code being fixed dates back to da3efdb17b ("receive-pack: detect
aliased updates which can occur with symrefs", 2010-04-19). When it
was originally added it didn't have this bug, it was introduced when
it was subsequently modified to use strbuf in 6b01ecfe22 ("ref
namespaces: Support remote repositories via upload-pack and
receive-pack", 2011-07-08).

This is theoretically a security issue, the C standard makes no
guarantees that a value you use after free() hasn't been poked at or
changed by something else on the system, but in practice modern OSs
will have mapped the relevant page to this process, so nothing else
would have used it. We do no further allocations between the free()
and use-after-free, so we ourselves didn't corrupt or change the
value.

Jeff investigated that and found: "It probably would be an issue if
the allocation were larger. glibc at least will use mmap()/munmap()
after some cutoff[1], in which case we'd get a segfault from hitting
the unmapped page. But for small allocations, it just bumps brk() and
the memory is still available for further allocations after
free(). [...] If you had a sufficiently large refname you might be
able to trigger the bug [...]. I tried to push such a ref. I had to
manually make a packed-refs file with the long name to avoid
filesystem limits (though probably you could have a long a/b/c/ name
on ext4). But the result can't actually be pushed, because it all has
to fit into a 64k pkt-line as part of the push protocol.".

An a alternative and more succinct way of implementing this would have
been to do the strbuf_release() at the end of check_aliased_update()
and use "goto out" instead of the early "return" statements. Hopefully
this approach of using a helper instead makes it easier to follow.

1. Jeff: "Weirdly, the mmap() cutoff on my glibc system is 135168
bytes. Which is...2^17 + 2^12? 33 pages? I'm sure there's a good
reason for that, but I didn't dig into it."

Reported-by: 王健强 <jianqiang.wang@securitygossip.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-parseopt: convert --numstat and --shortstatNguyễn Thái Ngọc Duy Sat, 16 Feb 2019 11:36:36 +0000 (18:36 +0700)

diff-parseopt: convert --numstat and --shortstat

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-parseopt: convert --patch-with-rawNguyễn Thái Ngọc Duy Sat, 16 Feb 2019 11:36:35 +0000 (18:36 +0700)

diff-parseopt: convert --patch-with-raw

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

completion: add more parameter value completionNguyễn Thái Ngọc Duy Sat, 16 Feb 2019 11:24:41 +0000 (18:24 +0700)

completion: add more parameter value completion

This adds value completion for a couple more paramters. To make it
easier to maintain these hard coded lists, add a comment at the original
list/code to remind people to update git-completion.bash too.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'bg-submodule-helper-typo' of github.com... Jiang Xin Wed, 20 Feb 2019 13:40:54 +0000 (21:40 +0800)

Merge branch 'bg-submodule-helper-typo' of github.com:pclouds/git-po

l10n: zh_CN: Revision for git v2.21.0 l10nFangyi Zhou Mon, 11 Feb 2019 11:28:55 +0000 (11:28 +0000)

l10n: zh_CN: Revision for git v2.21.0 l10n

Signed-off-by: Fangyi Zhou <fangyi.zhou@yuriko.moe>

l10n: zh_CN: for git v2.21.0 l10n round 1~2Jiang Xin Tue, 20 Nov 2018 02:18:06 +0000 (10:18 +0800)

l10n: zh_CN: for git v2.21.0 l10n round 1~2

Translate 214 new messages (4363t0f0u) for git 2.21.0.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

l10n: bg.po: correct typoNguyễn Thái Ngọc Duy Wed, 20 Feb 2019 09:59:24 +0000 (16:59 +0700)

l10n: bg.po: correct typo

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>

l10n: Update Swedish translation (4363t0f0u)Peter Krefting Mon, 11 Feb 2019 21:34:05 +0000 (22:34 +0100)

l10n: Update Swedish translation (4363t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>

Git 2.21-rc2 v2.21.0-rc2Junio C Hamano Tue, 19 Feb 2019 21:20:23 +0000 (13:20 -0800)

Git 2.21-rc2

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

Merge branch 'js/test-tool-gen-nuls'Junio C Hamano Tue, 19 Feb 2019 21:18:08 +0000 (13:18 -0800)

Merge branch 'js/test-tool-gen-nuls'

* js/test-tool-gen-nuls:
tests: teach the test-tool to generate NUL bytes and use it

Merge branch 'mk/t5562-no-input-to-too-large-an-input... Junio C Hamano Tue, 19 Feb 2019 21:18:08 +0000 (13:18 -0800)

Merge branch 'mk/t5562-no-input-to-too-large-an-input-test'

* mk/t5562-no-input-to-too-large-an-input-test:
t5562: do not depend on /dev/zero
Revert "t5562: replace /dev/zero with a pipe from generate_zero_bytes"

Merge branch 'mk/t5562-do-not-reuse-output-files'Junio C Hamano Tue, 19 Feb 2019 21:18:08 +0000 (13:18 -0800)

Merge branch 'mk/t5562-do-not-reuse-output-files'

* mk/t5562-do-not-reuse-output-files:
t5562: do not reuse output files

t5562: do not reuse output filesMax Kirillov Sat, 24 Nov 2018 09:37:19 +0000 (11:37 +0200)

t5562: do not reuse output files

Some expected failures of git-http-backend leaves running its children
(receive-pack or upload-pack) which still hold opened descriptors
to act.err and with some probability they live long enough to write
there their failure messages after next test has already truncated
the files. This causes occasional failures of the test script.

Avoid the issue by using separated output and error file for each test,
apprending the test number to their name.

Reported-by: Carlo Arenas <carenas@gmail.com>
Helped-by: Carlo Arenas <carenas@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

tests: teach the test-tool to generate NUL bytes and... Johannes Schindelin Thu, 14 Feb 2019 21:33:12 +0000 (13:33 -0800)

tests: teach the test-tool to generate NUL bytes and use it

In cc95bc2025 (t5562: replace /dev/zero with a pipe from
generate_zero_bytes, 2019-02-09), we replaced usage of /dev/zero (which
is not available on NonStop, apparently) by a Perl script snippet to
generate NUL bytes.

Sadly, it does not seem to work on NonStop, as t5562 reportedly hangs.

Worse, this also hangs in the Ubuntu 16.04 agents of the CI builds on
Azure Pipelines: for some reason, the Perl script snippet that is run
via `generate_zero_bytes` in t5562's 'CONTENT_LENGTH overflow ssite_t'
test case tries to write out an infinite amount of NUL bytes unless a
broken pipe is encountered, that snippet never encounters the broken
pipe, and keeps going until the build times out.

Oddly enough, this does not reproduce on the Windows and macOS agents,
nor in a local Ubuntu 18.04.

This developer tried for a day to figure out the exact circumstances
under which this hang happens, to no avail, the details remain a
mystery.

In the end, though, what counts is that this here change incidentally
fixes that hang (maybe also on NonStop?). Even more positively, it gets
rid of yet another unnecessary Perl invocation.

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

t5562: do not depend on /dev/zeroMax Kirillov Fri, 15 Feb 2019 16:42:37 +0000 (18:42 +0200)

t5562: do not depend on /dev/zero

It was reported [1] that NonStop platform does not have /dev/zero.

The test uses /dev/zero as a dummy input. Passing case (http-backed
failed because of too big input size) should not be reading anything
from it. If http-backend would erroneously try to read any data
returning EOF probably would be even safer than providing some
meaningless data.

Replace /dev/zero with /dev/null to avoid issues with platforms which do
not have /dev/zero.

[1] https://public-inbox.org/git/20190209185930.5256-4-randall.s.becker@rogers.com/

Reported-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Revert "t5562: replace /dev/zero with a pipe from gener... Junio C Hamano Tue, 19 Feb 2019 18:18:15 +0000 (10:18 -0800)

Revert "t5562: replace /dev/zero with a pipe from generate_zero_bytes"

Revert cc95bc20 ("t5562: replace /dev/zero with a pipe from
generate_zero_bytes", 2019-02-09), as not feeding anything to the
command is a better way to test it.

l10n: de.po: fix grammar in message for tag.cSebastian Staudt Sun, 3 Feb 2019 10:33:39 +0000 (11:33 +0100)

l10n: de.po: fix grammar in message for tag.c

Signed-off-by: Sebastian Staudt <koraktor@gmail.com>

l10n: de.po: fix a message for index-pack.cSebastian Staudt Sun, 3 Feb 2019 10:32:20 +0000 (11:32 +0100)

l10n: de.po: fix a message for index-pack.c

Signed-off-by: Sebastian Staudt <koraktor@gmail.com>

l10n: de.po: consistent translation of 'root commit'Sebastian Staudt Sun, 3 Feb 2019 10:21:14 +0000 (11:21 +0100)

l10n: de.po: consistent translation of 'root commit'

'root commit' is usually translated as 'Root-Commit'. But in one
occasion it‘s translated as 'Basis-Commit' which is the translation
for 'base commit'.

Signed-off-by: Sebastian Staudt <koraktor@gmail.com>

l10n: it: update the Italian translationAlessandro Menti Sun, 17 Feb 2019 17:04:51 +0000 (18:04 +0100)

l10n: it: update the Italian translation

Signed-off-by: Alessandro Menti <alessandro.menti@alessandromenti.it>

Merge branch 'master' of https://github.com/Softcatala... Jiang Xin Sun, 17 Feb 2019 07:28:15 +0000 (15:28 +0800)

Merge branch 'master' of https://github.com/Softcatala/git-po

l10n: es: 2.21.0 round 2Christopher Diaz Riveros Wed, 6 Feb 2019 13:36:53 +0000 (08:36 -0500)

l10n: es: 2.21.0 round 2

Signed-off-by: Christopher Diaz Riveros <chrisadr@gentoo.org>

Merge branch 'fr_2.21.0_rnd2' of git://github.com/jnavi... Jiang Xin Sat, 16 Feb 2019 01:54:53 +0000 (09:54 +0800)

Merge branch 'fr_2.21.0_rnd2' of git://github.com/jnavila/git

l10n: el: add Greek l10n team and essential translationsJimmy Angelakos Fri, 15 Feb 2019 02:28:19 +0000 (02:28 +0000)

l10n: el: add Greek l10n team and essential translations

Signed-off-by: Jimmy Angelakos <vyruss@hellug.gr>

l10n: fr.po v2.21.0 rnd 2Jean-Noël Avila Wed, 13 Feb 2019 19:35:13 +0000 (20:35 +0100)

l10n: fr.po v2.21.0 rnd 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>

l10n: fr.po Fix some typos from round3Fabien Villepinte Thu, 20 Dec 2018 08:59:45 +0000 (09:59 +0100)

l10n: fr.po Fix some typos from round3

Signed-off-by: Fabien Villepinte <fabien.villepinte@gmail.com>

l10n: fr.po Fix some typosFabien Villepinte Mon, 17 Dec 2018 11:51:58 +0000 (12:51 +0100)

l10n: fr.po Fix some typos

Signed-off-by: Fabien Villepinte <fabien.villepinte@gmail.com>

mingw: safe-guard a bit more against getenv() problemsJohannes Schindelin Fri, 15 Feb 2019 15:17:45 +0000 (07:17 -0800)

mingw: safe-guard a bit more against getenv() problems

Running up to v2.21.0, we fixed two bugs that were made prominent by the
Windows-specific change to retain copies of only the 30 latest getenv()
calls' returned strings, invalidating any copies of previous getenv()
calls' return values.

While this really shines a light onto bugs of the form where we hold
onto getenv()'s return values without copying them, it is also a real
problem for users.

And even if Jeff King's patches merged via 773e408881 (Merge branch
'jk/save-getenv-result', 2019-01-29) provide further work on that front,
we are far from done. Just one example: on Windows, we unset environment
variables when spawning new processes, which potentially invalidates
strings that were previously obtained via getenv(), and therefore we
have to duplicate environment values that are somehow involved in
spawning new processes (e.g. GIT_MAN_VIEWER in show_man_page()).

We do not have a chance to investigate, let address, all of those issues
in time for v2.21.0, so let's at least help Windows users by increasing
the number of getenv() calls' return values that are kept valid. The
number 64 was determined by looking at the average number of getenv()
calls per process in the entire test suite run on Windows (which is
around 40) and then adding a bit for good measure. And it is a power of
two (which would have hit yesterday's theme perfectly).

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

submodule: document default behaviorDenton Liu Fri, 15 Feb 2019 09:26:41 +0000 (01:26 -0800)

submodule: document default behavior

submodule's default behavior wasn't documented in both git-submodule.txt
and in the usage text of git-submodule. Document the default behavior
similar to how git-remote does it.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: Fixes to Catalan translationJordi Mas Fri, 15 Feb 2019 15:43:59 +0000 (16:43 +0100)

l10n: Fixes to Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>

l10n: git.pot: v2.21.0 round 2 (3 new, 3 removed)Jiang Xin Fri, 15 Feb 2019 02:12:14 +0000 (10:12 +0800)

l10n: git.pot: v2.21.0 round 2 (3 new, 3 removed)

Introduce 3 update messages for v2.21.0 l10n round 2 from commit
32ceace39f (Fix typos in translatable strings for v2.21.0, 2019-02-11).

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch 'master' of git://git./git/gitJiang Xin Fri, 15 Feb 2019 02:09:07 +0000 (10:09 +0800)

Merge branch 'master' of git://git./git/git

ref-filter: drop unused "sz" parametersJeff King Thu, 14 Feb 2019 05:51:03 +0000 (00:51 -0500)

ref-filter: drop unused "sz" parameters

Many of our grab_* functions, which parse the object content, take a
buf/sz pair of the object bytes. However, the functions which actually
parse the buffers (like find_wholine() and find_subpos()) never look at
"sz", and instead use functions like strchr() and strchrnul() that
assume the result is NUL-terminated.

This is OK in practice (and common for Git's parsing code), since we
always allocate an extra NUL when loading an object into memory (and
likewise, we are OK with stopping parsing if a commit or tag contains an
embedded NUL).

Let's drop these extra "sz" parameters, as they are misleading about how
the functions intend to access the buffer. We can drop from both the
functions mentioned above, which in turn lets us drop from their
callers, cascading all the way up to the top-level grab_values().

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

ref-filter: drop unused "obj" parametersJeff King Thu, 14 Feb 2019 05:50:58 +0000 (00:50 -0500)

ref-filter: drop unused "obj" parameters

The grab_person() and grab_sub_body_contents() functions take both an
object struct and a buf/sz pair of the object bytes. However, they use
only the latter, since "struct object" does not contain the parsed ident
(nor the whole commit message, of course).

Let's get rid of these misleading "struct object" parameters. It's
possible we may want them in the future (e.g., to generate error
messages that mention the object id), but since these are static
functions, we can easily add them back in later (and if we do want that
information, it's likely we'd pass it through a more generalized
"parsing context" struct anyway).

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

ref-filter: drop unused buf/sz pairsJeff King Thu, 14 Feb 2019 05:50:54 +0000 (00:50 -0500)

ref-filter: drop unused buf/sz pairs

The grab_tag_values() and grab_commit_values() functions take both the
"struct object" as well as the buf/sz pair for the actual object bytes.
However, neither function uses the latter, as they pull the data
directly from the parsed object struct.

Let's get rid of these misleading parameters.

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

files-backend: drop refs parameter from split_symref_up... Jeff King Thu, 14 Feb 2019 05:50:46 +0000 (00:50 -0500)

files-backend: drop refs parameter from split_symref_update()

This parameter was added in fcc42ea0c9 (split_symref_update(): add a
files_ref_store argument, 2016-09-04) without comment, but never used.
The splitting is purely mechanical, and doesn't depend on the particular
ref-store. Let's drop this parameter in the name of simplicity.

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

pack-objects: drop unused parameter from oe_map_new_pack()Jeff King Thu, 14 Feb 2019 05:50:32 +0000 (00:50 -0500)

pack-objects: drop unused parameter from oe_map_new_pack()

Since 43fa44fa3b (pack-objects: move in_pack out of struct object_entry,
2018-04-14), we store the source pack for each object as a small index
rather than as a pointer. When we see a new pack that has no allocated
index, we fall back to generating an array of pointers by calling
oe_map_new_pack().

Perhaps counter-intuitively, that function does not need to actually see
our new index-less pack. It only allocates and populates the array with
the existing packs, after which oe_set_in_pack() actually adds the new
pack to the array.

Let's drop the unused "struct packed_git" argument to oe_map_new_pack()
to avoid confusion.

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

merge-recursive: drop several unused parametersJeff King Thu, 14 Feb 2019 05:50:02 +0000 (00:50 -0500)

merge-recursive: drop several unused parameters

There are a few functions related to directory renames that have unused
parameters. After consulting with the author in [1], these seem to be
leftover cruft from the development process, and not signs of any bug.
Let's drop them.

[1] https://public-inbox.org/git/CABPp-BHobf8wbBsXF97scNQCzkxQukziODRXq6JOOWq61cAd9g@mail.gmail.com/

Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff: drop complete_rewrite parameter from run_external... Jeff King Thu, 14 Feb 2019 05:49:42 +0000 (00:49 -0500)

diff: drop complete_rewrite parameter from run_external_diff()

Our builtin_diff() wants to know whether break-detection found a
complete rewrite, because it changes how the diff is shown. However,
when calling out to an external diff, we don't pass this information
along (and doing so would require designing a new interface to the
user-provided program).

Let's drop the unused parameter to make this fact more clear.

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

diff: drop unused emit data parameter from sane_truncat... Jeff King Thu, 14 Feb 2019 05:48:27 +0000 (00:48 -0500)

diff: drop unused emit data parameter from sane_truncate_line()

We pass the "struct emit_callback" (which contains all of the context
for our diff) into sane_truncate_line(), but that function doesn't
actually use it. In theory we might eventually develop a diff option
that impacts this, but in the meantime let's not mislead anybody reading
the code. Since the function is static, it would be easy to pass it
again if it should ever become useful.

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

diff: drop unused color reset parametersJeff King Thu, 14 Feb 2019 05:48:13 +0000 (00:48 -0500)

diff: drop unused color reset parameters

Several of the emit_* functions take a "reset" color parameter, but
never actually look at it (instead, they call into emit_diff_symbol,
which handles the colors itself). Let's drop these unused parameters.

Note that emit_line() does still take a color/reset pair, and actually
uses it. It cannot be refactored to match these other functions because
it's the thing that emit_diff_symbol eventually calls into (i.e., it
does not by itself know which colors to use, and must be told by the
caller).

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

diff: drop options parameter from diffcore_fix_diff_index()Jeff King Thu, 14 Feb 2019 05:48:03 +0000 (00:48 -0500)

diff: drop options parameter from diffcore_fix_diff_index()

The sole purpose of this function is to fix the sorting order of the
queued diff entries. It doesn't need to know about any diff options, so
we can drop the unused parameter.

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

t5304: rename "sha1" variables to "oid"Jeff King Thu, 14 Feb 2019 11:07:36 +0000 (06:07 -0500)

t5304: rename "sha1" variables to "oid"

Let's make the script less jarring to read in a post-sha1 world by
using more hash-agnostic variable names.

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

prune: check SEEN flag for reachabilityJeff King Thu, 14 Feb 2019 04:38:21 +0000 (23:38 -0500)

prune: check SEEN flag for reachability

The git-prune command checks reachability by doing a traversal, and then
checking whether a given object exists in the global object hash. This
can yield false positives if any other part of the code had to create an
object struct for some reason. It's not clear whether this is even
possible, but it's more robust to rely on something a little more
concrete: the SEEN flag set by our traversal.

Note that there is a slight possibility of regression here, as we're
relying on mark_reachable_objects() to consistently set the flag.
However, it has always done so, and we're already relying on that fact
in prune_shallow(), which is called as part of git-prune. So this is
making these two parts of the prune operation more consistent.

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

prune: use bitmaps for reachability traversalJeff King Thu, 14 Feb 2019 04:37:43 +0000 (23:37 -0500)

prune: use bitmaps for reachability traversal

Pruning generally has to traverse the whole commit graph in order to
see which objects are reachable. This is the exact problem that
reachability bitmaps were meant to solve, so let's use them (if they're
available, of course).

Here are timings on git.git:

Test HEAD^ HEAD
------------------------------------------------------------------------
5304.6: prune with bitmaps 3.65(3.56+0.09) 1.01(0.92+0.08) -72.3%

And on linux.git:

Test HEAD^ HEAD
--------------------------------------------------------------------------
5304.6: prune with bitmaps 35.05(34.79+0.23) 3.00(2.78+0.21) -91.4%

The tests show a pretty optimal case, as we'll have just repacked and
should have pretty good coverage of all refs with our bitmaps. But
that's actually pretty realistic: normally prune is run via "gc" right
after repacking.

A few notes on the implementation:

- the change is actually in reachable.c, so it would improve
reachability traversals by "reflog expire --stale-fix", as well.
Those aren't performed regularly, though (a normal "git gc" doesn't
use --stale-fix), so they're not really worth measuring. There's a
low chance of regressing that caller, since the use of bitmaps is
totally transparent from the caller's perspective.

- The bitmap case could actually get away without creating a "struct
object", and instead the caller could just look up each object id in
the bitmap result. However, this would be a marginal improvement in
runtime, and it would make the callers much more complicated. They'd
have to handle both the bitmap and non-bitmap cases separately, and
in the case of git-prune, we'd also have to tweak prune_shallow(),
which relies on our SEEN flags.

- Because we do create real object structs, we go through a few
contortions to create ones of the right type. This isn't strictly
necessary (lookup_unknown_object() would suffice), but it's more
memory efficient to use the correct types, since we already know
them.

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

prune: lazily perform reachability traversalJeff King Thu, 14 Feb 2019 04:35:22 +0000 (23:35 -0500)

prune: lazily perform reachability traversal

The general strategy of "git prune" is to do a full reachability walk,
then for each loose object see if we found it in our walk. But if we
don't have any loose objects, we don't need to do the expensive walk in
the first place.

This patch postpones that walk until the first time we need to see its
results.

Note that this is really a specific case of a more general optimization,
which is that we could traverse only far enough to find the object under
consideration (i.e., stop the traversal when we find it, then pick up
again when asked about the next object, etc). That could save us in some
instances from having to do a full walk. But it's actually a bit tricky
to do with our traversal code, and you'd need to do a full walk anyway
if you have even a single unreachable object (which you generally do, if
any objects are actually left after running git-repack).

So in practice this lazy-load of the full walk catches one easy but
common case (i.e., you've just repacked via git-gc, and there's nothing
unreachable).

The perf script is fairly contrived, but it does show off the
improvement:

Test HEAD^ HEAD
-------------------------------------------------------------------------
5304.4: prune with no objects 3.66(3.60+0.05) 0.00(0.00+0.00) -100.0%

and would let us know if we accidentally regress this optimization.

Note also that we need to take special care with prune_shallow(), which
relies on us having performed the traversal. So this optimization can
only kick in for a non-shallow repository. Since this is easy to get
wrong and is not covered by existing tests, let's add an extra test to
t5304 that covers this case explicitly.

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

Merge branch 'ea/rebase-compat-doc-fix'Junio C Hamano Thu, 14 Feb 2019 22:28:22 +0000 (14:28 -0800)

Merge branch 'ea/rebase-compat-doc-fix'

* ea/rebase-compat-doc-fix:
docs/git-rebase: remove redundant entry in incompatible options list

Merge branch 'jc/no-grepping-for-strerror-in-tests'Junio C Hamano Thu, 14 Feb 2019 22:28:21 +0000 (14:28 -0800)

Merge branch 'jc/no-grepping-for-strerror-in-tests'

* jc/no-grepping-for-strerror-in-tests:
t1404: do not rely on the exact phrasing of strerror()

Merge branch 'jt/fetch-v2-sideband'Junio C Hamano Thu, 14 Feb 2019 22:28:20 +0000 (14:28 -0800)

Merge branch 'jt/fetch-v2-sideband'

"git fetch" and "git upload-pack" learned to send all exchange over
the sideband channel while talking the v2 protocol.

* jt/fetch-v2-sideband:
t/lib-httpd: pass GIT_TEST_SIDEBAND_ALL through Apache

Merge branch 'en/rebase-merge-on-sequencer'Junio C Hamano Thu, 14 Feb 2019 22:28:20 +0000 (14:28 -0800)

Merge branch 'en/rebase-merge-on-sequencer'

"git rebase --merge" as been reimplemented by reusing the internal
machinery used for "git rebase -i".

* en/rebase-merge-on-sequencer:
git-rebase.txt: update to reflect merge now implemented on sequencer

git-rebase.txt: update to reflect merge now implemented... Elijah Newren Thu, 14 Feb 2019 20:25:41 +0000 (12:25 -0800)

git-rebase.txt: update to reflect merge now implemented on sequencer

Since commit 8fe9c3f21dff (Merge branch 'en/rebase-merge-on-sequencer',
2019-02-06), --merge now uses the interactive backend (and matches its
behavior) so there is no separate merge backend anymore. Fix an
oversight in the docs that should have been updated with the previous
change.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t/lib-httpd: pass GIT_TEST_SIDEBAND_ALL through ApacheTodd Zullinger Thu, 14 Feb 2019 06:35:13 +0000 (01:35 -0500)

t/lib-httpd: pass GIT_TEST_SIDEBAND_ALL through Apache

07c3c2aa16 ("tests: define GIT_TEST_SIDEBAND_ALL", 2019-01-16) added
GIT_TEST_SIDEBAND_ALL to the apache.conf PassEnv list. Avoid warnings
from Apache when the variable is unset, as we do for GIT_VALGRIND* and
GIT_TRACE, from f628825481 ("t/lib-httpd: handle running under
--valgrind", 2012-07-24) and 89c57ab3f0 ("t: pass GIT_TRACE through
Apache", 2015-03-13), respectively.

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

remote-curl: reduce scope of rpc_state.resultJonathan Tan Thu, 14 Feb 2019 19:06:37 +0000 (11:06 -0800)

remote-curl: reduce scope of rpc_state.result

The result field in struct rpc_state is only used in rpc_service(), and
not in any functions it directly or indirectly calls. Refactor it to
become an argument of rpc_service() instead.

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

remote-curl: reduce scope of rpc_state.stdin_preambleJonathan Tan Thu, 14 Feb 2019 19:06:36 +0000 (11:06 -0800)

remote-curl: reduce scope of rpc_state.stdin_preamble

The stdin_preamble field in struct rpc_state is only used in
rpc_service(), and not in any functions it directly or indirectly calls.
Refactor it to become an argument of rpc_service() instead.

An observation of all callers of rpc_service() shows that the preamble
is always set, so we no longer need the "if (preamble)" check.

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

remote-curl: reduce scope of rpc_state.argvJonathan Tan Thu, 14 Feb 2019 19:06:35 +0000 (11:06 -0800)

remote-curl: reduce scope of rpc_state.argv

The argv field in struct rpc_state is only used in rpc_service(), and
not in any functions it directly or indirectly calls. Refactor it to
become an argument of rpc_service() instead.

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

t1404: do not rely on the exact phrasing of strerror()Junio C Hamano Thu, 14 Feb 2019 20:16:20 +0000 (12:16 -0800)

t1404: do not rely on the exact phrasing of strerror()

Not even in C locale, it is wrong to expect that the exact phrasing
"File exists" is used to show EEXIST.

Reported-by: Randall S. Becker <rsbecker@nexbridge.com>
Helped-by: Duy Nguyen <pclouds@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs/git-rebase: remove redundant entry in incompatible... Emilio Cobos Álvarez Wed, 13 Feb 2019 23:44:33 +0000 (00:44 +0100)

docs/git-rebase: remove redundant entry in incompatible options list

The --autosquash option is implied by the earlier --[no-]autosquash
entry in the list.

Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.21-rc1 v2.21.0-rc1Junio C Hamano Thu, 14 Feb 2019 02:18:11 +0000 (18:18 -0800)

Git 2.21-rc1

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

Merge branch 'ab/rebase-test-fix'Junio C Hamano Thu, 14 Feb 2019 02:18:43 +0000 (18:18 -0800)

Merge branch 'ab/rebase-test-fix'

* ab/rebase-test-fix:
rebase: fix regression in rebase.useBuiltin=false test mode

Merge branch 'rb/no-dev-zero-in-test'Junio C Hamano Thu, 14 Feb 2019 02:18:43 +0000 (18:18 -0800)

Merge branch 'rb/no-dev-zero-in-test'

* rb/no-dev-zero-in-test:
t5562: replace /dev/zero with a pipe from generate_zero_bytes
t5318: replace use of /dev/zero with generate_zero_bytes
test-lib-functions.sh: add generate_zero_bytes function

Merge branch 'rs/bash-is-in-coreutils-on-nonstop'Junio C Hamano Thu, 14 Feb 2019 02:18:43 +0000 (18:18 -0800)

Merge branch 'rs/bash-is-in-coreutils-on-nonstop'

* rs/bash-is-in-coreutils-on-nonstop:
config.mak.uname: move location of bash on NonStop to CoreUtils

Merge branch 'js/mingw-host-cpu'Junio C Hamano Thu, 14 Feb 2019 02:18:43 +0000 (18:18 -0800)

Merge branch 'js/mingw-host-cpu'

Windows update.

* js/mingw-host-cpu:
mingw: use a more canonical method to fix the CPU reporting

Merge branch 'sg/stress-test'Junio C Hamano Thu, 14 Feb 2019 02:18:42 +0000 (18:18 -0800)

Merge branch 'sg/stress-test'

Test improvement.

* sg/stress-test:
test-lib: fix non-portable pattern bracket expressions
test-lib: make '--stress' more bisect-friendly

Merge branch 'kd/t0028-octal-del-is-377-not-777'Junio C Hamano Thu, 14 Feb 2019 02:18:42 +0000 (18:18 -0800)

Merge branch 'kd/t0028-octal-del-is-377-not-777'

Test fix.

* kd/t0028-octal-del-is-377-not-777:
t0028: fix wrong octal values for BOM in setup

Merge branch 'bc/utf16-portability-fix'Junio C Hamano Thu, 14 Feb 2019 02:18:41 +0000 (18:18 -0800)

Merge branch 'bc/utf16-portability-fix'

The code and tests assume that the system supplied iconv() would
always use BOM in its output when asked to encode to UTF-16 (or
UTF-32), but apparently some implementations output big-endian
without BOM. A compile-time knob has been added to help such
systems (e.g. NonStop) to add BOM to the output to increase
portability.

* bc/utf16-portability-fix:
utf8: handle systems that don't write BOM for UTF-16

Merge branch 'nd/fileno-may-be-macro'Junio C Hamano Thu, 14 Feb 2019 02:18:41 +0000 (18:18 -0800)

Merge branch 'nd/fileno-may-be-macro'

* nd/fileno-may-be-macro:
git-compat-util: work around fileno(fp) that is a macro

Merge branch 'nd/get-oid-with-context-returns-an-enum'Junio C Hamano Thu, 14 Feb 2019 02:18:41 +0000 (18:18 -0800)

Merge branch 'nd/get-oid-with-context-returns-an-enum'

* nd/get-oid-with-context-returns-an-enum:
get_oid_with_context(): match prototype and implementation

Merge branch 'rj/sequencer-sign-off-header-static'Junio C Hamano Thu, 14 Feb 2019 02:18:41 +0000 (18:18 -0800)

Merge branch 'rj/sequencer-sign-off-header-static'

Code clean-up.

* rj/sequencer-sign-off-header-static:
sequencer: make sign_off_header a file local symbol

rebase: fix regression in rebase.useBuiltin=false test... Ævar Arnfjörð Bjarmason Wed, 13 Feb 2019 21:49:08 +0000 (22:49 +0100)

rebase: fix regression in rebase.useBuiltin=false test mode

Fix a recently introduced regression in c762aada1a ("rebase -x: sanity
check command", 2019-01-29) triggered when running the tests with
GIT_TEST_REBASE_USE_BUILTIN=false. See 62c23938fa ("tests: add a
special setup where rebase.useBuiltin is off", 2018-11-14) for how
that test mode works.

As discussed on-list[1] it's not worth it to implement the sanity
check in the legacy rebase code, we plan to remove it after the 2.21
release. So let's do the bare minimum to make the tests pass under the
GIT_TEST_REBASE_USE_BUILTIN=false special setup.

1. https://public-inbox.org/git/xmqqva1nbeno.fsf@gitster-ct.c.googlers.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: use a more canonical method to fix the CPU reportingJohannes Schindelin Wed, 13 Feb 2019 10:19:49 +0000 (02:19 -0800)

mingw: use a more canonical method to fix the CPU reporting

In `git version --build-options`, we report also the CPU, but in Git for
Windows we actually cross-compile the 32-bit version in a 64-bit Git for
Windows, so we cannot rely on the auto-detected value.

In 3815f64b0dd9 (mingw: fix CPU reporting in `git version
--build-options`, 2019-02-07), we fixed this by a Windows-only
workaround, making use of magic pre-processor constants, which works in
GCC, but most likely not all C compilers.

As pointed out by Eric Sunshine, there is a better way, anyway: to set
the Makefile variable HOST_CPU explicitly for cross-compiled Git. So
let's do that!

This reverts commit 3815f64b0dd983bdbf9242a0547706d5d81cb3e6 partially.

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

tests: avoid syntax triggering old dash bugÆvar Arnfjörð Bjarmason Wed, 13 Feb 2019 11:59:51 +0000 (12:59 +0100)

tests: avoid syntax triggering old dash bug

Avoid a bug in dash that's been fixed ever since its
ec2c84d ("[PARSER] Fix clobbering of checkkwd", 2011-03-15)[1] first
released with dash v0.5.7 in July 2011. This failing test was
introduced in 5f9674243d ("config: add --expiry-date", 2017-11-18).

This fixes 1/2 tests failing on Debian Lenny & Squeeze. The other
failure is due to 1b42f45255 ("git-svn: apply "svn.pathnameencoding"
before URL encoding", 2016-02-09).

The dash bug is triggered by this test because the heredoc contains a
command embedded in "$()" with a "{}" block coming right after
it. Refactoring the "$()" to e.g. be a variable that was set earlier
will also work around it, but let's instead break up the "EOF" and the
"{}".

An earlier version of this patch[2] mitigated the issue by breaking
the "$()" out of the "{}" block, that worked, but just because it
broke up the "EOF" and "{}" block. Putting e.g. "echo &&" between the
two would also work.

1. https://git.kernel.org/pub/scm/utils/dash/dash.git/
2. https://public-inbox.org/git/20181127164253.9832-1-avarab@gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config.mak.uname: move location of bash on NonStop... Randall S. Becker Sat, 9 Feb 2019 17:26:11 +0000 (12:26 -0500)

config.mak.uname: move location of bash on NonStop to CoreUtils

The default bash is now officially in /usr/coreutils/bin instead
of in /usr/local/bin. This version of bash is more stable and
recommended for all use as of the J06.22 and L18.02 operating
system revision levels. This new version provides more stability
of test results.

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

read-cache.c: fix writing "link" index ext with null... Nguyễn Thái Ngọc Duy Wed, 13 Feb 2019 09:51:29 +0000 (16:51 +0700)

read-cache.c: fix writing "link" index ext with null base oid

Since commit 7db118303a (unpack_trees: fix breakage when o->src_index !=
o->dst_index - 2018-04-23) and changes in merge code to use separate
index_state for source and destination, when doing a merge with split
index activated, we may run into this line in unpack_trees():

o->result.split_index = init_split_index(&o->result);

This is by itself not wrong. But this split index information is not
fully populated (and it's only so when move_cache_to_base_index() is
called, aka force splitting the index, or loading index_state from a
file). Both "base_oid" and "base" in this case remain null.

So when writing the main index down, we link to this index with null
oid (default value after init_split_index()), which also means "no split
index" internally. This triggers an incorrect base index refresh:

warning: could not freshen shared index '.../sharedindex.0{40}'

This patch makes sure we will not refresh null base_oid (because the
file is never there). It also makes sure not to write "link" extension
with null base_oid in the first place (no point having it at
all). Read code already has protection against null base_oid.

There is also another side fix in remove_split_index() that causes a
crash when doing "git update-index --no-split-index" when base_oid in
the index file is null. In this case we will not load
istate->split_index->base but we dereference it anyway and are rewarded
with a segfault. This should not happen anymore, but it's still wrong to
dereference a potential NULL pointer, especially when we do check for
NULL pointer in the next code.

Reported-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5562: replace /dev/zero with a pipe from generate_zero... Randall S. Becker Sat, 9 Feb 2019 18:59:30 +0000 (13:59 -0500)

t5562: replace /dev/zero with a pipe from generate_zero_bytes

To help platforms that lack /dev/zero (e.g. NonStop), replace use
of /dev/zero to feed "git http-backend" with a pipe of output from
the generate_zero_bytes helper.

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5318: replace use of /dev/zero with generate_zero_bytesRandall S. Becker Sat, 9 Feb 2019 18:59:29 +0000 (13:59 -0500)

t5318: replace use of /dev/zero with generate_zero_bytes

There are platforms (e.g. NonStop) that lack /dev/zero; use the
generate_zero_bytes helper we just introduced to append stream
of NULs at the end of the file.

The original, even though it uses "dd seek=... count=..." to make it
look like it is overwriting the middle part of an existing file, has
truncated the file before this step with another use of "dd", which
may make it tricky to see why this rewrite is a correct one.

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

get_oid_with_context(): match prototype and implementationDuy Nguyen Tue, 12 Feb 2019 12:43:23 +0000 (19:43 +0700)

get_oid_with_context(): match prototype and implementation

The get_oid_with_context() function is declared to return an enum in
cache.h, but defined to return an int in sha1-name.c. The compiler
notices this on AIX and rejects the build, since d1dd94b308 (Do not
print 'dangling' for cat-file in case of ambiguity - 2019-01-17) was
merged.

Return the correct type from the implementation to fix this.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-compat-util: work around fileno(fp) that is a macroDuy Nguyen Tue, 12 Feb 2019 14:14:41 +0000 (21:14 +0700)

git-compat-util: work around fileno(fp) that is a macro

On various BSD's, fileno(fp) is implemented as a macro that directly
accesses the fields in the FILE * object, which breaks a function that
accepts a "void *fp" parameter and calls fileno(fp) and expect it to
work.

Work it around by adding a compile-time knob FILENO_IS_A_MACRO that
inserts a real helper function in the middle of the callchain.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib-functions.sh: add generate_zero_bytes functionRandall S. Becker Sat, 9 Feb 2019 18:59:28 +0000 (13:59 -0500)

test-lib-functions.sh: add generate_zero_bytes function

t5318 and t5562 used /dev/zero, which is not portable. This function
provides both a fixed block of NUL bytes and an infinite stream of NULs.

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes/2.21: misc typo/English fixupsJeff King Tue, 12 Feb 2019 06:33:04 +0000 (01:33 -0500)

RelNotes/2.21: misc typo/English fixups

These are just some small fixes I noticed doing a complete read-through
(there are a few cases I left that are incomplete or abbreviated
sentences, but I think those are OK in this sort of bullet-list style).

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

RelNotes/2.21: tweak "--date=auto" mentionJeff King Tue, 12 Feb 2019 06:32:48 +0000 (01:32 -0500)

RelNotes/2.21: tweak "--date=auto" mention

In the feature that was eventually committed, "--date=auto" doesn't do
anything. It was generalized to "--date=auto:<format>".

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

Merge branch 'nd/imap-send-typofix'Junio C Hamano Tue, 12 Feb 2019 17:00:25 +0000 (09:00 -0800)

Merge branch 'nd/imap-send-typofix'

* nd/imap-send-typofix:
imap-send.c: add a missing space in error message

imap-send.c: add a missing space in error messageNguyễn Thái Ngọc Duy Mon, 11 Feb 2019 09:40:11 +0000 (16:40 +0700)

imap-send.c: add a missing space in error message

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

utf8: handle systems that don't write BOM for UTF-16brian m. carlson Tue, 12 Feb 2019 00:52:06 +0000 (00:52 +0000)

utf8: handle systems that don't write BOM for UTF-16

When serializing UTF-16 (and UTF-32), there are three possible ways to
write the stream. One can write the data with a BOM in either big-endian
or little-endian format, or one can write the data without a BOM in
big-endian format.

Most systems' iconv implementations choose to write it with a BOM in
some endianness, since this is the most foolproof, and it is resistant
to misinterpretation on Windows, where UTF-16 and the little-endian
serialization are very common. For compatibility with Windows and to
avoid accidental misuse there, Git always wants to write UTF-16 with a
BOM, and will refuse to read UTF-16 without it.

However, musl's iconv implementation writes UTF-16 without a BOM,
relying on the user to interpret it as big-endian. This causes t0028 and
the related functionality to fail, since Git won't read the file without
a BOM.

Add a Makefile and #define knob, ICONV_OMITS_BOM, that can be set if the
iconv implementation has this behavior. When set, Git will write a BOM
manually for UTF-16 and UTF-32 and then force the data to be written in
UTF-16BE or UTF-32BE. We choose big-endian behavior here because the
tests use the raw "UTF-16" encoding, which will be big-endian when the
implementation requires this knob to be set.

Update the tests to detect this case and write test data with an added
BOM if necessary. Always write the BOM in the tests in big-endian
format, since all iconv implementations that omit a BOM must use
big-endian serialization according to the Unicode standard.

Preserve the existing behavior for systems which do not have this knob
enabled, since they may use optimized implementations, including
defaulting to the native endianness, which may improve performance.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t0028: fix wrong octal values for BOM in setupKevin Daudt Mon, 11 Feb 2019 21:38:18 +0000 (22:38 +0100)

t0028: fix wrong octal values for BOM in setup

The setup code uses octal values with printf to generate a BOM for
UTF-16/32 BE/LE. It specifically uses '\777' to emit a 0xff byte. This
relies on the fact that most shells truncate the value above 0o377.

Ash however interprets '\777' as '\77' + a literal '7', resulting in an
invalid BOM.

Fix this by using the proper value of 0xff: '\377'.

Signed-off-by: Kevin Daudt <me@ikke.info>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: fix non-portable pattern bracket expressionsSZEDER Gábor Mon, 11 Feb 2019 19:58:03 +0000 (20:58 +0100)

test-lib: fix non-portable pattern bracket expressions

Use a '!' character to start a non-matching pattern bracket
expression, as specified by POSIX in Shell Command Language section
2.13.1 Patterns Matching a Single Character [1].

I used '^' instead in three places in the previous three commits, to
verify that the arguments of the '--stress=' and '--stress-limit='
options and the values of various '*_PORT' environment variables are
valid numbers. With certain shells, at least with dash (upstream and
in Ubuntu 14.04) and mksh, this led to various undesired behaviors:

# error message in case of a valid number
$ ~/src/dash/src/dash ./t3903-stash.sh --stress=8
error: --stress=<N> requires the number of jobs to run

# not the expected error message
$ ~/src/dash/src/dash ./t3903-stash.sh --stress=foo
./t3903-stash.sh: 238: test: Illegal number: foo

# no error message at all?!
$ mksh ./t3903-stash.sh --stress=foo
$ echo $?
0

Some other shells, e.g. Bash (even in posix mode), ksh, dash in Ubuntu
16.04 or later, are apparently happy to accept '^' just as well.

[1] http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13

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

prune-packed: check for too many argumentsRamsay Jones Mon, 11 Feb 2019 17:23:40 +0000 (17:23 +0000)

prune-packed: check for too many arguments

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

sequencer: make sign_off_header a file local symbolRamsay Jones Mon, 11 Feb 2019 17:16:58 +0000 (17:16 +0000)

sequencer: make sign_off_header a file local symbol

Commit d0aaa46fd3 ("commit: move empty message checks to libgit",
2017-11-10) removes the last use of 'sign_off_header' outside of
the "sequencer.c" source file. Remove the extern declaration from
the header file and mark the definition of the symbol with the
static keyword.

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

config.mak.uname: add FREAD_READS_DIRECTORIES for NonSt... Randall S. Becker Sun, 10 Feb 2019 00:20:16 +0000 (19:20 -0500)

config.mak.uname: add FREAD_READS_DIRECTORIES for NonStop platform

The NonStop platform needs this configuration item specified as
UnfortunatelyYes so that config directory files are correctly processed.

Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix typos in translatable strings for v2.21.0Jean-Noël Avila Mon, 11 Feb 2019 06:44:53 +0000 (07:44 +0100)

Fix typos in translatable strings for v2.21.0

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test: caution on our version of 'yes'Junio C Hamano Sat, 9 Feb 2019 18:25:26 +0000 (10:25 -0800)

test: caution on our version of 'yes'

During a review of a patch, we noticed that we use our own imitation
of 'yes' with the limit of 99 lines. It is very tempting to lift this
arbitrary limit, but the limit is there for a reason.

Add an in-code comment to prevent future developers from wasting
their time.

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

l10n: git.pot: v2.21.0 round 1 (214 new, 38 removed)Jiang Xin Sat, 9 Feb 2019 12:54:56 +0000 (20:54 +0800)

l10n: git.pot: v2.21.0 round 1 (214 new, 38 removed)

Generate po/git.pot from v2.21.0-rc0-30-g11ad41d4cb (Seventh batch for 2.21)
for git v2.21.0 l10n round 1.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

Merge branch 'master' of git://github.com/git-l10n... Jiang Xin Sat, 9 Feb 2019 12:53:46 +0000 (20:53 +0800)

Merge branch 'master' of git://github.com/git-l10n/git-po

Seventh batch for 2.21Junio C Hamano Sat, 9 Feb 2019 04:45:48 +0000 (20:45 -0800)

Seventh batch for 2.21

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

Merge branch 'js/mingw-host-cpu'Junio C Hamano Sat, 9 Feb 2019 04:44:53 +0000 (20:44 -0800)

Merge branch 'js/mingw-host-cpu'

Windows update.

* js/mingw-host-cpu:
mingw: fix CPU reporting in `git version --build-options`

Merge branch 'js/fuzz-commit-graph-update'Junio C Hamano Sat, 9 Feb 2019 04:44:53 +0000 (20:44 -0800)

Merge branch 'js/fuzz-commit-graph-update'

Update to the fuzzer.

* js/fuzz-commit-graph-update:
object: fix leak of shallow_stat
fuzz-commit-graph: initialize repo object