gitweb.git
asciidoctor-extensions: fix spurious space after linkgitMartin Ågren Wed, 27 Feb 2019 18:17:54 +0000 (19:17 +0100)

asciidoctor-extensions: fix spurious space after linkgit

When we render, e.g., "linkgit:gitglossary[7]." with Asciidoctor, we get
"gitglossary(7) ." with a space between the linkgit macro expansion and
the punctuation. We can fix this by dropping the trailing newline after
we've turned `linkgit:foo[bar]` into `<citerefentry>..</citerefentry>`.

The diff produced by `USE_ASCIIDOCTOR=Yes ./doc-diff HEAD^ HEAD` is
almost 6000 lines large and shows how this fixes "git-foo(x) ,", "(see
git-bar(y) )" and so on. One might wonder whether this also turns, e.g.,
"see linkgit:foo[1] for more" into "see foo(1)for more", but no. We get
"...</citerefentry> for more" in the XML, see, e.g., git-am.xml, so the
space ends up in git-am.1 just fine. The same is true for the HTML output.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/Makefile: add missing dependency on ascii... Martin Ågren Wed, 27 Feb 2019 18:17:53 +0000 (19:17 +0100)

Documentation/Makefile: add missing dependency on asciidoctor-extensions

asciidoctor-extensions.rb has never changed, but when it does -- such as
in the next commit --, it helps if the xml-files depend on it. We're
casting the net a bit too wide here, since we'll be rebuilding even with
AsciiDoc, which won't look at this file. But since this file changes so
rarely, that should be ok. It's better than missing a dependency.

Similarly, most of the html-files are produced directly from ".txt';
make the html-files too depend on asciidoctor-extensions.rb, both
the HTMLified manual pages as well as the user-manual that does use
.xml intermediary.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

line-log: detect unsupported formatsJeff King Mon, 11 Mar 2019 03:54:33 +0000 (23:54 -0400)

line-log: detect unsupported formats

If you use "log -L" with an output format like "--raw" or "--stat",
we'll silently ignore the format and just output the normal patch.
Let's detect and complain about this, which at least tells the user
what's going on.

The tests here aren't exhaustive over the set of all formats, but it
should at least let us know if somebody breaks the format-checking.

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

The second batchJunio C Hamano Mon, 11 Mar 2019 07:18:22 +0000 (16:18 +0900)

The second batch

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

Sync with maintJunio C Hamano Mon, 11 Mar 2019 07:16:34 +0000 (16:16 +0900)

Sync with maint

* maint:
mingw: allow building with an MSYS2 runtime v3.x

Merge branch 'js/rebase-recreate-merge'Junio C Hamano Mon, 11 Mar 2019 07:16:26 +0000 (16:16 +0900)

Merge branch 'js/rebase-recreate-merge'

Docfix.

* js/rebase-recreate-merge:
rebase docs: fix "gitlink" typo

Merge branch 'js/untravis-windows'Junio C Hamano Mon, 11 Mar 2019 07:16:26 +0000 (16:16 +0900)

Merge branch 'js/untravis-windows'

Dev support.

* js/untravis-windows:
travis: remove the hack to build the Windows job on Azure Pipelines

Merge branch 'rd/gc-prune-doc-fix'Junio C Hamano Mon, 11 Mar 2019 07:16:26 +0000 (16:16 +0900)

Merge branch 'rd/gc-prune-doc-fix'

Doxfix.

* rd/gc-prune-doc-fix:
docs/git-gc: fix typo "--prune=all" to "--prune=now"

Merge branch 'js/find-lib-h-with-ls-files-when-possible'Junio C Hamano Mon, 11 Mar 2019 07:16:25 +0000 (16:16 +0900)

Merge branch 'js/find-lib-h-with-ls-files-when-possible'

The Makefile uses 'find' utility to enumerate all the *.h header
files, which is expensive on platforms with slow filesystems; it
now optionally uses "ls-files" if working within a repository,
which is a trick similar to how all sources are enumerated to run
ETAGS on.

* js/find-lib-h-with-ls-files-when-possible:
Makefile: use `git ls-files` to list header files, if possible

Merge branch 'rj/hdr-check-gcrypt-fix'Junio C Hamano Mon, 11 Mar 2019 07:16:25 +0000 (16:16 +0900)

Merge branch 'rj/hdr-check-gcrypt-fix'

The set of header files used by "make hdr-check" unconditionally
included sha256/gcrypt.h, even when it is not used, causing the
make target to fail. We now skip it when GCRYPT_SHA256 is not in
use.

* rj/hdr-check-gcrypt-fix:
Makefile: fix 'hdr-check' when GCRYPT not installed

Merge branch 'jk/guard-bswap-header'Junio C Hamano Mon, 11 Mar 2019 07:16:25 +0000 (16:16 +0900)

Merge branch 'jk/guard-bswap-header'

The include file compat/bswap.h has been updated so that it is safe
to (accidentally) include it more than once.

* jk/guard-bswap-header:
compat/bswap: add include header guards

Merge branch 'rd/attr.c-comment-typofix'Junio C Hamano Mon, 11 Mar 2019 07:16:24 +0000 (16:16 +0900)

Merge branch 'rd/attr.c-comment-typofix'

In-code comment typofix.

* rd/attr.c-comment-typofix:
attr.c: ".gitattribute" -> ".gitattributes" (comments)

Merge branch 'yb/utf-16le-bom-spellfix'Junio C Hamano Mon, 11 Mar 2019 07:16:24 +0000 (16:16 +0900)

Merge branch 'yb/utf-16le-bom-spellfix'

Doc update.

* yb/utf-16le-bom-spellfix:
gitattributes.txt: fix typo

Documentation/Makefile: add missing xsl dependencies... Martin Ågren Wed, 27 Feb 2019 18:17:52 +0000 (19:17 +0100)

Documentation/Makefile: add missing xsl dependencies for manpages

These stylesheets very rarely change, but when they do, it really helps
if the manpages depend on them. We're casting the net a bit too wide
here, since we'll only ever use a subset of the stylesheets, but since
these files change so rarely, that should be ok. It's better than
missing a dependency.

Observe that manpage-base-url.xsl is a generated file, so we need to
list it explicitly, besides the `wildcard` expression we're adding here.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mingw: allow building with an MSYS2 runtime v3.xJohannes Schindelin Fri, 8 Mar 2019 15:51:19 +0000 (07:51 -0800)

mingw: allow building with an MSYS2 runtime v3.x

Recently the Git for Windows project started the upgrade process to
a MSYS2 runtime version based on Cygwin v3.x.

This has the very notable consequence that `$(uname -r)` no longer
reports a version starting with "2", but a version with "3".

That breaks our build, as df5218b4c30b (config.mak.uname: support MSys2,
2016-01-13) simply did not expect the version reported by `uname -r` to
depend on the underlying Cygwin version: it expected the reported
version to match the "2" in "MSYS2".

So let's invert that test case to test for *anything else* than a
version starting with "1" (for MSys). That should safeguard us for the
future, even if Cygwin ends up releasing versionsl like 314.272.65536.

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

t3600: use helpers to replace test -d/f/e/s <path>Rohit Ashiwal Mon, 4 Mar 2019 12:08:01 +0000 (17:38 +0530)

t3600: use helpers to replace test -d/f/e/s <path>

Take advantage of helper functions test_path_is_dir(),
test_path_is_missing(), etc. to replace `test -d|f|e|s` since the
functions make the code more readable and have better error
messages.

Signed-off-by: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3600: modernize styleRohit Ashiwal Mon, 4 Mar 2019 12:08:00 +0000 (17:38 +0530)

t3600: modernize style

The tests in `t3600-rm.sh` were written long time ago, and has a lot
of style violations, including the mixed use of tabs and spaces, not
having the title and the opening quote of the body on the first line
of the tests, and other shell script style violations. Update it to
match the CodingGuidelines.

Signed-off-by: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test functions: add function `test_file_not_empty`Rohit Ashiwal Mon, 4 Mar 2019 12:07:59 +0000 (17:37 +0530)

test functions: add function `test_file_not_empty`

Add a helper function to ensure that a given path is a non-empty file,
and give an error message when it is not.

Signed-off-by: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Make sure refs/rewritten/ is per-worktreeNguyễn Thái Ngọc Duy Thu, 7 Mar 2019 12:29:17 +0000 (19:29 +0700)

Make sure refs/rewritten/ is per-worktree

a9be29c981 (sequencer: make refs generated by the `label` command
worktree-local, 2018-04-25) adds refs/rewritten/ as per-worktree
reference space. Unfortunately (my bad) there are a couple places that
need update to make sure it's really per-worktree.

- add_per_worktree_entries_to_dir() is updated to make sure ref listing
look at per-worktree refs/rewritten/ instead of per-repo one [1]

- common_list[] is updated so that git_path() returns the correct
location. This includes "rev-parse --git-path".

This mess is created by me. I started trying to fix it with the
introduction of refs/worktree, where all refs will be per-worktree
without special treatments. Unfortunate refs/rewritten came before
refs/worktree so this is all we can do.

This also fixes logs/refs/worktree not being per-worktree.

[1] note that ref listing still works sometimes. For example, if you
have .git/worktrees/foo/refs/rewritten/bar AND the directory
.git/worktrees/refs/rewritten, refs/rewritten/bar will show up.
add_per_worktree_entries_to_dir() is only needed when the directory
.git/worktrees/refs/rewritten is missing.

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

files-backend.c: reduce duplication in add_per_worktree... Nguyễn Thái Ngọc Duy Thu, 7 Mar 2019 12:29:16 +0000 (19:29 +0700)

files-backend.c: reduce duplication in add_per_worktree_entries_to_dir()

This function is duplicated to handle refs/bisect/ and refs/worktree/
and a third prefix is coming. Time to clean up.

This also fixes incorrect "refs/worktrees/" length in this code. The
correct length is 14 not 11. The test in the next patch will also cover
this.

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

files-backend.c: factor out per-worktree code in loose_... Nguyễn Thái Ngọc Duy Thu, 7 Mar 2019 12:29:15 +0000 (19:29 +0700)

files-backend.c: factor out per-worktree code in loose_fill_ref_dir()

This is the first step for further cleaning up and extending this
function.

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

mingw: drop MakeMaker referenceJohannes Schindelin Mon, 25 Feb 2019 19:27:11 +0000 (11:27 -0800)

mingw: drop MakeMaker reference

In 20d2a30f8ffe (Makefile: replace perl/Makefile.PL with simple make
rules, 2017-12-10), Git stopped using MakeMaker. Therefore, that
definition in the MINGW-specific section became useless.

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

commit-tree: utilize parse-options apiBrandon Richardson Thu, 7 Mar 2019 15:44:09 +0000 (11:44 -0400)

commit-tree: utilize parse-options api

Rather than parse options manually, which is both difficult to
read and error prone, parse options supplied to commit-tree
using the parse-options api.

It was discovered that the --no-gpg-sign option was documented
but not implemented in commit 70ddbd7767 (commit-tree: add missing
--gpg-sign flag, 2019-01-19), and the existing implementation
would attempt to translate the option as a tree oid. It was also
suggested earlier in commit 55ca3f99ae (commit-tree: add and document
--no-gpg-sign, 2013-12-13) that commit-tree should be migrated to
utilize the parse-options api, which could help prevent mistakes
like this in the future. Hence this change.

Also update the documentation to better describe that mixing
`-m` and `-F` options will correctly compose commit log messages in the
order in which the options are given.

In the process, mark various strings for translation.

Signed-off-by: Brandon Richardson <brandon1024.br@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

line-log: suppress diff output with "-s"Jeff King Thu, 7 Mar 2019 19:45:15 +0000 (14:45 -0500)

line-log: suppress diff output with "-s"

When "-L" is in use, we ignore any diff output format that the user
provides to us, and just always print a patch (with extra context lines
covering the whole area of interest). It's not entirely clear what we
should do with all formats (e.g., should "--stat" show just the diffstat
of the touched lines, or the stat for the whole file?).

But "-s" is pretty clear: the user probably wants to see just the
commits that touched those lines, without any diff at all. Let's at
least make that work.

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

convert: avoid malloc of original file sizeJoey Hess Thu, 7 Mar 2019 19:56:57 +0000 (14:56 -0500)

convert: avoid malloc of original file size

We write the output of a "clean" filter into a strbuf. Rather than
growing the strbuf dynamically as we read its output, we make the
initial allocation as large as the original input file. This is a good
guess when the filter is just tweaking a few bytes, but it's disastrous
when the point of the filter is to condense a very large file into a
short identifier (e.g., the way git-lfs and git-annex do). We may ask to
allocate many gigabytes, causing the allocation to fail and Git to
die().

Instead, let's just let strbuf do its usual growth.

When the clean filter does output something around the same size as the
worktree file, the buffer will need to be reallocated until it fits,
starting at 8192 and doubling in size. Benchmarking indicates that
reallocation is not a significant overhead for outputs up to a
few MB in size.

Signed-off-by: Joey Hess <id@joeyh.name>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

docs: move core.excludesFile from git-add to gitignoreDenton Liu Thu, 7 Mar 2019 08:25:30 +0000 (00:25 -0800)

docs: move core.excludesFile from git-add to gitignore

A section in "git add" documentation mentions core.excludesFile and
explains how it works, but this is not specific to the command.

Move this description to gitignore.txt to be more generic.

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

git-clean.txt: clarify ignore pattern filesDenton Liu Thu, 7 Mar 2019 08:25:28 +0000 (00:25 -0800)

git-clean.txt: clarify ignore pattern files

In the git-clean documentation, -x and -e documented .gitignore,
$GIT_DIR/info/excludes but neglected to mention the file pointed to by
core.excludesFile.

Remove specific list of files and, instead, reference gitignore(5)
documentation so that information is consolidated and the git-clean
documentation is more precise.

Reported-by: Robert P. J. Day <rpjday@crashcourse.ca>
Helped-by: Martin Ågren <martin.agren@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config: document --type=color output is a complete... Jeff King Tue, 5 Mar 2019 04:20:51 +0000 (23:20 -0500)

config: document --type=color output is a complete line

Even though the newer "--type=color" option to "git config" is meant
to be upward compatible with the traditional "--get-color" option,
unlike the latter, its output is not an incomplete line that lack
the LF at the end. That makes it consistent with output of other
types like "git config --type=bool".

Document it, as it sometimes surprises unsuspecting users.

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

Start 2.22 cycleJunio C Hamano Thu, 7 Mar 2019 02:59:54 +0000 (11:59 +0900)

Start 2.22 cycle

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

t5552: compensate for v2 filtering ref adv.Jonathan Tan Mon, 25 Feb 2019 21:54:13 +0000 (13:54 -0800)

t5552: compensate for v2 filtering ref adv.

Protocol v2 filters the ref advertisement, but protocol v0 does not. A
test in t5552 uses the ref advertisement, so fix it to use protocol v0.

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

tests: fix protocol version for overspecificationsJonathan Tan Mon, 25 Feb 2019 21:54:12 +0000 (13:54 -0800)

tests: fix protocol version for overspecifications

These tests are also marked with a NEEDSWORK comment.

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

t5700: only run with protocol version 1Jonathan Tan Mon, 25 Feb 2019 21:54:11 +0000 (13:54 -0800)

t5700: only run with protocol version 1

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

t5512: compensate for v0 only sending HEAD symrefsJonathan Tan Mon, 25 Feb 2019 21:54:10 +0000 (13:54 -0800)

t5512: compensate for v0 only sending HEAD symrefs

Protocol v2 supports sending non-HEAD symrefs, but this is not true of
protocol v0. Some tests expect protocol v0 behavior, so fix them to use
protocol v0.

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

t5503: fix overspecification of trace expectationJonathan Tan Mon, 25 Feb 2019 21:54:09 +0000 (13:54 -0800)

t5503: fix overspecification of trace expectation

In order to extract the wants from a trace, a loop in t5503 currently
breaks if "0000" is found. This works for protocol v0 and v1, but not
v2. Instead, teach t5503 to look specifically for the "want" string,
which is compatible with all protocols.

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

tests: always test fetch of unreachable with v0Jonathan Tan Mon, 25 Feb 2019 21:54:08 +0000 (13:54 -0800)

tests: always test fetch of unreachable with v0

Some tests check that fetching an unreachable object fails, but protocol
v2 allows such fetches. Unset GIT_TEST_PROTOCOL_VERSION so that these
tests are always run using protocol v0.

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

t5601: check ssh command only with protocol v0Jonathan Tan Mon, 25 Feb 2019 21:54:07 +0000 (13:54 -0800)

t5601: check ssh command only with protocol v0

When running the SSH command as part of a fetch, Git will write "SendEnv
GIT_PROTOCOL" as an option if protocol v1 or v2 is used, but not v0.
Update all tests that check this to run Git with
GIT_TEST_PROTOCOL_VERSION=0.

I chose not to do a more thorough fix (for example, checking the value of
GIT_TEST_PROTOCOL_VERSION to see if the SendEnv check needs to be done)
because a set of patches [1] that unifies the handling of SSH options,
including writing "SendEnv GIT_PROTOCOL" regardless of protocol version,
is in progress. When that is done, this patch should be reverted, since
the functionality in here is no longer needed.

As of this patch, all tests pass if GIT_TEST_PROTOCOL_VERSION is set to
1.

[1] https://public-inbox.org/git/cover.1545342797.git.steadmon@google.com/

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

tests: define GIT_TEST_PROTOCOL_VERSIONJonathan Tan Mon, 25 Feb 2019 21:54:06 +0000 (13:54 -0800)

tests: define GIT_TEST_PROTOCOL_VERSION

Define a GIT_TEST_PROTOCOL_VERSION environment variable meant to be used
from tests. When set, this ensures protocol.version is at least the
given value, allowing the entire test suite to be run as if this
configuration is in place for all repositories.

As of this patch, all tests pass whether GIT_TEST_PROTOCOL_VERSION is
unset or set to 0. Some tests fail when GIT_TEST_PROTOCOL_VERSION is set
to 1 or 2, but this will be dealt with in subsequent patches.

This is based on work by Ævar Arnfjörð Bjarmason.

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

Merge branch 'jt/http-auth-proto-v2-fix'Junio C Hamano Thu, 7 Mar 2019 00:59:59 +0000 (09:59 +0900)

Merge branch 'jt/http-auth-proto-v2-fix'

Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
a bug in the latter (lack of authentication retry) and generally
improves the code base.

* jt/http-auth-proto-v2-fix:
remote-curl: use post_rpc() for protocol v2 also
remote-curl: refactor reading into rpc_state's buf
remote-curl: reduce scope of rpc_state.result
remote-curl: reduce scope of rpc_state.stdin_preamble
remote-curl: reduce scope of rpc_state.argv

Merge branch 'jk/diff-no-index-initialize'Junio C Hamano Thu, 7 Mar 2019 00:59:59 +0000 (09:59 +0900)

Merge branch 'jk/diff-no-index-initialize'

"git diff --no-index" may still want to access Git goodies like
--ext-diff and --textconv, but so far these have been ignored,
which has been corrected.

* jk/diff-no-index-initialize:
diff: reuse diff setup for --no-index case

Merge branch 'nd/no-more-check-racy'Junio C Hamano Thu, 7 Mar 2019 00:59:59 +0000 (09:59 +0900)

Merge branch 'nd/no-more-check-racy'

Unused code removal.

* nd/no-more-check-racy:
Delete check-racy.c

Merge branch 'rd/doc-hook-used-in-sample'Junio C Hamano Thu, 7 Mar 2019 00:59:59 +0000 (09:59 +0900)

Merge branch 'rd/doc-hook-used-in-sample'

Doc update.

* rd/doc-hook-used-in-sample:
mention use of "hooks.allownonascii" in "man githooks"

Merge branch 'nd/diff-parseopt-2'Junio C Hamano Thu, 7 Mar 2019 00:59:58 +0000 (09:59 +0900)

Merge branch 'nd/diff-parseopt-2'

Second batch to teach the diff machinery to use the parse-options
API.

* nd/diff-parseopt-2: (21 commits)
diff-parseopt: convert --ignore-some-changes
diff-parseopt: convert --[no-]minimal
diff-parseopt: convert --relative
diff-parseopt: convert --no-renames|--[no--rename-empty
diff-parseopt: convert --find-copies-harder
diff-parseopt: convert -C|--find-copies
diff-parseopt: convert -D|--irreversible-delete
diff-parseopt: convert -M|--find-renames
diff-parseopt: convert -B|--break-rewrites
diff-parseopt: convert --output-*
diff-parseopt: convert --[no-]compact-summary
diff-parseopt: convert --stat*
diff-parseopt: convert -s|--no-patch
diff-parseopt: convert --name-status
diff-parseopt: convert --name-only
diff-parseopt: convert --patch-with-stat
diff-parseopt: convert --summary
diff-parseopt: convert --check
diff-parseopt: convert --dirstat and friends
diff-parseopt: convert --numstat and --shortstat
...

Merge branch 'en/merge-options-doc'Junio C Hamano Thu, 7 Mar 2019 00:59:58 +0000 (09:59 +0900)

Merge branch 'en/merge-options-doc'

Doc update.

* en/merge-options-doc:
merge-options.txt: correct wording of --no-commit option

Merge branch 'nd/completion-more-parameters'Junio C Hamano Thu, 7 Mar 2019 00:59:57 +0000 (09:59 +0900)

Merge branch 'nd/completion-more-parameters'

The command line completion (in contrib/) has been taught to
complete more subcommand parameters.

* nd/completion-more-parameters:
completion: add more parameter value completion

Merge branch 'ab/receive-pack-use-after-free-fix'Junio C Hamano Thu, 7 Mar 2019 00:59:57 +0000 (09:59 +0900)

Merge branch 'ab/receive-pack-use-after-free-fix'

Memfix.

* ab/receive-pack-use-after-free-fix:
receive-pack: fix use-after-free bug

Merge branch 'dl/doc-submodule-wo-subcommand'Junio C Hamano Thu, 7 Mar 2019 00:59:57 +0000 (09:59 +0900)

Merge branch 'dl/doc-submodule-wo-subcommand'

Doc update.

* dl/doc-submodule-wo-subcommand:
submodule: document default behavior

Merge branch 'jk/unused-params'Junio C Hamano Thu, 7 Mar 2019 00:59:56 +0000 (09:59 +0900)

Merge branch 'jk/unused-params'

Code clean-up.

* jk/unused-params:
ref-filter: drop unused "sz" parameters
ref-filter: drop unused "obj" parameters
ref-filter: drop unused buf/sz pairs
files-backend: drop refs parameter from split_symref_update()
pack-objects: drop unused parameter from oe_map_new_pack()
merge-recursive: drop several unused parameters
diff: drop complete_rewrite parameter from run_external_diff()
diff: drop unused emit data parameter from sane_truncate_line()
diff: drop unused color reset parameters
diff: drop options parameter from diffcore_fix_diff_index()

Merge branch 'jh/trace2'Junio C Hamano Thu, 7 Mar 2019 00:59:56 +0000 (09:59 +0900)

Merge branch 'jh/trace2'

A more structured way to obtain execution trace has been added.

* jh/trace2:
trace2: add for_each macros to clang-format
trace2: t/helper/test-trace2, t0210.sh, t0211.sh, t0212.sh
trace2:data: add subverb for rebase
trace2:data: add subverb to reset command
trace2:data: add subverb to checkout command
trace2:data: pack-objects: add trace2 regions
trace2:data: add trace2 instrumentation to index read/write
trace2:data: add trace2 hook classification
trace2:data: add trace2 transport child classification
trace2:data: add trace2 sub-process classification
trace2:data: add editor/pager child classification
trace2:data: add trace2 regions to wt-status
trace2: collect Windows-specific process information
trace2: create new combined trace facility
trace2: Documentation/technical/api-trace2.txt

Merge branch 'jk/prune-optim'Junio C Hamano Thu, 7 Mar 2019 00:59:56 +0000 (09:59 +0900)

Merge branch 'jk/prune-optim'

"git prune" has been taught to take advantage of reachability
bitmap when able.

* jk/prune-optim:
t5304: rename "sha1" variables to "oid"
prune: check SEEN flag for reachability
prune: use bitmaps for reachability traversal
prune: lazily perform reachability traversal

Merge branch 'js/doc-symref-in-proto-v1'Junio C Hamano Thu, 7 Mar 2019 00:59:56 +0000 (09:59 +0900)

Merge branch 'js/doc-symref-in-proto-v1'

Doc update.

* js/doc-symref-in-proto-v1:
protocol-capabilities.txt: document symref

Merge branch 'nd/split-index-null-base-fix'Junio C Hamano Thu, 7 Mar 2019 00:59:56 +0000 (09:59 +0900)

Merge branch 'nd/split-index-null-base-fix'

Split-index fix.

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

Merge branch 'rj/prune-packed-excess-args'Junio C Hamano Thu, 7 Mar 2019 00:59:55 +0000 (09:59 +0900)

Merge branch 'rj/prune-packed-excess-args'

"git prune-packed" did not notice and complain against excess
arguments given from the command line, which now it does.

* rj/prune-packed-excess-args:
prune-packed: check for too many arguments

Merge branch 'jc/test-yes-doc'Junio C Hamano Thu, 7 Mar 2019 00:59:54 +0000 (09:59 +0900)

Merge branch 'jc/test-yes-doc'

Test doc update.

* jc/test-yes-doc:
test: caution on our version of 'yes'

Merge branch 'en/combined-all-paths'Junio C Hamano Thu, 7 Mar 2019 00:59:54 +0000 (09:59 +0900)

Merge branch 'en/combined-all-paths'

Output from "diff --cc" did not show the original paths when the
merge involved renames. A new option adds the paths in the
original trees to the output.

* en/combined-all-paths:
log,diff-tree: add --combined-all-paths option

Merge branch 'sc/pack-redundant'Junio C Hamano Thu, 7 Mar 2019 00:59:54 +0000 (09:59 +0900)

Merge branch 'sc/pack-redundant'

Update the implementation of pack-redundant for performance in a
repository with many packfiles.

* sc/pack-redundant:
pack-redundant: consistent sort method
pack-redundant: rename pack_list.all_objects
pack-redundant: new algorithm to find min packs
pack-redundant: delete redundant code
pack-redundant: delay creation of unique_objects
t5323: test cases for git-pack-redundant

Merge branch 'du/branch-show-current'Junio C Hamano Thu, 7 Mar 2019 00:59:53 +0000 (09:59 +0900)

Merge branch 'du/branch-show-current'

"git branch" learned a new subcommand "--show-current".

* du/branch-show-current:
branch: introduce --show-current display option

Merge branch 'dl/complete-submodule-absorbgitdirs'Junio C Hamano Thu, 7 Mar 2019 00:59:53 +0000 (09:59 +0900)

Merge branch 'dl/complete-submodule-absorbgitdirs'

Command-line completion (in contrib/) learned to tab-complete the
"git submodule absorbgitdirs" subcommand.

* dl/complete-submodule-absorbgitdirs:
completion: complete git submodule absorbgitdirs

Merge branch 'wh/author-committer-ident-config'Junio C Hamano Thu, 7 Mar 2019 00:59:53 +0000 (09:59 +0900)

Merge branch 'wh/author-committer-ident-config'

Four new configuration variables {author,committer}.{name,email}
have been introduced to override user.{name,email} in more specific
cases.

* wh/author-committer-ident-config:
config: allow giving separate author and committer idents

Merge branch 'aw/pretty-trailers'Junio C Hamano Thu, 7 Mar 2019 00:59:52 +0000 (09:59 +0900)

Merge branch 'aw/pretty-trailers'

The %(trailers) formatter in "git log --format=..." now allows to
optionally pick trailers selectively by keyword, show only values,
etc.

* aw/pretty-trailers:
pretty: add support for separator option in %(trailers)
strbuf: separate callback for strbuf_expand:ing literals
pretty: add support for "valueonly" option in %(trailers)
pretty: allow showing specific trailers
pretty: single return path in %(trailers) handling
pretty: allow %(trailers) options with explicit value
doc: group pretty-format.txt placeholders descriptions

Merge branch 'nd/diff-parseopt'Junio C Hamano Thu, 7 Mar 2019 00:59:52 +0000 (09:59 +0900)

Merge branch 'nd/diff-parseopt'

The diff machinery, one of the oldest parts of the system, which
long predates the parse-options API, uses fairly long and complex
handcrafted option parser. This is being rewritten to use the
parse-options API.

* nd/diff-parseopt:
diff.c: convert --raw
diff.c: convert -W|--[no-]function-context
diff.c: convert -U|--unified
diff.c: convert -u|-p|--patch
diff.c: prepare to use parse_options() for parsing
diff.h: avoid bit fields in struct diff_flags
diff.h: keep forward struct declarations sorted
parse-options: allow ll_callback with OPTION_CALLBACK
parse-options: avoid magic return codes
parse-options: stop abusing 'callback' for lowlevel callbacks
parse-options: add OPT_BITOP()
parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
parse-options: add one-shot mode
parse-options.h: remove extern on function prototypes

Merge branch 'tg/checkout-no-overlay'Junio C Hamano Thu, 7 Mar 2019 00:59:51 +0000 (09:59 +0900)

Merge branch 'tg/checkout-no-overlay'

"git checkout --no-overlay" can be used to trigger a new mode of
checking out paths out of the tree-ish, that allows paths that
match the pathspec that are in the current index and working tree
and are not in the tree-ish.

* tg/checkout-no-overlay:
revert "checkout: introduce checkout.overlayMode config"
checkout: introduce checkout.overlayMode config
checkout: introduce --{,no-}overlay option
checkout: factor out mark_cache_entry_for_checkout function
checkout: clarify comment
read-cache: add invalidate parameter to remove_marked_cache_entries
entry: support CE_WT_REMOVE flag in checkout_entry
entry: factor out unlink_entry function
move worktree tests to t24*

attr.c: ".gitattribute" -> ".gitattributes" (comments)Robert P. J. Day Wed, 6 Mar 2019 09:14:44 +0000 (04:14 -0500)

attr.c: ".gitattribute" -> ".gitattributes" (comments)

Correct misspelled ".gitattribute" in comments only, so no functional
change.

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

Documentation: turn middle-of-line tabs into spacesMartin Ågren Wed, 6 Mar 2019 06:30:18 +0000 (07:30 +0100)

Documentation: turn middle-of-line tabs into spaces

These tabs happen to appear in columns where they don't stand out too
much, so the diff here is non-obvious. Some of these are rendered
differently by AsciiDoc and Asciidoctor (although the difference might
be invisible!), which is how I found a few of them. The remainder were
found using `git grep "[a-zA-Z.,)]$TAB[a-zA-Z]"`.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-svn.txt: drop escaping '\' that ends up being renderedMartin Ågren Wed, 6 Mar 2019 06:30:17 +0000 (07:30 +0100)

git-svn.txt: drop escaping '\' that ends up being rendered

Escaping two *'s as "\*\*" apparently makes Asciidoctor render the
second backslash literally, so we end up with "*\*". So let's not escape
that second asterisk. The result is now "**" as intended, both in
AsciiDoc and Asciidoctor.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git.txt: remove empty line before list continuationMartin Ågren Wed, 6 Mar 2019 06:30:16 +0000 (07:30 +0100)

git.txt: remove empty line before list continuation

This patch is a no-op for Asciidoctor, but makes AsciiDoc render this as
intended.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config/fsck.txt: avoid starting line with dashMartin Ågren Wed, 6 Mar 2019 06:30:15 +0000 (07:30 +0100)

config/fsck.txt: avoid starting line with dash

This dash at the start of the line causes Asciidoctor to trip on the
list continuations that follow and to render the pluses literally.
Rewrap a little to put the dash elsewhere.

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

config/diff.txt: drop spurious backtickMartin Ågren Wed, 6 Mar 2019 06:30:14 +0000 (07:30 +0100)

config/diff.txt: drop spurious backtick

Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

gitattributes.txt: fix typoYash Bhatambare Wed, 6 Mar 2019 05:23:10 +0000 (05:23 +0000)

gitattributes.txt: fix typo

`UTF-16-LE-BOM` to `UTF-16LE-BOM`.

this closes https://github.com/git-for-windows/git/issues/2095

Signed-off-by: Yash Bhatambare <ybhatambare@gmail.com>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff-parseopt: convert --submoduleNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:26 +0000 (19:30 +0700)

diff-parseopt: convert --submodule

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 --ignore-submodulesNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:25 +0000 (19:30 +0700)

diff-parseopt: convert --ignore-submodules

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 --textconvNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:24 +0000 (19:30 +0700)

diff-parseopt: convert --textconv

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 --ext-diffNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:23 +0000 (19:30 +0700)

diff-parseopt: convert --ext-diff

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 --quietNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:22 +0000 (19:30 +0700)

diff-parseopt: convert --quiet

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 --exit-codeNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:21 +0000 (19:30 +0700)

diff-parseopt: convert --exit-code

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 --color-wordsNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:20 +0000 (19:30 +0700)

diff-parseopt: convert --color-words

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 --word-diff-regexNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:19 +0000 (19:30 +0700)

diff-parseopt: convert --word-diff-regex

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 --word-diffNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:18 +0000 (19:30 +0700)

diff-parseopt: convert --word-diff

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 --[no-]colorNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:17 +0000 (19:30 +0700)

diff-parseopt: convert --[no-]color

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 --[no-]followNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:16 +0000 (19:30 +0700)

diff-parseopt: convert --[no-]follow

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 -RNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:15 +0000 (19:30 +0700)

diff-parseopt: convert -R

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 -a|--textNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:14 +0000 (19:30 +0700)

diff-parseopt: convert -a|--text

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 --full-indexNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:13 +0000 (19:30 +0700)

diff-parseopt: convert --full-index

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 --binaryNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:12 +0000 (19:30 +0700)

diff-parseopt: convert --binary

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 --anchoredNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:11 +0000 (19:30 +0700)

diff-parseopt: convert --anchored

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 --diff-algorithmNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:10 +0000 (19:30 +0700)

diff-parseopt: convert --diff-algorithm

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 --histogramNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:09 +0000 (19:30 +0700)

diff-parseopt: convert --histogram

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 --patienceNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:08 +0000 (19:30 +0700)

diff-parseopt: convert --patience

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 --[no-]indent-heuristicNguyễn Thái Ngọc Duy Tue, 5 Mar 2019 12:30:07 +0000 (19:30 +0700)

diff-parseopt: convert --[no-]indent-heuristic

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

compat/bswap: add include header guardsJeff King Wed, 6 Mar 2019 19:05:10 +0000 (14:05 -0500)

compat/bswap: add include header guards

Our compat/bswap.h lacks the usual preprocessor guards against multiple
inclusion. This usually isn't an issue since it only gets included from
git-compat-util.h, which has its own guards. But it would produce
redeclaration errors if any file included it separately.

Our hdr-check target would complain about this, except that it currently
skips items in compat/ entirely.

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

Makefile: fix 'hdr-check' when GCRYPT not installedRamsay Jones Wed, 6 Mar 2019 00:11:13 +0000 (00:11 +0000)

Makefile: fix 'hdr-check' when GCRYPT not installed

If the GCRYPT_SHA256 build variable is not set, then the 'hdr-check'
target complains about the missing <gcrypt.h> header file. Add the
'sha256/gcrypt.h' header file to the exception list, if the build
variable is not defined. While here, replace the 'xdiff%' filter
pattern with 'xdiff/%' (and similarly for the compat pattern) since
the original pattern inadvertently excluded the 'xdiff-interface.h'
header.

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

remote-curl: mark all error messages for translationJohannes Schindelin Tue, 5 Mar 2019 23:20:40 +0000 (15:20 -0800)

remote-curl: mark all error messages for translation

Suggested by Jeff King.

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

git-reset.txt: clarify documentationDenton Liu Tue, 5 Mar 2019 23:34:26 +0000 (15:34 -0800)

git-reset.txt: clarify documentation

git-reset.txt contained a missing "a" and "wrt". Fix the missing "a" for
correctness and replace "wrt" with "with respect to" so that the
documentation is not so cryptic.

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

Doc: fix misleading asciidoc formatingJean-Noël Avila Tue, 5 Mar 2019 21:44:23 +0000 (22:44 +0100)

Doc: fix misleading asciidoc formating

The end of sentence in "x." at the begining of a line misleads
ascidoctor into interpreting it as the start of numbered sub-list.

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

fsck: always compute USED flags for unreachable objectsJeff King Tue, 5 Mar 2019 04:47:39 +0000 (23:47 -0500)

fsck: always compute USED flags for unreachable objects

The --connectivity-only option avoids opening every object, and instead
just marks reachable objects with a flag and compares this to the set
of all objects. This strategy is discussed in more detail in 3e3f8bd608
(fsck: prepare dummy objects for --connectivity-check, 2017-01-17).

This means that we report _every_ unreachable object as dangling.
Whereas in a full fsck, we'd have actually opened and parsed each of
those unreachable objects, marking their child objects with the USED
flag, to mean "this was mentioned by another object". And thus we can
report only the tip of an unreachable segment of the object graph as
dangling.

You can see this difference with a trivial example:

tree=$(git hash-object -t tree -w /dev/null)
one=$(echo one | git commit-tree $tree)
two=$(echo two | git commit-tree -p $one $tree)

Running `git fsck` will report only $two as dangling, but with
--connectivity-only, both commits (and the tree) are reported. Likewise,
using --lost-found would write all three objects.

We can make --connectivity-only work like the normal case by taking a
separate pass over the unreachable objects, parsing them and marking
objects they refer to as USED. That still avoids parsing any blobs,
though we do pay the cost to access any unreachable commits and trees
(which may or may not be noticeable, depending on how many you have).

If neither --dangling nor --lost-found is in effect, then we can skip
this step entirely, just like we do now. That makes "--connectivity-only
--no-dangling" just as fast as the current "--connectivity-only". I.e.,
we do the correct thing always, but you can still tweak the options to
make it faster if you don't care about dangling objects.

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

doc/fsck: clarify --connectivity-only behaviorJeff King Tue, 5 Mar 2019 04:46:38 +0000 (23:46 -0500)

doc/fsck: clarify --connectivity-only behavior

On reading this again, there are two things that were not immediately
clear to me:

- we do still check links to blobs, even though we don't open the
blobs themselves

- we do not do the normal fsck checks, even for non-blob objects we do
open

Let's reword it to make these points a little more clear.

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

rev-list: allow cached objects in existence checkJeff King Mon, 4 Mar 2019 17:40:54 +0000 (12:40 -0500)

rev-list: allow cached objects in existence check

This fixes a regression in 7c0fe330d5 (rev-list: handle missing tree
objects properly, 2018-10-05) where rev-list will now complain about the
empty tree when it doesn't physically exist on disk.

Before that commit, we relied on the traversal code in list-objects.c to
walk through the trees. Since it uses parse_tree(), we'd do a normal
object lookup that includes looking in the set of "cached" objects
(which is where our magic internal empty-tree kicks in).

After that commit, we instead tell list-objects.c not to die on any
missing trees, and we check them ourselves using has_object_file(). But
that function uses OBJECT_INFO_SKIP_CACHED, which means we won't use our
internal empty tree.

This normally wouldn't come up. For most operations, Git will try to
write out the empty tree object as it would any other object. And
pack-objects in a push or fetch will send the empty tree (even if it's
virtual on the sending side). However, there are cases where this can
matter. One I found in the wild:

1. The root tree of a commit became empty by deleting all files,
without using an index. In this case it was done using libgit2's
tree builder API, but as the included test shows, it can easily be
done with regular git using hash-object.

The resulting repo works OK, as we'd avoid walking over our own
reachable commits for a connectivity check.

2. Cloning with --reference pointing to the repository from (1) can
trigger the problem, because we tell the other side we already have
that commit (and hence the empty tree), but then walk over it
during the connectivity check (where we complain about it missing).

Arguably the workflow in step (1) should be more careful about writing
the empty tree object if we're referencing it. But this workflow did
work prior to 7c0fe330d5, so let's restore it.

This patch makes the minimal fix, which is to swap out a direct call to
oid_object_info_extended(), minus the SKIP_CACHED flag, instead of
calling has_object_file(). This is all that has_object_file() is doing
under the hood. And there's little danger of unrelated fallout from
other unexpected "cached" objects, since there's only one call site that
ends such a cached object, and it's in git-blame.

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

curl: anonymize URLs in error messages and warningsJohannes Schindelin Mon, 4 Mar 2019 15:33:46 +0000 (07:33 -0800)

curl: anonymize URLs in error messages and warnings

Just like 47abd85ba0 (fetch: Strip usernames from url's before storing
them, 2009-04-17) and later 882d49ca5c (push: anonymize URL in status
output, 2016-07-13), this change anonymizes URLs (read: strips them of
user names and especially passwords) in user-facing error messages and
warnings.

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

Makefile: use `git ls-files` to list header files,... Johannes Schindelin Mon, 4 Mar 2019 13:47:06 +0000 (05:47 -0800)

Makefile: use `git ls-files` to list header files, if possible

In d85b0dff72 (Makefile: use `find` to determine static header
dependencies, 2014-08-25), we switched from a static list of header
files to a dynamically-generated one, asking `find` to enumerate them.

Back in those days, we did not use `$(LIB_H)` by default, and many a
`make` implementation seems smart enough not to run that `find` command
in that case, so it was deemed okay to run `find` for special targets
requiring this macro.

However, as of ebb7baf02f (Makefile: add a hdr-check target,
2018-09-19), $(LIB_H) is part of a global rule and therefore must be
expanded. Meaning: this `find` command has to be run upon every
`make` invocation. In the presence of many a worktree, this can tax the
developers' patience quite a bit.

Even in the absence of worktrees or other untracked files and
directories, the cost of I/O to generate that list of header files is
simply a lot larger than a simple `git ls-files` call.

Therefore, just like in 335339758c (Makefile: ask "ls-files" to list
source files if available, 2011-10-18), we now prefer to use `git
ls-files` to enumerate the header files to enumerating them via `find`,
falling back to the latter if the former failed (which would be the case
e.g. in a worktree that was extracted from a source .tar file rather
than from a clone of Git's sources).

This has one notable consequence: we no longer include `command-list.h`
in `LIB_H`, as it is a generated file, not a tracked one, but that is
easily worked around. Of the three sites that use `LIB_H`, two
(`LOCALIZED_C` and `CHK_HDRS`) already handle generated headers
separately. In the third, the computed-dependency fallback, we can just
add in a reference to $(GENERATED_H).

Likewise, we no longer include not-yet-tracked header files in `LIB_H`.

Given the speed improvements, these consequences seem a comparably small
price to pay.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge tag 'l10n-2.21.0-rnd2.1' of git://github.com... Junio C Hamano Tue, 5 Mar 2019 12:53:10 +0000 (21:53 +0900)

Merge tag 'l10n-2.21.0-rnd2.1' of git://github.com/git-l10n/git-po

L10n for Git 2.21.0 round 2.1

* tag 'l10n-2.21.0-rnd2.1' of git://github.com/git-l10n/git-po:
l10n: Fixes to Catalan translation
l10n: Updated Vietnamese translation for v2.21 rd2
l10n: fr.po remove obsolete entries

fetch: ignore SIGPIPE during network operationJeff King Sun, 3 Mar 2019 16:58:43 +0000 (11:58 -0500)

fetch: ignore SIGPIPE during network operation

The default SIGPIPE behavior can be useful for a command that generates
a lot of output: if the receiver of our output goes away, we'll be
notified asynchronously to stop generating it (typically by killing the
program).

But for a command like fetch, which is primarily concerned with
receiving data and writing it to disk, an unexpected SIGPIPE can be
awkward. We're already checking the return value of all of our write()
calls, and dying due to the signal takes away our chance to gracefully
handle the error.

On Linux, we wouldn't generally see SIGPIPE at all during fetch. If the
other side of the network connection hangs up, we'll see ECONNRESET. But
on OS X, we get a SIGPIPE, and the process is killed. This causes t5570
to racily fail, as we sometimes die by signal (instead of the expected
die() call) when the server side hangs up.

Let's ignore SIGPIPE during the network portion of the fetch, which will
cause our write() to return EPIPE, giving us consistent behavior across
platforms.

This fixes the test flakiness, but note that it stops short of fixing
the larger problem. The server side hit a fatal error, sent us an "ERR"
packet, and then hung up. We notice the failure because we're trying to
write to a closed socket. But by dying immediately, we never actually
read the ERR packet and report its content to the user. This is a (racy)
problem on all platforms. So this patch lays the groundwork from which
that problem might be fixed consistently, but it doesn't actually fix
it.

Note the placement of the SIGPIPE handling. The absolute minimal change
would be to ignore SIGPIPE only when we're writing. But twiddling the
signal handler for each write call is inefficient and maintenance
burden. On the opposite end of the spectrum, we could simply declare
that fetch does not need SIGPIPE handling, since it doesn't generate a
lot of output, and we could just ignore it at the start of cmd_fetch().

This patch takes a middle ground. It ignores SIGPIPE during the network
operation (which is admittedly most of the program, since the actual
network operations are all done under the hood by the transport code).
So it's still pretty coarse.

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