gitweb.git
Merge branch 'js/commit-graph-parse-leakfix'Junio C Hamano Sun, 19 May 2019 07:45:28 +0000 (16:45 +0900)

Merge branch 'js/commit-graph-parse-leakfix'

Leakfix.

* js/commit-graph-parse-leakfix:
commit-graph: fix memory leak

Merge branch 'jk/cocci-batch'Junio C Hamano Sun, 19 May 2019 07:45:28 +0000 (16:45 +0900)

Merge branch 'jk/cocci-batch'

Optionally "make coccicheck" can feed multiple source files to
spatch, gaining performance while spending more memory.

* jk/cocci-batch:
coccicheck: make batch size of 0 mean "unlimited"
coccicheck: optionally batch spatch invocations

Merge branch 'ab/perf-installed-fix'Junio C Hamano Sun, 19 May 2019 07:45:28 +0000 (16:45 +0900)

Merge branch 'ab/perf-installed-fix'

Performance test framework has been broken and measured the version
of Git that happens to be on $PATH, not the specified one to
measure, for a while, which has been corrected.

* ab/perf-installed-fix:
perf-lib.sh: forbid the use of GIT_TEST_INSTALLED
perf tests: add "bindir" prefix to git tree test results
perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh
perf-lib.sh: make "./run <revisions>" use the correct gits
perf aggregate: remove GIT_TEST_INSTALLED from --codespeed
perf README: correct docs for 3c8f12c96c regression

Merge branch 'id/windows-dep-aslr'Junio C Hamano Sun, 19 May 2019 07:45:27 +0000 (16:45 +0900)

Merge branch 'id/windows-dep-aslr'

Allow DEP and ASLR for Windows build to for security hardening.

* id/windows-dep-aslr:
mingw: enable DEP and ASLR
mingw: do not let ld strip relocations

Merge branch 'ab/trace2-typofix'Junio C Hamano Sun, 19 May 2019 07:45:27 +0000 (16:45 +0900)

Merge branch 'ab/trace2-typofix'

Typofix.

* ab/trace2-typofix:
trace2: fix up a missing "leave" entry point

Merge branch 'nd/submodule-helper-incomplete-line-fix'Junio C Hamano Sun, 19 May 2019 07:45:27 +0000 (16:45 +0900)

Merge branch 'nd/submodule-helper-incomplete-line-fix'

Typofix.

* nd/submodule-helper-incomplete-line-fix:
submodule--helper: add a missing \n

Merge branch 'cw/diff-highlight'Junio C Hamano Sun, 19 May 2019 07:45:26 +0000 (16:45 +0900)

Merge branch 'cw/diff-highlight'

Portability fix for a diff-highlight tool (in contrib/).

* cw/diff-highlight:
diff-highlight: use correct /dev/null for UNIX and Windows

Merge branch 'dl/warn-tagging-a-tag'Junio C Hamano Sun, 19 May 2019 07:45:26 +0000 (16:45 +0900)

Merge branch 'dl/warn-tagging-a-tag'

Typofix.

* dl/warn-tagging-a-tag:
tag: fix typo in nested tagging hint

diff: fix mistake in translatable stringsJean-Noël Avila Fri, 17 May 2019 19:26:19 +0000 (21:26 +0200)

diff: fix mistake in translatable strings

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

l10n: vi.po(4577t): Updated Vietnamese translation... Tran Ngoc Quan Sun, 19 May 2019 01:40:33 +0000 (08:40 +0700)

l10n: vi.po(4577t): Updated Vietnamese translation for v2.22.0 round 1

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

send-email: document --no-[to|cc|bcc]Ævar Arnfjörð Bjarmason Fri, 17 May 2019 19:55:43 +0000 (21:55 +0200)

send-email: document --no-[to|cc|bcc]

These options added in f434c083a0 ("send-email: add --no-cc, --no-to,
and --no-bcc", 2010-03-07) were never documented.

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

send-email: fix broken transferEncoding testsÆvar Arnfjörð Bjarmason Fri, 17 May 2019 19:55:42 +0000 (21:55 +0200)

send-email: fix broken transferEncoding tests

I fixed a bug that had broken the reading of sendmail.transferEncoding
in 3494dfd3ee ("send-email: do defaults -> config -> getopt in that
order", 2019-05-09), but the test I added in that commit did nothing
to assert the bug had been fixed.

That issue originates in 8d81408435 ("git-send-email: add
--transfer-encoding option", 2014-11-25) which first added the
"sendemail.transferencoding=8bit".

That test has never done anything meaningful. It tested that the
"--transfer-encoding=8bit" option would turn on the 8bit
Transfer-Encoding, but that was the default at the time (and now). As
checking out 8d81408435 and editing the test to remove that option
will reveal, supplying it never did anything.

So when I copied it thinking it would work in 3494dfd3ee I copied a
previously broken test, although I was making sure it did the right
thing via da-hoc debugger inspection, so the bug was fixed.

So fix the test I added in 3494dfd3ee, as well as the long-standing
test added in 8d81408435. To test if we're actually setting the
Transfer-Encoding let's set it to 7bit, not 8bit, as 7bit will error
out on "email-using-8bit".

This means that we can remove the "sendemail.transferencoding=7bit
fails on 8bit data" test, since it was redundant, we now have other
tests that assert that that'll fail.

While I'm at it convert "git config <key> <value>" in the test setup
to just "-c <key>=<value>" on the command-line. Then we don't need to
cleanup after these tests, and there's no sense in asserting where
config values come from in these tests, we can take that as a given.

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

send-email: remove cargo-culted multi-patch pattern... Ævar Arnfjörð Bjarmason Fri, 17 May 2019 19:55:41 +0000 (21:55 +0200)

send-email: remove cargo-culted multi-patch pattern in tests

Change test code added in f434c083a0 ("send-email: add --no-cc,
--no-to, and --no-bcc", 2010-03-07) which blindly copied a pattern
from an earlier test added in 32ae83194b ("add a test for
git-send-email for non-threaded mails", 2009-06-12) where the
"$patches" variable was supplied more than once.

As it turns out we didn't need more than one "$patches" for the test
added in 32ae83194b either. The only tests that actually needed this
sort of invocation were the tests added in 54aae5e1a0 ("t9001:
send-email interation with --in-reply-to and --chain-reply-to",
2010-10-19).

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

l10n: fr.po v2.22.0.rnd1Jean-Noël Avila Fri, 17 May 2019 17:55:39 +0000 (19:55 +0200)

l10n: fr.po v2.22.0.rnd1

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

pkt-line: drop 'const'-ness of a param to set_packet_he... Junio C Hamano Wed, 15 May 2019 01:42:35 +0000 (10:42 +0900)

pkt-line: drop 'const'-ness of a param to set_packet_header()

The function's definition has a paramter of type "int" qualified as
"const". The fact that the incoming parameter is used as read-only
in the fuction is an implementation detail that the callers should
not have to be told in the prototype declaring it (and "const" there
has no effect, as C passes parameters by value).

The prototype defined for the function in pkt-line.h lacked the
matching "const" for this reason, but apparently some compilers
(e.g. MS Visual C 2017) complain about the parameter type mismatch.

Let's squelch it by removing the "const" that is pointless in the
definition of a small and trivial function like this, which would
not help optimizing compilers nor reading humans that much.

Noticed-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test-lib: try harder to ensure a working jgitTodd Zullinger Wed, 15 May 2019 01:36:33 +0000 (21:36 -0400)

test-lib: try harder to ensure a working jgit

The JGIT prereq uses `type jgit` to determine whether jgit is present.
While this is usually sufficient, it won't help if the jgit found is
badly broken. This wastes time running tests which fail due to no fault
of our own.

Use `jgit --version` instead, to guard against cases where jgit is
present on the system, but will fail to run, e.g. because of some JRE
issue, or missing Java dependencies. Checking that it gets far enough
to process the '--version' argument isn't perfect, but seems to be good
enough in practice. It's also consistent with how we detect some other
dependencies, see e.g. the CURL and UNZIP prerequisites.

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

get_oid: handle NULL repo->indexJeff King Tue, 14 May 2019 13:54:55 +0000 (09:54 -0400)

get_oid: handle NULL repo->index

When get_oid() and its helpers see an index name like ":.gitmodules",
they try to load the index on demand, like:

if (repo->index->cache)
repo_read_index(repo);

However, that misses the case when "repo->index" itself is NULL; we'll
segfault in the conditional.

This never happens with the_repository; there we always point its index
field to &the_index. But a submodule repository may have a NULL index
field until somebody calls repo_read_index().

This bug is triggered by t7411, but it was hard to notice because it's
in an expect_failure block. That test was added by 2b1257e463 (t/helper:
add test-submodule-nested-repo-config, 2018-10-25). Back then we had no
easy way to access the .gitmodules blob of a submodule repo, so we
expected (and got) an error message to that effect. Later, d9b8b8f896
(submodule-config.c: use repo_get_oid for reading .gitmodules,
2019-04-16) started looking in the correct repo, which is when we
started triggering the segfault.

With this fix, the test starts passing (once we clean it up as its
comment instructs).

Note that as far as I know, this bug could not be triggered outside of
the test suite. It requires resolving an index name in a submodule, and
all of the code paths (aside from test-tool) which do that either load
the index themselves, or always pass the_repository.

Ultimately it comes from 3a7a698e93 (sha1-name.c: remove implicit
dependency on the_index, 2019-01-12), which replaced a check of
"the_index.cache" with "repo->index->cache". So even if there is another
way to trigger it, it wouldn't affect any versions before then.

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

http-push: prevent format overflow warning with gcc... Carlo Marcelo Arenas Belón Tue, 14 May 2019 21:11:17 +0000 (14:11 -0700)

http-push: prevent format overflow warning with gcc >= 9

In function 'finish_request',
inlined from 'process_response' at http-push.c:248:2:
http-push.c:587:4: warning: '%s' directive argument is null [-Wformat-overflow=]
587 | fprintf(stderr, "Unable to get pack file %s\n%s",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
588 | request->url, curl_errorstr);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

request->url is needed for the error message if there was a failure
during fetch but was being cleared unnecessarily earlier.

note that the leak is prevented by calling release_request unconditionally
at the end.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Suggested-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

stash: document stash.useBuiltinJohannes Schindelin Tue, 14 May 2019 09:19:15 +0000 (02:19 -0700)

stash: document stash.useBuiltin

The stash.useBuiltin variable introduced in 90a462725e ("stash:
optionally use the scripted version again", 2019-02-25) was turned on by
default, but had no documentation.

Let's document it so that users who run into any stability issues with
the C rewrite know there's an escape hatch, and spell out that the
user should please report the bug when they have to turn off the
built-in stash.

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

l10n: sv.po: Update Swedish translation (4577t0f0u)Peter Krefting Tue, 14 May 2019 14:46:15 +0000 (15:46 +0100)

l10n: sv.po: Update Swedish translation (4577t0f0u)

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

l10n: sv.po: Update Swedish translationPeter Krefting Sun, 17 Mar 2019 15:52:33 +0000 (16:52 +0100)

l10n: sv.po: Update Swedish translation

Fix mistakes reported by Mattias Engdegård <mattiase@acm.org>.

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

l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)Jiang Xin Tue, 14 May 2019 09:09:58 +0000 (17:09 +0800)

l10n: git.pot: v2.22.0 round 1 (270 new, 56 removed)

Generate po/git.pot from v2.22.0-rc0 for git v2.22.0 l10n round 1.

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

sha1dc: update from upstreamÆvar Arnfjörð Bjarmason Mon, 13 May 2019 22:17:01 +0000 (00:17 +0200)

sha1dc: update from upstream

Update sha1dc from the latest version by the upstream
maintainer[1]. See 07a20f569b ("Makefile: fix unaligned loads in
sha1dc with UBSan", 2019-03-12) for the last update.

This fixes an issue where HP-UX IA64 was wrongly detected as a
Little-endian instead of a Big-endian system, see [2] and [3].

1. https://github.com/cr-marcstevens/sha1collisiondetection/commit/855827c583bc30645ba427885caa40c5b81764d2
2. https://public-inbox.org/git/603989bd-f86d-c61d-c6f5-fb6748a65ba9@siemens.com/
3. https://github.com/cr-marcstevens/sha1collisiondetection/pull/50

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

parse-options: adjust `parse_opt_unknown_cb()`s declare... Johannes Schindelin Mon, 13 May 2019 22:43:17 +0000 (15:43 -0700)

parse-options: adjust `parse_opt_unknown_cb()`s declared return type

In f41179f16ba2 (parse-options: avoid magic return codes, 2019-01-27),
the signature of the low-level parse-opt callback function was changed
to return an `enum`.

And while the implementations were changed, one declaration was left
unchanged, still claiming to return `int`.

This can potentially lead to problems, as compilers are free to choose
any integral type for an `enum` as long as it can represent all declared
values.

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

Git 2.22-rc0 v2.22.0-rc0Junio C Hamano Mon, 13 May 2019 14:40:13 +0000 (23:40 +0900)

Git 2.22-rc0

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

Merge branch 'jh/trace2'Junio C Hamano Mon, 13 May 2019 14:50:35 +0000 (23:50 +0900)

Merge branch 'jh/trace2'

A few embarrassing bugfixes.

* jh/trace2:
trace2: fix up a missing "leave" entry point
trace2: fix incorrect function pointer check

Merge branch 'cc/access-on-aix-workaround'Junio C Hamano Mon, 13 May 2019 14:50:35 +0000 (23:50 +0900)

Merge branch 'cc/access-on-aix-workaround'

Workaround for standard-compliant but less-than-useful behaviour of
access(2) for the root user.

* cc/access-on-aix-workaround:
git-compat-util: work around for access(X_OK) under root

Merge branch 'pw/clean-sequencer-state-upon-final-commit'Junio C Hamano Mon, 13 May 2019 14:50:35 +0000 (23:50 +0900)

Merge branch 'pw/clean-sequencer-state-upon-final-commit'

"git chery-pick" (and "revert" that shares the same runtime engine)
that deals with multiple commits got confused when the final step
gets stopped with a conflict and the user concluded the sequence
with "git commit". Attempt to fix it by cleaning up the state
files used by these commands in such a situation.

* pw/clean-sequencer-state-upon-final-commit:
fix cherry-pick/revert status after commit
commit/reset: try to clean up sequencer state

Merge branch 'pw/rebase-i-internal'Junio C Hamano Mon, 13 May 2019 14:50:34 +0000 (23:50 +0900)

Merge branch 'pw/rebase-i-internal'

The internal implementation of "git rebase -i" has been updated to
avoid forking a separate "rebase--interactive" process.

* pw/rebase-i-internal:
rebase -i: run without forking rebase--interactive
rebase: use a common action enum
rebase -i: use struct rebase_options in do_interactive_rebase()
rebase -i: use struct rebase_options to parse args
rebase -i: use struct object_id for squash_onto
rebase -i: use struct commit when parsing options
rebase -i: remove duplication
rebase -i: combine rebase--interactive.c with rebase.c
rebase: use OPT_RERERE_AUTOUPDATE()
rebase: rename write_basic_state()
rebase: don't translate trace strings
sequencer: always discard index after checkout

Merge branch 'jk/perf-aggregate-wo-libjson'Junio C Hamano Mon, 13 May 2019 14:50:34 +0000 (23:50 +0900)

Merge branch 'jk/perf-aggregate-wo-libjson'

The script to aggregate perf result unconditionally depended on
libjson-perl even though it did not have to, which has been
corrected.

* jk/perf-aggregate-wo-libjson:
t/perf: depend on perl JSON only when using --codespeed

Merge branch 'dl/rev-tilde-doc-clarify'Junio C Hamano Mon, 13 May 2019 14:50:33 +0000 (23:50 +0900)

Merge branch 'dl/rev-tilde-doc-clarify'

Docfix.

* dl/rev-tilde-doc-clarify:
revisions.txt: remove ambibuity between <rev>:<path> and :<path>
revisions.txt: mention <rev>~ form
revisions.txt: mark optional rev arguments with []
revisions.txt: change "rev" to "<rev>"

Merge branch 'jc/make-dedup-ls-files-output'Junio C Hamano Mon, 13 May 2019 14:50:33 +0000 (23:50 +0900)

Merge branch 'jc/make-dedup-ls-files-output'

A "ls-files" that emulates "find" to enumerate files in the working
tree resulted in duplicated Makefile rules that caused the build to
issue an unnecessary warning during a trial build after merge
conflicts are resolved in working tree *.h files but before the
resolved results are added to the index. This has been corrected.

* jc/make-dedup-ls-files-output:
Makefile: dedup list of files obtained from ls-files

Merge branch 'jk/ls-files-doc-markup-fix'Junio C Hamano Mon, 13 May 2019 14:50:33 +0000 (23:50 +0900)

Merge branch 'jk/ls-files-doc-markup-fix'

Docfix.

* jk/ls-files-doc-markup-fix:
doc/ls-files: put nested list for "-t" option into block

Merge branch 'jk/p5302-avoid-collision-check-cost'Junio C Hamano Mon, 13 May 2019 14:50:32 +0000 (23:50 +0900)

Merge branch 'jk/p5302-avoid-collision-check-cost'

Fix index-pack perf test so that the repeated invocations always
run in an empty repository, which emulates the initial clone
situation better.

* jk/p5302-avoid-collision-check-cost:
p5302: create the repo in each index-pack test

Merge branch 'dl/no-extern-in-func-decl'Junio C Hamano Mon, 13 May 2019 14:50:32 +0000 (23:50 +0900)

Merge branch 'dl/no-extern-in-func-decl'

Mechanically and systematically drop "extern" from function
declarlation.

* dl/no-extern-in-func-decl:
*.[ch]: manually align parameter lists
*.[ch]: remove extern from function declarations using sed
*.[ch]: remove extern from function declarations using spatch

Merge branch 'ew/repack-with-bitmaps-by-default'Junio C Hamano Mon, 13 May 2019 14:50:32 +0000 (23:50 +0900)

Merge branch 'ew/repack-with-bitmaps-by-default'

The connectivity bitmaps are created by default in bare
repositories now; also the pathname hash-cache is created by
default to avoid making crappy deltas when repacking.

* ew/repack-with-bitmaps-by-default:
pack-objects: default to writing bitmap hash-cache
t5310: correctly remove bitmaps for jgit test
repack: enable bitmaps by default on bare repos

Merge branch 'js/partial-clone-connectivity-check'Junio C Hamano Mon, 13 May 2019 14:50:31 +0000 (23:50 +0900)

Merge branch 'js/partial-clone-connectivity-check'

During an initial "git clone --depth=..." partial clone, it is
pointless to spend cycles for a large portion of the connectivity
check that enumerates and skips promisor objects (which by
definition is all objects fetched from the other side). This has
been optimized out.

* js/partial-clone-connectivity-check:
t/perf: add perf script for partial clones
clone: do faster object check for partial clones

Merge branch 'jh/trace2-sid-fix'Junio C Hamano Mon, 13 May 2019 14:50:31 +0000 (23:50 +0900)

Merge branch 'jh/trace2-sid-fix'

Polishing of the new trace2 facility continues. The system-level
configuration can specify site-wide trace2 settings, which can be
overridden with per-user configuration and environment variables.

* jh/trace2-sid-fix:
trace2: fixup access problem on /etc/gitconfig in read_very_early_config
trace2: update docs to describe system/global config settings
trace2: make SIDs more unique
trace2: clarify UTC datetime formatting
trace2: report peak memory usage of the process
trace2: use system/global config for default trace2 settings
config: add read_very_early_config()
trace2: find exec-dir before trace2 initialization
trace2: add absolute elapsed time to start event
trace2: refactor setting process starting time
config: initialize opts structure in repo_read_config()

difftool: fallback on merge.guitoolDenton Liu Mon, 29 Apr 2019 06:21:20 +0000 (02:21 -0400)

difftool: fallback on merge.guitool

In git-difftool.txt, it says

'git difftool' falls back to 'git mergetool' config variables when the
difftool equivalents have not been defined.

However, when `diff.guitool` is missing, it doesn't fallback to
anything. Make git-difftool fallback to `merge.guitool` when `diff.guitool` is
missing.

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

difftool: make --gui, --tool and --extcmd mutually... Denton Liu Mon, 29 Apr 2019 06:21:17 +0000 (02:21 -0400)

difftool: make --gui, --tool and --extcmd mutually exclusive

In git-difftool, these options specify which tool to ultimately run. As
a result, they are logically conflicting. Explicitly disallow these
options from being used together.

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

mergetool: fallback to tool when guitool unavailableDenton Liu Mon, 29 Apr 2019 06:21:14 +0000 (02:21 -0400)

mergetool: fallback to tool when guitool unavailable

In git-difftool, if the tool is called with --gui but `diff.guitool` is
not set, it falls back to `diff.tool`. Make git-mergetool also fallback
from `merge.guitool` to `merge.tool` if the former is undefined.

If git-difftool, when called with `--gui`, were to use
`get_configured_mergetool` in a future patch, it would also get the
fallback behavior in the following precedence:

1. diff.guitool
2. merge.guitool
3. diff.tool
4. merge.tool

The behavior for when difftool or mergetool are called without `--gui`
should be identical with or without this patch.

Note that the search loop could be written as

sections="merge"
keys="tool"
if diff_mode
then
sections="diff $sections"
fi
if gui_mode
then
keys="guitool $keys"
fi

merge_tool=$(
IFS=' '
for key in $keys
do
for section in $sections
do
selected=$(git config $section.$key)
if test -n "$selected"
then
echo "$selected"
return
fi
done
done)

which would make adding a mode in the future much easier. However,
adding a new mode will likely never happen as it is highly discouraged
so, as a result, it is written in its current form so that it is more
readable for future readers.

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

mergetool--lib: create gui_mode functionDenton Liu Mon, 29 Apr 2019 06:21:11 +0000 (02:21 -0400)

mergetool--lib: create gui_mode function

Before, in `get_configured_merge_tool`, we would test the value of the
first argument directly, which corresponded to whether we were using
guitool. However, since `$GIT_MERGETOOL_GUI` is available as an
environment variable, create the `gui_mode` function which increases the
clarify of functions which use it.

While we're at it, add a space before `()` in function definitions to
fix the style.

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

mergetool: use get_merge_tool functionDenton Liu Mon, 29 Apr 2019 06:21:08 +0000 (02:21 -0400)

mergetool: use get_merge_tool function

In git-mergetool, the logic for getting which merge tool to use is
duplicated in git-mergetool--lib, except for the fact that it needs to
know whether the tool was guessed or not.

Rewrite `get_merge_tool` to return whether or not the tool was guessed
through the return code and make git-mergetool call this function
instead of duplicating the logic. Note that 1 was chosen to be the
return code of when a tool is guessed because it seems like a slightly
more abnormal condition than getting a tool that's explicitly specified
but this is completely arbitrary.

Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not the
guitool will be selected.

This change is not completely backwards compatible as there may be
external users of git-mergetool--lib. However, only one user,
git-diffall[1], was found from searching GitHub and Google, and this
tool is superseded by `git difftool --dir-diff` anyway. It seems very
unlikely that there exists an external caller that would take into
account the return code of `get_merge_tool` as it would always return 0
before this change so this change probably does not affect any external
users.

[1]: https://github.com/thenigan/git-diffall

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

trace2: add variable description to git.txtDerrick Stolee Fri, 10 May 2019 19:44:26 +0000 (12:44 -0700)

trace2: add variable description to git.txt

Documentation/technical/api-trace2.txt contains the full details
of the trace2 API and the GIT_TR2* environment variables. However,
most environment variables are included in Documentation/git.txt,
including the GIT_TRACE* variables.

Add a brief description of the GIT_TR2* variables with links to
the full technical details. The biggest difference from the
original variables is that we can specify a Unix Domain Socket.
Mention this difference, but leave the details to the technical
documents.

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>

send-email: do defaults -> config -> getopt in that... Ævar Arnfjörð Bjarmason Thu, 9 May 2019 11:48:30 +0000 (13:48 +0200)

send-email: do defaults -> config -> getopt in that order

Change the git-send-email command-line argument parsing and config
reading code to parse those two in the right order. I.e. first we set
our hardcoded defaults, then we read our config, and finally we read
the command-line, with later sets overriding earlier sets.

This fixes a bug introduced in e67a228cd8 ("send-email:
automatically determine transfer-encoding", 2018-07-08). That change
broke the reading of sendmail.transferencoding because it wasn't
careful to update the code to parse them in the previous "defaults
-> getopt -> config" order.

But as we can see from the history for this file doing it this way was
never what we actually wanted, it's just something we grew organically
as of 5483c71d7a ("git-send-email: make options easier to configure.",
2007-06-27) and have been dealing with the fallout since, e.g. in
463b0ea22b ("send-email: Fix %config_path_settings handling",
2011-10-14).

As can be seen in this change the only place where we actually want to
do something clever is with the to/cc/bcc variables, where setting
them on the command-line (or using --no-{to,cc,bcc}) should clear out
values we grab from the config.

All the rest are things where the command-line should simply override
the config values, and by reading the config first the config code
doesn't need all this "let's not set it, if it was on the command-line"
special-casing, as [1] shows we'd otherwise need to care about the
difference between whether something was a default or present in
config to fix the bug in e67a228cd8.

1. https://public-inbox.org/git/20190508105607.178244-2-gitster@pobox.com/

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

send-email: rename the @bcclist variable for consistencyÆvar Arnfjörð Bjarmason Thu, 9 May 2019 11:48:29 +0000 (13:48 +0200)

send-email: rename the @bcclist variable for consistency

The "to" and "cc" variables are named @initial_{to,cc}, let's rename
this one to match them.

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

send-email: move the read_config() function above getoptsÆvar Arnfjörð Bjarmason Thu, 9 May 2019 11:48:28 +0000 (13:48 +0200)

send-email: move the read_config() function above getopts

This is in preparation for a later change where we'll read the config
first before parsing command-line options. As the move detection will
show no lines (except one line of comment) is changed here, just moved
around.

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

status: fix display of rebase -ir's `label` commandJohannes Schindelin Fri, 10 May 2019 20:23:14 +0000 (13:23 -0700)

status: fix display of rebase -ir's `label` command

The argument of a `label` command does *not* want to be turned into an
abbreviated SHA-1.

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

trace2: fix up a missing "leave" entry pointÆvar Arnfjörð Bjarmason Fri, 10 May 2019 13:37:38 +0000 (15:37 +0200)

trace2: fix up a missing "leave" entry point

Fix a trivial bug that's been here since the shared/do_write_index
tracing was added in 42fee7a388 ("trace2:data: add trace2
instrumentation to index read/write", 2019-02-22). We should have
enter/leave points, not two enter/enter points. This resulted in an
"enter" event without a corresponding "leave" event.

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

init: make --template path relative to $CWDNguyễn Thái Ngọc Duy Fri, 10 May 2019 10:46:57 +0000 (17:46 +0700)

init: make --template path relative to $CWD

During git-init we chdir() to the target directory, but --template is
not adjusted. So it's relative to the target directory instead of
current directory.

It would be ok if it's documented, but --template in git-init.txt
mentions nothing about this behavior. Change it to be relative to $CWD,
which is much more intuitive.

The changes in the test suite show that this relative-to-target behavior
is actually used. I just hope that it's only used in the test suite and
it's safe to change. Otherwise, the other option is just document
it (i.e. relative to target dir) and move on.

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

verify-commit: simplify parameters to run_gpg_verify()Jeff King Thu, 9 May 2019 21:32:29 +0000 (17:32 -0400)

verify-commit: simplify parameters to run_gpg_verify()

The buf/len parameters of run_gpg_verify() have never been used since
the function was added in d07b00b7f3 (verify-commit: scriptable commit
signature verification, 2014-06-23). Instead, check_commit_signature()
accesses the commit struct directly.

Worse, we read the whole object just to check its type and do not attach
it to the "struct commit". Meaning we end up loading the object from
disk twice for no good reason.

And to further confuse matters, our type check is comes from what we
read from disk, but we later assume that lookup_commit() will return
non-NULL. This might not be true if some other object previously
referenced the same oid as a non-commit (though this may be impossible
to trigger in practice since we don't generally parse any other objects
in this command).

Instead, let's do our type check by loading the object via
parse_object(). That will attach the buffer to the struct so it can be
used later by check_commit_signature(). And it ensures that
lookup_commit() will return something sane.

And then we can just drop the unused "buf" and "len" parameters
entirely.

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

show-branch: drop unused parameter from show_independent()Jeff King Thu, 9 May 2019 21:32:14 +0000 (17:32 -0400)

show-branch: drop unused parameter from show_independent()

This ref_name parameter was never used since the inception of
show_independent() in 1f8af483df (show-branch: --list and --independent,
2005-09-09). Let's drop it.

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

rev-list: drop unused void pointer from finish_commit()Jeff King Thu, 9 May 2019 21:32:03 +0000 (17:32 -0400)

rev-list: drop unused void pointer from finish_commit()

Our finish_commit() function used to be passed directly to the revision
machinery as a callback. But after 989937221a (rev-list: fix
--verify-objects --quiet becoming --objects, 2012-02-28), it is used
only as a helper in show_commit().

It doesn't use its void "data" parameter, and we no longer have to
conform to the callback interface. Let's drop it.

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

remove_all_fetch_refspecs(): drop unused "remote" parameterJeff King Thu, 9 May 2019 21:31:46 +0000 (17:31 -0400)

remove_all_fetch_refspecs(): drop unused "remote" parameter

This function already takes a "key" parameter which uniquely identifies
the config key that we need to remove. There's no need for it to look at
the "remote" parameter at all. Let's drop it in the name of simplicity.

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

receive-pack: drop unused "commands" from prepare_shall... Jeff King Thu, 9 May 2019 21:31:39 +0000 (17:31 -0400)

receive-pack: drop unused "commands" from prepare_shallow_update()

We pass in the list of proposed ref updates to prepare_shallow_update(),
but that function doesn't actually need it (and never has since its
inception in 0a1bc12b6e4). Only its caller, update_shallow_info(), needs
to look at the command list.

Let's drop the unused parameter to reduce confusion.

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

pack-objects: drop unused rev_info parametersJeff King Thu, 9 May 2019 21:31:16 +0000 (17:31 -0400)

pack-objects: drop unused rev_info parameters

When collecting the list of objects to pack in get_object_list(), we
pass our rev_info struct around to some functions that don't need it.
This is due to 03a9683d22 (Simplify is_kept_pack(), 2009-02-28), where
the kept-pack handling was moved out of the revision machinery.

Let's drop these unused parameters.

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

name-rev: drop unused parameters from is_better_name()Jeff King Thu, 9 May 2019 21:30:56 +0000 (17:30 -0400)

name-rev: drop unused parameters from is_better_name()

When this function was extracted in 0041bf6544 (name-rev: refactor logic
to see if a new candidate is a better name, 2017-03-29), it ended up
getting more arguments than it needs.

It's possible we may later use these values to evaluate the name, but
since it's a static function with a single caller, it will be easy to
add them back then.

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

mktree: drop unused length parameterJeff King Thu, 9 May 2019 21:30:37 +0000 (17:30 -0400)

mktree: drop unused length parameter

The mktree_line() function does not actually look at the "len" parameter
it is passed, and assumes the buffer it receives is NUL-terminated.
Since the caller always passes a strbuf, this will be true. Let's drop
the useless parameter.

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

wt-status: drop unused status parameterJeff King Thu, 9 May 2019 21:30:19 +0000 (17:30 -0400)

wt-status: drop unused status parameter

The v2_fix_up_changed() function doesn't actually need to see the
wt_status struct. It's possible that could change in the future, but
this is a static-local function with one caller. It would be easy to
read-add it back then. Let's drop the unused parameter.

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

read-cache: drop unused parameter from threaded loadJeff King Thu, 9 May 2019 21:29:44 +0000 (17:29 -0400)

read-cache: drop unused parameter from threaded load

The load_cache_entries_threaded() function takes a src_offset parameter
that it doesn't use. This has been there since its inception in
77ff1127a4 (read-cache: load cache entries on worker threads,
2018-10-10).

Digging on the mailing list, that parameter was part of an earlier
iteration of the series[1], but became unnecessary when the code
switched to using the IEOT extension.

[1] https://public-inbox.org/git/20180906210227.54368-5-benpeart@microsoft.com/

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

clone: drop dest parameter from copy_alternates()Jeff King Thu, 9 May 2019 21:29:22 +0000 (17:29 -0400)

clone: drop dest parameter from copy_alternates()

Ever since the inception of this function in e6baf4a1ae (clone: clone
from a repository with relative alternates, 2011-08-22), the "dest"
parameter has been unused. Instead, we use add_to_alternates_file(),
which relies on git_pathdup() to find the right file. That in turn works
because we will have initialized and entered the destination repo by
this point.

It's a bit subtle, but this is how it has always worked. And if our
assumptions change, the test in t5601 from e6baf4a1ae should let us
know.

In the meantime, let's drop this unused and confusing parameter from
copy_alternates().

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

submodule: drop unused prefix parameter from some functionsJeff King Thu, 9 May 2019 21:27:31 +0000 (17:27 -0400)

submodule: drop unused prefix parameter from some functions

We stopped using the "prefix" parameter of
relocate_single_git_dir_into_superproject() and its callers in
202275b96b (submodule.c: get_super_prefix_or_empty, 2017-03-14), where
we switched to using the environment global directly.

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

builtin: consistently pass cmd_* prefix to parse_optionsJeff King Thu, 9 May 2019 21:28:51 +0000 (17:28 -0400)

builtin: consistently pass cmd_* prefix to parse_options

If a builtin uses RUN_SETUP to request that git.c enter the repository
directory, we'll get passed in a "prefix" variable with the path to the
original directory. It's important to pass this to parse_options(),
since we may use it to fix up relative OPT_FILENAME() options. Some
builtins don't bother; let's make sure we do so consistently.

There may not be any particular bugs fixed here; OPT_FILENAME is
actually pretty rare, and none of these commands use it directly.
However, this does future-proof us against somebody adding an option
that uses it and creating a subtle bug that only shows up when you're in
a subdirectory of the repository.

In some cases, like hash-object and upload-pack, we don't specify
RUN_SETUP, so we know the prefix will always be empty. It's still worth
passing the variable along to keep the idiom consistent across all
builtins (and of course it protects us if they ever _did_ switch to
using RUN_SETUP).

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

cmd_{read,write}_tree: rename "unused" variable that... Jeff King Thu, 9 May 2019 21:27:24 +0000 (17:27 -0400)

cmd_{read,write}_tree: rename "unused" variable that is used

The "prefix" variable passed by git.c into the builtin cmd_read_tree()
and cmd_write_tree() functions is named "unused_prefix". But we do in
fact pass it to parse_options(), which may use the prefix to adjust any
filename options. Let's get rid of this confusing name.

However, we can't just call it "prefix". The reason these variables were
renamed in the first place is that they shadowed local variables named
"prefix", because these commands both take a "--prefix" option.

So let's rename the parameters, but try to reduce further confusion:

1. In both cases we'll call them "cmd_prefix" to mark that they're
part of the cmd_* interface.

2. In cmd_write_tree(), we'll rename the local prefix variable to
"tree_prefix" to make it more clear that we're talking about the
prefix to be used for the tree we're writing.

3. In cmd_read_tree(), the "prefix" local has since migrated into
"struct unpack_trees_options". We'll leave that alone, as the
context within the struct makes its meaning clear (we actually
_could_ just call the parameter "prefix" now, but that invites
confusion in the other direction).

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

check-non-portable-shell: support Perl versions older... Eric Sunshine Sat, 11 May 2019 00:18:53 +0000 (20:18 -0400)

check-non-portable-shell: support Perl versions older than 5.10

For thoroughness when checking for one-shot environment variable
assignments at shell function call sites, check-non-portable-shell
stitches together incomplete lines (those ending with backslash). This
allows it to correctly flag such undesirable usage even when the
variable assignment and function call are split across lines, for
example:

FOO=bar \
func

where 'func' is a shell function.

The stitching is accomplished like this:

while (<>) {
chomp;
# stitch together incomplete lines (those ending with "\")
while (s/\\$//) {
$_ .= readline;
chomp;
}
# detect unportable/undesirable shell constructs
...
}

Although this implementation is well supported in reasonably modern Perl
versions (5.10 and later), it fails with older versions (such as Perl
5.8 shipped with ancient Mac OS 10.5). In particular, in older Perl
versions, 'readline' is not connected to the file handle associated with
the "magic" while (<>) {...} construct, so 'readline' throws a
"readline() on unopened filehandle" error. Work around this problem by
dropping readline() and instead incorporating the stitching of
incomplete lines directly into the existing while (<>) {...} loop.

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

mingw: enable DEP and ASLRİsmail Dönmez Wed, 8 May 2019 11:30:59 +0000 (04:30 -0700)

mingw: enable DEP and ASLR

Enable DEP (Data Execution Prevention) and ASLR (Address Space Layout
Randomization) support. This applies to both 32bit and 64bit builds
and makes it substantially harder to exploit security holes in Git by
offering a much more unpredictable attack surface.

ASLR interferes with GDB's ability to set breakpoints. A similar issue
holds true when compiling with -O2 (in which case single-stepping is
messed up because GDB cannot map the code back to the original source
code properly). Therefore we simply enable ASLR only when an
optimization flag is present in the CFLAGS, using it as an indicator
that the developer does not want to debug in GDB anyway.

Signed-off-by: İsmail Dönmez <ismail@i10z.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: do not let ld strip relocationsİsmail Dönmez Wed, 8 May 2019 11:30:58 +0000 (04:30 -0700)

mingw: do not let ld strip relocations

This is the first step for enabling ASLR (Address Space Layout
Randomization) support. We want to enable ASLR for better protection
against exploiting security holes in Git: it makes it harder to attack
software by making code addresses unpredictable.

The problem fixed by this commit is that `ld.exe` seems to be stripping
relocations which in turn will break ASLR support. We just make sure
it's not stripping the main executable entry.

Signed-off-by: İsmail Dönmez <ismail@i10z.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

trace2: fix up a missing "leave" entry pointÆvar Arnfjörð Bjarmason Fri, 10 May 2019 13:37:38 +0000 (15:37 +0200)

trace2: fix up a missing "leave" entry point

Fix a trivial bug that's been here since the shared/do_write_index
tracing was added in 42fee7a388 ("trace2:data: add trace2
instrumentation to index read/write", 2019-02-22). We should have
enter/leave points, not two enter/enter points. This resulted in an
"enter" event without a corresponding "leave" event.

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

difftool --no-index: error out on --dir-diff (and don... Johannes Schindelin Wed, 8 May 2019 21:52:41 +0000 (14:52 -0700)

difftool --no-index: error out on --dir-diff (and don't crash)

In `--no-index` mode, we now no longer require a worktree nor a
repository. But some code paths in `difftool` expect those to be
present.

The most notable such code path is the `--dir-diff` one: we use the
existing checkout machinery to copy the files, and that machinery looks
up replacement refs, looks at alternate ODBs, wants to use the worktree
path, etc.

Rather than running into segmentation faults, let's die with an
informative error message.

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

tag: fix typo in nested tagging hintDenton Liu Wed, 8 May 2019 19:16:41 +0000 (15:16 -0400)

tag: fix typo in nested tagging hint

In eea9c1e78f (tag: advise on nested tags, 2019-04-04), tag was taught
to hint at the user if a nested tag is made. However, this message had a
typo and it said "The object referred to by your new is...", which was
missing a "tag" after "new". Fix this message by adding the "tag".

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

diff-highlight: use correct /dev/null for UNIX and... Chris. Webster Wed, 31 Oct 2018 14:58:00 +0000 (23:58 +0900)

diff-highlight: use correct /dev/null for UNIX and Windows

Use File::Spec->devnull() for output redirection to avoid messages
when Windows version of Perl is first in path. The message 'The
system cannot find the path specified.' is displayed each time git is
run to get colors.

Signed-off-by: Chris. Webster <chris@webstech.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

The eighth batchJunio C Hamano Wed, 8 May 2019 15:37:54 +0000 (00:37 +0900)

The eighth batch

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

Merge branch 'vk/autoconf-gettext'Junio C Hamano Wed, 8 May 2019 15:37:29 +0000 (00:37 +0900)

Merge branch 'vk/autoconf-gettext'

The autoconf generated configure script failed to use the right
gettext() implementations from -libintl by ignoring useless stub
implementations shipped in some C library, which has been
corrected.

* vk/autoconf-gettext:
autoconf: #include <libintl.h> when checking for gettext()

Merge branch 'cc/aix-has-fileno-as-a-macro'Junio C Hamano Wed, 8 May 2019 15:37:28 +0000 (00:37 +0900)

Merge branch 'cc/aix-has-fileno-as-a-macro'

AIX shared the same build issues with other BSDs around fileno(fp),
which has been corrected.

* cc/aix-has-fileno-as-a-macro:
Makefile: use fileno macro work around on AIX

Merge branch 'jt/submodule-repo-is-with-worktree'Junio C Hamano Wed, 8 May 2019 15:37:28 +0000 (00:37 +0900)

Merge branch 'jt/submodule-repo-is-with-worktree'

The logic to tell if a Git repository has a working tree protects
"git branch -D" from removing the branch that is currently checked
out by mistake. The implementation of this logic was broken for
repositories with unusual name, which unfortunately is the norm for
submodules these days. This has been fixed.

* jt/submodule-repo-is-with-worktree:
worktree: update is_bare heuristics

Merge branch 'jk/untracked-cache-more-fixes'Junio C Hamano Wed, 8 May 2019 15:37:28 +0000 (00:37 +0900)

Merge branch 'jk/untracked-cache-more-fixes'

Code clean-up.

* jk/untracked-cache-more-fixes:
untracked-cache: simplify parsing by dropping "len"
untracked-cache: simplify parsing by dropping "next"
untracked-cache: be defensive about missing NULs in index

Merge branch 'jk/prune-optim'Junio C Hamano Wed, 8 May 2019 15:37:27 +0000 (00:37 +0900)

Merge branch 'jk/prune-optim'

A follow-up test for an earlier "git prune" improvements.

* jk/prune-optim:
t5304: add a test for pruning with bitmaps

Merge branch 'js/misc-doc-fixes'Junio C Hamano Wed, 8 May 2019 15:37:27 +0000 (00:37 +0900)

Merge branch 'js/misc-doc-fixes'

"make check-docs", "git help -a", etc. did not account for cases
where a particular build may deliberately omit some subcommands,
which has been corrected.

* js/misc-doc-fixes:
Turn `git serve` into a test helper
test-tool: handle the `-C <directory>` option just like `git`
check-docs: do not bother checking for legacy scripts' documentation
docs: exclude documentation for commands that have been excluded
check-docs: allow command-list.txt to contain excluded commands
help -a: do not list commands that are excluded from the build
Makefile: drop the NO_INSTALL variable
remote-testgit: move it into the support directory for t5801

Merge branch 'dr/ref-filter-push-track-fix'Junio C Hamano Wed, 8 May 2019 15:37:26 +0000 (00:37 +0900)

Merge branch 'dr/ref-filter-push-track-fix'

%(push:track) token used in the --format option to "git
for-each-ref" and friends was not showing the right branch, which
has been fixed.

* dr/ref-filter-push-track-fix:
ref-filter: use correct branch for %(push:track)

Merge branch 'ss/msvc-path-utils-fix'Junio C Hamano Wed, 8 May 2019 15:37:26 +0000 (00:37 +0900)

Merge branch 'ss/msvc-path-utils-fix'

An earlier update for MinGW and Cygwin accidentally broke MSVC build,
which has been fixed.

* ss/msvc-path-utils-fix:
MSVC: include compat/win32/path-utils.h for MSVC, too, for real_path()

Merge branch 'jt/clone-server-option'Junio C Hamano Wed, 8 May 2019 15:37:25 +0000 (00:37 +0900)

Merge branch 'jt/clone-server-option'

"git clone" learned a new --server-option option when talking over
the protocol version 2.

* jt/clone-server-option:
clone: send server options when using protocol v2
transport: die if server options are unsupported

Merge branch 'tb/unexpected'Junio C Hamano Wed, 8 May 2019 15:37:25 +0000 (00:37 +0900)

Merge branch 'tb/unexpected'

Code tightening against a "wrong" object appearing where an object
of a different type is expected, instead of blindly assuming that
the connection between objects are correctly made.

* tb/unexpected:
rev-list: detect broken root trees
rev-list: let traversal die when --missing is not in use
get_commit_tree(): return NULL for broken tree
list-objects.c: handle unexpected non-tree entries
list-objects.c: handle unexpected non-blob entries
t: introduce tests for unexpected object types
t: move 'hex2oct' into test-lib-functions.sh

Merge branch 'nd/sha1-name-c-wo-the-repository'Junio C Hamano Wed, 8 May 2019 15:37:24 +0000 (00:37 +0900)

Merge branch 'nd/sha1-name-c-wo-the-repository'

Further code clean-up to allow the lowest level of name-to-object
mapping layer to work with a passed-in repository other than the
default one.

* nd/sha1-name-c-wo-the-repository: (34 commits)
sha1-name.c: remove the_repo from get_oid_mb()
sha1-name.c: remove the_repo from other get_oid_*
sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name
submodule-config.c: use repo_get_oid for reading .gitmodules
sha1-name.c: add repo_get_oid()
sha1-name.c: remove the_repo from get_oid_with_context_1()
sha1-name.c: remove the_repo from resolve_relative_path()
sha1-name.c: remove the_repo from diagnose_invalid_index_path()
sha1-name.c: remove the_repo from handle_one_ref()
sha1-name.c: remove the_repo from get_oid_1()
sha1-name.c: remove the_repo from get_oid_basic()
sha1-name.c: remove the_repo from get_describe_name()
sha1-name.c: remove the_repo from get_oid_oneline()
sha1-name.c: add repo_interpret_branch_name()
sha1-name.c: remove the_repo from interpret_branch_mark()
sha1-name.c: remove the_repo from interpret_nth_prior_checkout()
sha1-name.c: remove the_repo from get_short_oid()
sha1-name.c: add repo_for_each_abbrev()
sha1-name.c: store and use repo in struct disambiguate_state
sha1-name.c: add repo_find_unique_abbrev_r()
...

Merge branch 'cc/replace-graft-peel-tags'Junio C Hamano Wed, 8 May 2019 15:37:24 +0000 (00:37 +0900)

Merge branch 'cc/replace-graft-peel-tags'

When given a tag that points at a commit-ish, "git replace --graft"
failed to peel the tag before writing a replace ref, which did not
make sense because the old graft mechanism the feature wants to
mimick only allowed to replace one commit object with another.
This has been fixed.

* cc/replace-graft-peel-tags:
replace: peel tag when passing a tag first to --graft
replace: peel tag when passing a tag as parent to --graft
t6050: redirect expected error output to a file
t6050: use test_line_count instead of wc -l

Merge branch 'js/trace2-to-directory'Junio C Hamano Wed, 8 May 2019 15:37:24 +0000 (00:37 +0900)

Merge branch 'js/trace2-to-directory'

The trace2 tracing facility learned to auto-generate a filename
when told to log to a directory.

* js/trace2-to-directory:
trace2: write to directory targets

Merge branch 'dl/merge-cleanup-scissors-fix'Junio C Hamano Wed, 8 May 2019 15:37:24 +0000 (00:37 +0900)

Merge branch 'dl/merge-cleanup-scissors-fix'

The list of conflicted paths shown in the editor while concluding a
conflicted merge was shown above the scissors line when the
clean-up mode is set to "scissors", even though it was commented
out just like the list of updated paths and other information to
help the user explain the merge better.

* dl/merge-cleanup-scissors-fix:
cherry-pick/revert: add scissors line on merge conflict
sequencer.c: save and restore cleanup mode
merge: add scissors line on merge conflict
merge: cleanup messages like commit
parse-options.h: extract common --cleanup option
commit: extract cleanup_mode functions to sequencer
t7502: clean up style
t7604: clean up style
t3507: clean up style
t7600: clean up style

Merge branch 'pw/sequencer-cleanup-with-signoff-x-fix'Junio C Hamano Wed, 8 May 2019 15:37:23 +0000 (00:37 +0900)

Merge branch 'pw/sequencer-cleanup-with-signoff-x-fix'

"git cherry-pick" run with the "-x" or the "--signoff" option used
to (and more importantly, ought to) clean up the commit log message
with the --cleanup=space option by default, but this has been
broken since late 2017. This has been fixed.

* pw/sequencer-cleanup-with-signoff-x-fix:
sequencer: fix cleanup with --signoff and -x

Merge branch 'jk/pack-objects-reports-num-objects-to... Junio C Hamano Wed, 8 May 2019 15:37:23 +0000 (00:37 +0900)

Merge branch 'jk/pack-objects-reports-num-objects-to-trace2'

The "git pack-objects" command learned to report the number of
objects it packed via the trace2 mechanism.

* jk/pack-objects-reports-num-objects-to-trace2:
pack-objects: write objects packed to trace2

Merge branch 'tz/git-svn-doc-markup-fix'Junio C Hamano Wed, 8 May 2019 15:37:23 +0000 (00:37 +0900)

Merge branch 'tz/git-svn-doc-markup-fix'

Doc formatting fix.

* tz/git-svn-doc-markup-fix:
Documentation/git-svn: improve asciidoctor compatibility

Merge branch 'km/empty-repo-is-still-a-repo'Junio C Hamano Wed, 8 May 2019 15:37:23 +0000 (00:37 +0900)

Merge branch 'km/empty-repo-is-still-a-repo'

Running "git add" on a repository created inside the current
repository is an explicit indication that the user wants to add it
as a submodule, but when the HEAD of the inner repository is on an
unborn branch, it cannot be added as a submodule. Worse, the files
in its working tree can be added as if they are a part of the outer
repository, which is not what the user wants. These problems are
being addressed.

* km/empty-repo-is-still-a-repo:
add: error appropriately on repository with no commits
dir: do not traverse repositories with no commits
submodule: refuse to add repository with no commits

Merge branch 'dl/warn-tagging-a-tag'Junio C Hamano Wed, 8 May 2019 15:37:22 +0000 (00:37 +0900)

Merge branch 'dl/warn-tagging-a-tag'

"git tag" learned to give an advice suggesting it might be a
mistake when creating an annotated or signed tag that points at
another tag.

* dl/warn-tagging-a-tag:
tag: advise on nested tags
tag: fix formatting

Merge branch 'en/merge-directory-renames'Junio C Hamano Wed, 8 May 2019 15:37:22 +0000 (00:37 +0900)

Merge branch 'en/merge-directory-renames'

"git merge-recursive" backend recently learned a new heuristics to
infer file movement based on how other files in the same directory
moved. As this is inherently less robust heuristics than the one
based on the content similarity of the file itself (rather than
based on what its neighbours are doing), it sometimes gives an
outcome unexpected by the end users. This has been toned down to
leave the renamed paths in higher/conflicted stages in the index so
that the user can examine and confirm the result.

* en/merge-directory-renames:
merge-recursive: switch directory rename detection default
merge-recursive: give callers of handle_content_merge() access to contents
merge-recursive: track information associated with directory renames
t6043: fix copied test description to match its purpose
merge-recursive: switch from (oid,mode) pairs to a diff_filespec
merge-recursive: cleanup handle_rename_* function signatures
merge-recursive: track branch where rename occurred in rename struct
merge-recursive: remove ren[12]_other fields from rename_conflict_info
merge-recursive: shrink rename_conflict_info
merge-recursive: move some struct declarations together
merge-recursive: use 'ci' for rename_conflict_info variable name
merge-recursive: rename locals 'o' and 'a' to 'obuf' and 'abuf'
merge-recursive: rename diff_filespec 'one' to 'o'
merge-recursive: rename merge_options argument from 'o' to 'opt'
Use 'unsigned short' for mode, like diff_filespec does

submodule--helper: add a missing \nNguyễn Thái Ngọc Duy Tue, 7 May 2019 09:50:37 +0000 (16:50 +0700)

submodule--helper: add a missing \n

This is a complete line. We're not expecting the next function to add
anything to the same line.

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

format-patch: make --base patch-id output stableStephen Boyd Fri, 26 Apr 2019 23:51:57 +0000 (16:51 -0700)

format-patch: make --base patch-id output stable

We weren't flushing the context each time we processed a hunk in the
patch-id generation code in diff.c, but we were doing that when we
generated "stable" patch-ids with the 'patch-id' tool. Let's port that
similar logic over from patch-id.c into diff.c so we can get the same
hash when we're generating patch-ids for 'format-patch --base=' types of
command invocations.

Cc: Xiaolong Ye <xiaolong.ye@intel.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

format-patch: inform user that patch-id generation... Stephen Boyd Fri, 26 Apr 2019 23:51:56 +0000 (16:51 -0700)

format-patch: inform user that patch-id generation is unstable

I tried out 'git format-patch --base' with a set of commits that
modifies more than one file. It turns out that the way this command is
implemented it actually uses the unstable version of patch-id instead of
the stable version that's documented. When I tried to modify the
existing test to use 'git patch-id --stable' vs. 'git patch-id
--unstable' I found that it didn't matter, the test still passed.

Let's expand on the test here so it is a little more complicated and
then use that to show that the patch-id generation is actually unstable
vs. stable. Update the documentation as well.

Cc: Xiaolong Ye <xiaolong.ye@intel.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

coccicheck: make batch size of 0 mean "unlimited"Jeff King Wed, 8 May 2019 07:07:54 +0000 (03:07 -0400)

coccicheck: make batch size of 0 mean "unlimited"

If you have the memory to handle it, the ideal case is to run a single
spatch invocation with all of the source files. But the only way to do
so now is to pick an arbitrarily large batch size. Let's make "0" do
this, which is a little friendlier (and doesn't otherwise have a useful
meaning).

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

t6500(mingw): use the Windows PID of the shellJohannes Schindelin Tue, 7 May 2019 21:51:30 +0000 (14:51 -0700)

t6500(mingw): use the Windows PID of the shell

In Git for Windows, we use the MSYS2 Bash which inherits a non-standard
PID model from Cygwin's POSIX emulation layer: every MSYS2 process has a
regular Windows PID, and in addition it has an MSYS2 PID (which
corresponds to a shadow process that emulates Unix-style signal
handling).

With the upgrade to the MSYS2 runtime v3.x, this shadow process cannot
be accessed via `OpenProcess()` any longer, and therefore t6500 thought
incorrectly that the process referenced in `gc.pid` (which is not
actually a real `gc` process in this context, but the current shell) no
longer exists.

Let's fix this by making sure that the Windows PID is written into
`gc.pid` in this test script so that `git.exe` is able to understand
that that process does indeed still exist.

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

t/lib-httpd: pass LSAN_OPTIONS through apacheJeff King Tue, 7 May 2019 22:30:46 +0000 (18:30 -0400)

t/lib-httpd: pass LSAN_OPTIONS through apache

Just as we instruct Apache to pass through ASAN_OPTIONS (so that
server-side Git programs it spawns will respect our options while
running the tests), we should do the same with LSAN_OPTIONS. Otherwise
trying to collect a list of leaks like:

export LSAN_OPTIONS=exitcode=0:log_path=/tmp/lsan
make SANITIZE=leak test

won't work for http tests (the server-side programs won't log their
leaks to the right place, and they'll prematurely die, producing a
spurious test failure).

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Make fread/fwrite-like functions in http.c more like... Mike Hommey Tue, 7 May 2019 23:03:54 +0000 (08:03 +0900)

Make fread/fwrite-like functions in http.c more like fread/fwrite.

The fread/fwrite-like functions in http.c, namely fread_buffer,
fwrite_buffer, fwrite_null, fwrite_sha1_file all return the
multiplication of the size and number of items they are being given.

Practically speaking, it doesn't matter, because in all contexts where
those functions are used, size is 1.

But those functions being similar to fread and fwrite (the curl API is
designed around being able to use fread and fwrite directly), it might
be preferable to make them behave like fread and fwrite, which, from
the fread/fwrite manual page, is:
On success, fread() and fwrite() return the number of items read
or written. This number equals the number of bytes transferred
only when size is 1. If an error occurs, or the end of the file
is reached, the return value is a short item count (or zero).

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

fsmonitor: force a refresh after the index was discardedJohannes Schindelin Tue, 7 May 2019 11:10:21 +0000 (13:10 +0200)

fsmonitor: force a refresh after the index was discarded

With this change, the `index_state` struct becomes the new home for the
flag that says whether the fsmonitor hook has been run, i.e. it is now
per-index.

It also gets re-set when the index is discarded, fixing the bug
demonstrated by the "test_expect_failure" test added in the preceding
commit. In that case fsmonitor-enabled Git would miss updates under
certain circumstances, see that preceding commit for details.

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