gitweb.git
pack-objects: reuse on-disk deltas for thin "have"... Jeff King Tue, 21 Aug 2018 19:07:05 +0000 (15:07 -0400)

pack-objects: reuse on-disk deltas for thin "have" objects

When we serve a fetch, we pass the "wants" and "haves" from
the fetch negotiation to pack-objects. That tells us not
only which objects we need to send, but we also use the
boundary commits as "preferred bases": their trees and blobs
are candidates for delta bases, both for reusing on-disk
deltas and for finding new ones.

However, this misses some opportunities. Modulo some special
cases like shallow or partial clones, we know that every
object reachable from the "haves" could be a preferred base.
We don't use all of them for two reasons:

1. It's expensive to traverse the whole history and
enumerate all of the objects the other side has.

2. The delta search is expensive, so we want to keep the
number of candidate bases sane. The boundary commits
are the most likely to work.

When we have reachability bitmaps, though, reason 1 no
longer applies. We can efficiently compute the set of
reachable objects on the other side (and in fact already did
so as part of the bitmap set-difference to get the list of
interesting objects). And using this set conveniently
covers the shallow and partial cases, since we have to
disable the use of bitmaps for those anyway.

The second reason argues against using these bases in the
search for new deltas. But there's one case where we can use
this information for free: when we have an existing on-disk
delta that we're considering reusing, we can do so if we
know the other side has the base object. This in fact saves
time during the delta search, because it's one less delta we
have to compute.

And that's exactly what this patch does: when we're
considering whether to reuse an on-disk delta, if bitmaps
tell us the other side has the object (and we're making a
thin-pack), then we reuse it.

Here are the results on p5311 using linux.git, which
simulates a client fetching after `N` days since their last
fetch:

Test origin HEAD
--------------------------------------------------------------------------
5311.3: server (1 days) 0.27(0.27+0.04) 0.12(0.09+0.03) -55.6%
5311.4: size (1 days) 0.9M 237.0K -73.7%
5311.5: client (1 days) 0.04(0.05+0.00) 0.10(0.10+0.00) +150.0%
5311.7: server (2 days) 0.34(0.42+0.04) 0.13(0.10+0.03) -61.8%
5311.8: size (2 days) 1.5M 347.7K -76.5%
5311.9: client (2 days) 0.07(0.08+0.00) 0.16(0.15+0.01) +128.6%
5311.11: server (4 days) 0.56(0.77+0.08) 0.13(0.10+0.02) -76.8%
5311.12: size (4 days) 2.8M 566.6K -79.8%
5311.13: client (4 days) 0.13(0.15+0.00) 0.34(0.31+0.02) +161.5%
5311.15: server (8 days) 0.97(1.39+0.11) 0.30(0.25+0.05) -69.1%
5311.16: size (8 days) 4.3M 1.0M -76.0%
5311.17: client (8 days) 0.20(0.22+0.01) 0.53(0.52+0.01) +165.0%
5311.19: server (16 days) 1.52(2.51+0.12) 0.30(0.26+0.03) -80.3%
5311.20: size (16 days) 8.0M 2.0M -74.5%
5311.21: client (16 days) 0.40(0.47+0.03) 1.01(0.98+0.04) +152.5%
5311.23: server (32 days) 2.40(4.44+0.20) 0.31(0.26+0.04) -87.1%
5311.24: size (32 days) 14.1M 4.1M -70.9%
5311.25: client (32 days) 0.70(0.90+0.03) 1.81(1.75+0.06) +158.6%
5311.27: server (64 days) 11.76(26.57+0.29) 0.55(0.50+0.08) -95.3%
5311.28: size (64 days) 89.4M 47.4M -47.0%
5311.29: client (64 days) 5.71(9.31+0.27) 15.20(15.20+0.32) +166.2%
5311.31: server (128 days) 16.15(36.87+0.40) 0.91(0.82+0.14) -94.4%
5311.32: size (128 days) 134.8M 100.4M -25.5%
5311.33: client (128 days) 9.42(16.86+0.49) 25.34(25.80+0.46) +169.0%

In all cases we save CPU time on the server (sometimes
significant) and the resulting pack is smaller. We do spend
more CPU time on the client side, because it has to
reconstruct more deltas. But that's the right tradeoff to
make, since clients tend to outnumber servers. It just means
the thin pack mechanism is doing its job.

From the user's perspective, the end-to-end time of the
operation will generally be faster. E.g., in the 128-day
case, we saved 15s on the server at a cost of 16s on the
client. Since the resulting pack is 34MB smaller, this is a
net win if the network speed is less than 270Mbit/s. And
that's actually the worst case. The 64-day case saves just
over 11s at a cost of just under 11s. So it's a slight win
at any network speed, and the 40MB saved is pure bonus. That
trend continues for the smaller fetches.

The implementation itself is mostly straightforward, with
the new logic going into check_object(). But there are two
tricky bits.

The first is that check_object() needs access to the
relevant information (the thin flag and bitmap result). We
can do this by pushing these into program-lifetime globals.

The second is that the rest of the code assumes that any
reused delta will point to another "struct object_entry" as
its base. But of course the case we are interested in here
is the one where don't have such an entry!

I looked at a number of options that didn't quite work:

- we could use a flag to signal a reused delta, but it's
not a single bit. We have to actually store the oid of
the base, which is normally done by pointing to the
existing object_entry. And we'd have to modify all the
code which looks at deltas.

- we could add the reused bases to the end of the existing
object_entry array. While this does create some extra
work as later stages consider the extra entries, it's
actually not too bad (we're not sending them, so they
don't cost much in the delta search, and at most we'd
have 2*N of them).

But there's a more subtle problem. Adding to the existing
array means we might need to grow it with realloc, which
could move the earlier entries around. While many of the
references to other entries are done by integer index,
some (including ones on the stack) use pointers, which
would become invalidated.

This isn't insurmountable, but it would require quite a
bit of refactoring (and it's hard to know that you've got
it all, since it may work _most_ of the time and then
fail subtly based on memory allocation patterns).

- we could allocate a new one-off entry for the base. In
fact, this is what an earlier version of this patch did.
However, since the refactoring brought in by ad635e82d6
(Merge branch 'nd/pack-objects-pack-struct', 2018-05-23),
the delta_idx code requires that both entries be in the
main packing list.

So taking all of those options into account, what I ended up
with is a separate list of "external bases" that are not
part of the main packing list. Each delta entry that points
to an external base has a single-bit flag to do so; we have a
little breathing room in the bitfield section of
object_entry.

This lets us limit the change primarily to the oe_delta()
and oe_set_delta_ext() functions. And as a bonus, most of
the rest of the code does not consider these dummy entries
at all, saving both runtime CPU and code complexity.

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

pack-bitmap: save "have" bitmap from walkJeff King Tue, 21 Aug 2018 19:07:01 +0000 (15:07 -0400)

pack-bitmap: save "have" bitmap from walk

When we do a bitmap walk, we save the result, which
represents (WANTs & ~HAVEs); i.e., every object we care
about visiting in our walk. However, we throw away the
haves bitmap, which can sometimes be useful, too. Save it
and provide an access function so code which has performed a
walk can query it.

A few notes on the accessor interface:

- the bitmap code calls these "haves" because it grew out
of the want/have negotiation for fetches. But really,
these are simply the objects that would be flagged
UNINTERESTING in a regular traversal. Let's use that
more universal nomenclature for the external module
interface. We may want to change the internal naming
inside the bitmap code, but that's outside the scope of
this patch.

- it still uses a bare "sha1" rather than "oid". That's
true of all of the bitmap code. And in this particular
instance, our caller in pack-objects is dealing with the
bare sha1 that comes from a packed REF_DELTA (we're
pointing directly to the mmap'd pack on disk). That's
something we'll have to deal with as we transition to a
new hash, but we can wait and see how the caller ends up
being fixed and adjust this interface accordingly.

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

t/perf: add perf tests for fetches from a bitmapped... Jeff King Fri, 17 Aug 2018 20:57:41 +0000 (16:57 -0400)

t/perf: add perf tests for fetches from a bitmapped server

A server with bitmapped packs can serve a clone very
quickly. However, fetches are not necessarily made any
faster, because we spend a lot less time in object traversal
(which is what bitmaps help with) and more time finding
deltas (because we may have to throw out on-disk deltas if
the client does not have the base).

As a first step to making this faster, this patch introduces
a new perf script to measure fetches into a repo of various
ages from a fully-bitmapped server.

We separately measure the work done by the server (in
pack-objects) and that done by the client (in index-pack).
Furthermore, we measure the size of the resulting pack.

Breaking it down like this (instead of just doing a regular
"git fetch") lets us see how much each side benefits from
any changes. And since we know the pack size, if we estimate
the network speed, then one could calculate a complete
wall-clock time for the operation (though the script does
not do this automatically).

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

t/perf: add infrastructure for measuring sizesJeff King Fri, 17 Aug 2018 20:56:37 +0000 (16:56 -0400)

t/perf: add infrastructure for measuring sizes

The main objective of scripts in the perf framework is to
run "test_perf", which measures the time it takes to run
some operation. However, it can also be interesting to see
the change in the output size of certain operations.

This patch introduces test_size, which records a single
numeric output from the test and shows it in the aggregated
output (with pretty printing and relative size comparison).

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

t/perf: factor out percent calculationsJeff King Fri, 17 Aug 2018 20:55:24 +0000 (16:55 -0400)

t/perf: factor out percent calculations

This will let us reuse the code when we add new values to
aggregate besides times.

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

t/perf: factor boilerplate out of test_perfJeff King Fri, 17 Aug 2018 20:55:06 +0000 (16:55 -0400)

t/perf: factor boilerplate out of test_perf

About half of test_perf() is boilerplate preparing to run
_any_ test, and the other half is specifically running a
timing test. Let's split it into two functions, so that we
can reuse the boilerplate in future commits.

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

Git 2.19-rc0 v2.19.0-rc0Junio C Hamano Mon, 20 Aug 2018 18:37:21 +0000 (11:37 -0700)

Git 2.19-rc0

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

Merge branch 'ab/checkout-default-remote'Junio C Hamano Mon, 20 Aug 2018 19:53:46 +0000 (12:53 -0700)

Merge branch 'ab/checkout-default-remote'

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

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

Merge branch 'hn/highlight-sideband-keywords'

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

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

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

Merge branch 'nd/cherry-pick-quit-fix'

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

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

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

Merge branch 'sb/submodule-cleanup'

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

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

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

Merge branch 'pw/rebase-i-merge-segv-fix'

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

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

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

Merge branch 'pw/rebase-i-squash-number-fix'

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

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

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

Merge branch 'sb/config-write-fix'

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

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

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

Merge branch 'ab/submodule-relative-url-tests'

Test updates.

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

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

Merge branch 'en/incl-forward-decl'

Code hygiene improvement for the header files.

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

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

Merge branch 'jt/repack-promisor-packs'

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

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

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

Merge branch 'wc/make-funnynames-shared-lazy-prereq'

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

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

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

Merge branch 'jh/partial-clone-doc'

Doc updates.

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

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

Merge branch 'js/chain-lint-attrfix'

Test fix.

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

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

Merge branch 'sb/pull-rebase-submodule'

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

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

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

Merge branch 'js/range-diff'

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

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

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

Merge branch 'nd/no-the-index'

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

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

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

Merge branch 'es/chain-lint-more'

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

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

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

Merge branch 'sg/t5310-empty-input-fix'

Test fix.

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

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

Merge branch 'js/mingw-o-append'

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

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

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

Merge branch 'jk/for-each-object-iteration'

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

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

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

Merge branch 'ab/fetch-tags-noclobber'

Test and doc clean-ups.

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

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

Merge branch 'ng/mergetool-lose-final-prompt'

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

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

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

Merge branch 'jt/commit-graph-per-object-store'

Test update.

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

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

Merge branch 'ds/commit-graph-fsck'

Test fix.

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

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

Merge branch 'jt/fetch-negotiator-skipping'

Test fix.

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

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

Merge branch 'jc/gpg-status'

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

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

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

Merge branch 'jc/update-index-doc'

Doc update.

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

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

Merge branch 'en/update-index-doc'

Doc update.

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

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

Merge branch 'js/typofixes'

Comment update.

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

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

Merge branch 'sk/instaweb-rh-update'

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

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

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

Merge branch 'en/t7406-fixes'

Test fixes.

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

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

Merge branch 'js/rebase-merges-exec-fix'

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

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

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

Merge branch 'ab/test-must-be-empty-for-master'

Test updates.

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

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

Merge branch 'ab/newhash-is-sha256'

Documentation update.

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

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

t2024: mark test using "checkout -p" with PERL prerequisite

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

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

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

sideband: do not read beyond the end of inputJunio C Hamano Sat, 18 Aug 2018 16:16:28 +0000 (09:16 -0700)

sideband: do not read beyond the end of input

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

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

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

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

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

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Seventh batch for 2.19 cycleJunio C Hamano Fri, 17 Aug 2018 20:15:06 +0000 (13:15 -0700)

Seventh batch for 2.19 cycle

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

Merge branch 'nd/complete-config-vars'Junio C Hamano Fri, 17 Aug 2018 20:09:59 +0000 (13:09 -0700)

Merge branch 'nd/complete-config-vars'

Build fix.

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

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

Merge branch 'ar/t4150-am-scissors-test-fix'

Test fix.

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

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

Merge branch 'js/pull-rebase-type-shorthand'

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

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

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

Merge branch 'jk/diff-rendered-docs'

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

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

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

Merge branch 'hn/config-in-code-comment'

Header update.

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

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

Merge branch 'nd/config-blame-sort'

Doc fix.

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

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

Merge branch 'en/t3031-title-fix'

Test fix.

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

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

Merge branch 'sb/indent-heuristic-optim'

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

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

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

Merge branch 'en/abort-df-conflict-fixes'

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

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

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

Merge branch 'mk/http-backend-content-length'

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

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

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

Merge branch 'ot/ref-filter-object-info'

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

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

Merge branch 'nd/no-extern'Junio C Hamano Fri, 17 Aug 2018 20:09:56 +0000 (13:09 -0700)

Merge branch 'nd/no-extern'

Noiseword "extern" has been removed from function decls in the
header files.

* nd/no-extern:
submodule.h: drop extern from function declaration
revision.h: drop extern from function declaration
repository.h: drop extern from function declaration
rerere.h: drop extern from function declaration
line-range.h: drop extern from function declaration
diff.h: remove extern from function declaration
diffcore.h: drop extern from function declaration
convert.h: drop 'extern' from function declaration
cache-tree.h: drop extern from function declaration
blame.h: drop extern on func declaration
attr.h: drop extern from function declaration
apply.h: drop extern on func declaration

Merge branch 'es/want-color-fd-defensive'Junio C Hamano Fri, 17 Aug 2018 20:09:56 +0000 (13:09 -0700)

Merge branch 'es/want-color-fd-defensive'

Futureproofing a helper function that can easily be misused.

* es/want-color-fd-defensive:
color: protect against out-of-bounds reads and writes

Merge branch 'ab/sha1dc'Junio C Hamano Fri, 17 Aug 2018 20:09:56 +0000 (13:09 -0700)

Merge branch 'ab/sha1dc'

AIX portability update for the SHA1DC hash, imported from upstream.

* ab/sha1dc:
sha1dc: update from upstream

Merge branch 'rs/parse-opt-lithelp'Junio C Hamano Fri, 17 Aug 2018 20:09:56 +0000 (13:09 -0700)

Merge branch 'rs/parse-opt-lithelp'

The parse-options machinery learned to refrain from enclosing
placeholder string inside a "<bra" and "ket>" pair automatically
without PARSE_OPT_LITERAL_ARGHELP. Existing help text for option
arguments that are not formatted correctly have been identified and
fixed.

* rs/parse-opt-lithelp:
parse-options: automatically infer PARSE_OPT_LITERAL_ARGHELP
shortlog: correct option help for -w
send-pack: specify --force-with-lease argument help explicitly
pack-objects: specify --index-version argument help explicitly
difftool: remove angular brackets from argument help
add, update-index: fix --chmod argument help
push: use PARSE_OPT_LITERAL_ARGHELP instead of unbalanced brackets

Merge branch 'ab/fetch-nego'Junio C Hamano Fri, 17 Aug 2018 20:09:55 +0000 (13:09 -0700)

Merge branch 'ab/fetch-nego'

Update to a few other topics around 'git fetch'.

* ab/fetch-nego:
fetch doc: cross-link two new negotiation options
negotiator: unknown fetch.negotiationAlgorithm should error out

Merge branch 'jt/refspec-dwim-precedence-fix'Junio C Hamano Fri, 17 Aug 2018 20:09:55 +0000 (13:09 -0700)

Merge branch 'jt/refspec-dwim-precedence-fix'

"git fetch $there refs/heads/s" ought to fetch the tip of the
branch 's', but when "refs/heads/refs/heads/s", i.e. a branch whose
name is "refs/heads/s" exists at the same time, fetched that one
instead by mistake. This has been corrected to honor the usual
disambiguation rules for abbreviated refnames.

* jt/refspec-dwim-precedence-fix:
remote: make refspec follow the same disambiguation rule as local refs

Merge branch 'jk/merge-subtree-heuristics'Junio C Hamano Fri, 17 Aug 2018 20:09:55 +0000 (13:09 -0700)

Merge branch 'jk/merge-subtree-heuristics'

The automatic tree-matching in "git merge -s subtree" was broken 5
years ago and nobody has noticed since then, which is now fixed.

* jk/merge-subtree-heuristics:
score_trees(): fix iteration over trees with missing entries

Merge branch 'ab/test-must-be-empty'Junio C Hamano Fri, 17 Aug 2018 20:09:54 +0000 (13:09 -0700)

Merge branch 'ab/test-must-be-empty'

Test updates.

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

Merge branch 'es/rebase-i-author-script-fix'Junio C Hamano Fri, 17 Aug 2018 20:09:54 +0000 (13:09 -0700)

Merge branch 'es/rebase-i-author-script-fix'

The "author-script" file "git rebase -i" creates got broken when
we started to move the command away from shell script, which is
getting fixed now.

* es/rebase-i-author-script-fix:
sequencer: don't die() on bogus user-edited timestamp
sequencer: fix "rebase -i --root" corrupting author header timestamp
sequencer: fix "rebase -i --root" corrupting author header timezone
sequencer: fix "rebase -i --root" corrupting author header

Merge branch 'ab/fsck-transfer-updates'Junio C Hamano Fri, 17 Aug 2018 20:09:54 +0000 (13:09 -0700)

Merge branch 'ab/fsck-transfer-updates'

The test performed at the receiving end of "git push" to prevent
bad objects from entering repository can be customized via
receive.fsck.* configuration variables; we now have gained a
counterpart to do the same on the "git fetch" side, with
fetch.fsck.* configuration variables.

* ab/fsck-transfer-updates:
fsck: test and document unknown fsck.<msg-id> values
fsck: add stress tests for fsck.skipList
fsck: test & document {fetch,receive}.fsck.* config fallback
fetch: implement fetch.fsck.*
transfer.fsckObjects tests: untangle confusing setup
config doc: elaborate on fetch.fsckObjects security
config doc: elaborate on what transfer.fsckObjects does
config doc: unify the description of fsck.* and receive.fsck.*
config doc: don't describe *.fetchObjects twice
receive.fsck.<msg-id> tests: remove dead code

builtin/submodule--helper: remove stray new lineStefan Beller Thu, 16 Aug 2018 02:30:55 +0000 (19:30 -0700)

builtin/submodule--helper: remove stray new line

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7410: update to new styleStefan Beller Thu, 16 Aug 2018 02:30:54 +0000 (19:30 -0700)

t7410: update to new style

While at it fix a typo (s/independed/independent) and
make sure git is not in a chain of pipes.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

cherry-pick: fix --quit not deleting CHERRY_PICK_HEADNguyễn Thái Ngọc Duy Thu, 16 Aug 2018 16:06:08 +0000 (18:06 +0200)

cherry-pick: fix --quit not deleting CHERRY_PICK_HEAD

--quit is supposed to be --abort but without restoring HEAD. Leaving
CHERRY_PICK_HEAD behind could make other commands mistake that
cherry-pick is still ongoing (e.g. "git commit --amend" will refuse to
work). Clean it too.

For --abort, this job of deleting CHERRY_PICK_HEAD is on "git reset"
so we don't need to do anything else. But let's add extra checks in
--abort tests to confirm.

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

rebase -i: fix SIGSEGV when 'merge <branch>' failsPhillip Wood Wed, 15 Aug 2018 09:39:35 +0000 (10:39 +0100)

rebase -i: fix SIGSEGV when 'merge <branch>' fails

If a merge command in the todo list specifies just a branch to merge
with no -C/-c argument then item->commit is NULL. This means that if
there are merge conflicts error_with_patch() is passed a NULL commit
which causes a segmentation fault when make_patch() tries to look it up.

This commit implements a minimal fix which fixes the crash and allows
the user to successfully commit a conflict resolution with 'git rebase
--continue'. It does not write .git/rebase-merge/patch,
.git/rebase-merge/stopped-sha or update REBASE_HEAD. To sensibly get the
hashes of the merge parents would require refactoring do_merge() to
extract the code that parses the merge parents into a separate function
which error_with_patch() could then use to write the parents into the
stopped-sha file. To create meaningful output make_patch() and 'git
rebase --show-current-patch' would also need to be modified to diff the
merge parent and merge base in this case.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t3430: add conflicting commitPhillip Wood Wed, 15 Aug 2018 09:39:34 +0000 (10:39 +0100)

t3430: add conflicting commit

Move the creation of conflicting-G from a test to the setup so that it
can be used in subsequent tests without creating the kind of implicit
dependencies that plague t3404. While we're at it simplify the
arguments to the test_commit() call the creates the conflicting commit.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sixth batch for 2.19 cycleJunio C Hamano Wed, 15 Aug 2018 22:13:39 +0000 (15:13 -0700)

Sixth batch for 2.19 cycle

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

Merge branch 'jt/connectivity-check-after-unshallow'Junio C Hamano Wed, 15 Aug 2018 22:08:28 +0000 (15:08 -0700)

Merge branch 'jt/connectivity-check-after-unshallow'

"git fetch" sometimes failed to update the remote-tracking refs,
which has been corrected.

* jt/connectivity-check-after-unshallow:
fetch-pack: unify ref in and out param

Merge branch 'sg/travis-retrieve-trash-upon-failure'Junio C Hamano Wed, 15 Aug 2018 22:08:28 +0000 (15:08 -0700)

Merge branch 'sg/travis-retrieve-trash-upon-failure'

The Travis CI scripts were taught to ship back the test data from
failed tests.

* sg/travis-retrieve-trash-upon-failure:
travis-ci: include the trash directories of failed tests in the trace log

Merge branch 'rs/remote-mv-leakfix'Junio C Hamano Wed, 15 Aug 2018 22:08:28 +0000 (15:08 -0700)

Merge branch 'rs/remote-mv-leakfix'

Leakfix.

* rs/remote-mv-leakfix:
remote: clear string_list after use in mv()

Merge branch 'es/mw-to-git-chain-fix'Junio C Hamano Wed, 15 Aug 2018 22:08:27 +0000 (15:08 -0700)

Merge branch 'es/mw-to-git-chain-fix'

Test fix.

* es/mw-to-git-chain-fix:
mw-to-git/t9360: fix broken &&-chain

Merge branch 'ms/http-proto-doc'Junio C Hamano Wed, 15 Aug 2018 22:08:27 +0000 (15:08 -0700)

Merge branch 'ms/http-proto-doc'

Doc fix.

* ms/http-proto-doc:
doc: fix want-capability separator

Merge branch 'nd/pack-objects-threading-doc'Junio C Hamano Wed, 15 Aug 2018 22:08:27 +0000 (15:08 -0700)

Merge branch 'nd/pack-objects-threading-doc'

Doc fix.

* nd/pack-objects-threading-doc:
pack-objects: document about thread synchronization

Merge branch 'jn/subtree-test-fixes'Junio C Hamano Wed, 15 Aug 2018 22:08:27 +0000 (15:08 -0700)

Merge branch 'jn/subtree-test-fixes'

Test fix.

* jn/subtree-test-fixes:
subtree test: simplify preparation of expected results
subtree test: add missing && to &&-chain

Merge branch 'cb/p4-pre-submit-hook'Junio C Hamano Wed, 15 Aug 2018 22:08:27 +0000 (15:08 -0700)

Merge branch 'cb/p4-pre-submit-hook'

"git p4 submit" learns to ask its own pre-submit hook if it should
continue with submitting.

* cb/p4-pre-submit-hook:
git-p4: add the `p4-pre-submit` hook

Merge branch 'js/vscode'Junio C Hamano Wed, 15 Aug 2018 22:08:26 +0000 (15:08 -0700)

Merge branch 'js/vscode'

Add a script (in contrib/) to help users of VSCode work better with
our codebase.

* js/vscode:
vscode: let cSpell work on commit messages, too
vscode: add a dictionary for cSpell
vscode: use 8-space tabs, no trailing ws, etc for Git's source code
vscode: wrap commit messages at column 72 by default
vscode: only overwrite C/C++ settings
mingw: define WIN32 explicitly
cache.h: extract enum declaration from inside a struct declaration
vscode: hard-code a couple defines
contrib: add a script to initialize VS Code configuration

Merge branch 'bb/redecl-enum-fix'Junio C Hamano Wed, 15 Aug 2018 22:08:26 +0000 (15:08 -0700)

Merge branch 'bb/redecl-enum-fix'

Compilation fix.

* bb/redecl-enum-fix:
packfile: ensure that enum object_type is defined

Merge branch 'jk/banned-function'Junio C Hamano Wed, 15 Aug 2018 22:08:26 +0000 (15:08 -0700)

Merge branch 'jk/banned-function'

It is too easy to misuse system API functions such as strcat();
these selected functions are now forbidden in this codebase and
will cause a compilation failure.

* jk/banned-function:
banned.h: mark strncpy() as banned
banned.h: mark sprintf() as banned
banned.h: mark strcat() as banned
automatically ban strcpy()

Merge branch 'en/merge-recursive-skip-fix'Junio C Hamano Wed, 15 Aug 2018 22:08:25 +0000 (15:08 -0700)

Merge branch 'en/merge-recursive-skip-fix'

When the sparse checkout feature is in use, "git cherry-pick" and
other mergy operations lost the skip_worktree bit when a path that
is excluded from checkout requires content level merge, which is
resolved as the same as the HEAD version, without materializing the
merge result in the working tree, which made the path appear as
deleted. This has been corrected by preserving the skip_worktree
bit (and not materializing the file in the working tree).

* en/merge-recursive-skip-fix:
merge-recursive: preserve skip_worktree bit when necessary
t3507: add a testcase showing failure with sparse checkout

Merge branch 'jt/tag-following-with-proto-v2-fix'Junio C Hamano Wed, 15 Aug 2018 22:08:25 +0000 (15:08 -0700)

Merge branch 'jt/tag-following-with-proto-v2-fix'

The wire-protocol v2 relies on the client to send "ref prefixes" to
limit the bandwidth spent on the initial ref advertisement. "git
fetch $remote branch:branch" that asks tags that point into the
history leading to the "branch" automatically followed sent to
narrow prefix and broke the tag following, which has been fixed.

* jt/tag-following-with-proto-v2-fix:
fetch: send "refs/tags/" prefix upon CLI refspecs
t5702: test fetch with multiple refspecs at a time

Merge branch 'jk/size-t'Junio C Hamano Wed, 15 Aug 2018 22:08:25 +0000 (15:08 -0700)

Merge branch 'jk/size-t'

Code clean-up to use size_t/ssize_t when they are the right type.

* jk/size-t:
strbuf_humanise: use unsigned variables
pass st.st_size as hint for strbuf_readlink()
strbuf_readlink: use ssize_t
strbuf: use size_t for length in intermediate variables
reencode_string: use size_t for string lengths
reencode_string: use st_add/st_mult helpers

Merge branch 'sg/coccicheck-updates'Junio C Hamano Wed, 15 Aug 2018 22:08:25 +0000 (15:08 -0700)

Merge branch 'sg/coccicheck-updates'

Update the way we use Coccinelle to find out-of-style code that
need to be modernised.

* sg/coccicheck-updates:
coccinelle: extract dedicated make target to clean Coccinelle's results
coccinelle: put sane filenames into output patches
coccinelle: exclude sha1dc source files from static analysis
coccinelle: use $(addsuffix) in 'coccicheck' make target
coccinelle: mark the 'coccicheck' make target as .PHONY

Merge branch 'sb/histogram-less-memory'Junio C Hamano Wed, 15 Aug 2018 22:08:25 +0000 (15:08 -0700)

Merge branch 'sb/histogram-less-memory'

"git diff --histogram" had a bad memory usage pattern, which has
been rearranged to reduce the peak usage.

* sb/histogram-less-memory:
xdiff/histogram: remove tail recursion
xdiff/xhistogram: move index allocation into find_lcs
xdiff/xhistogram: factor out memory cleanup into free_index()
xdiff/xhistogram: pass arguments directly to fall_back_to_classic_diff

Merge branch 'nd/i18n'Junio C Hamano Wed, 15 Aug 2018 22:08:23 +0000 (15:08 -0700)

Merge branch 'nd/i18n'

Many more strings are prepared for l10n.

* nd/i18n: (23 commits)
transport-helper.c: mark more strings for translation
transport.c: mark more strings for translation
sha1-file.c: mark more strings for translation
sequencer.c: mark more strings for translation
replace-object.c: mark more strings for translation
refspec.c: mark more strings for translation
refs.c: mark more strings for translation
pkt-line.c: mark more strings for translation
object.c: mark more strings for translation
exec-cmd.c: mark more strings for translation
environment.c: mark more strings for translation
dir.c: mark more strings for translation
convert.c: mark more strings for translation
connect.c: mark more strings for translation
config.c: mark more strings for translation
commit-graph.c: mark more strings for translation
builtin/replace.c: mark more strings for translation
builtin/pack-objects.c: mark more strings for translation
builtin/grep.c: mark strings for translation
builtin/config.c: mark more strings for translation
...

Merge branch 'hs/gpgsm'Junio C Hamano Wed, 15 Aug 2018 22:08:23 +0000 (15:08 -0700)

Merge branch 'hs/gpgsm'

Teach "git tag -s" etc. a few configuration variables (gpg.format
that can be set to "openpgp" or "x509", and gpg.<format>.program
that is used to specify what program to use to deal with the format)
to allow x.509 certs with CMS via "gpgsm" to be used instead of
openpgp via "gnupg".

* hs/gpgsm:
gpg-interface t: extend the existing GPG tests with GPGSM
gpg-interface: introduce new signature format "x509" using gpgsm
gpg-interface: introduce new config to select per gpg format program
gpg-interface: do not hardcode the key string len anymore
gpg-interface: introduce an abstraction for multiple gpg formats
t/t7510: check the validation of the new config gpg.format
gpg-interface: add new config to select how to sign a commit

Merge branch 'bw/clone-ref-prefixes'Junio C Hamano Wed, 15 Aug 2018 22:08:23 +0000 (15:08 -0700)

Merge branch 'bw/clone-ref-prefixes'

The wire-protocol v2 relies on the client to send "ref prefixes" to
limit the bandwidth spent on the initial ref advertisement. "git
clone" when learned to speak v2 forgot to do so, which has been
corrected.

* bw/clone-ref-prefixes:
clone: send ref-prefixes when using protocol v2

Merge branch 'jk/core-use-replace-refs'Junio C Hamano Wed, 15 Aug 2018 22:08:22 +0000 (15:08 -0700)

Merge branch 'jk/core-use-replace-refs'

A new configuration variable core.usereplacerefs has been added,
primarily to help server installations that want to ignore the
replace mechanism altogether.

* jk/core-use-replace-refs:
add core.usereplacerefs config option
check_replace_refs: rename to read_replace_refs
check_replace_refs: fix outdated comment

Merge branch 'jh/json-writer'Junio C Hamano Wed, 15 Aug 2018 22:08:22 +0000 (15:08 -0700)

Merge branch 'jh/json-writer'

Preparatory code to later add json output for telemetry data.

* jh/json-writer:
json_writer: new routines to create JSON data

Merge branch 'bb/make-developer-pedantic'Junio C Hamano Wed, 15 Aug 2018 22:08:22 +0000 (15:08 -0700)

Merge branch 'bb/make-developer-pedantic'

"make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
with -pedantic option, which may catch more problematic program
constructs and potential bugs.

* bb/make-developer-pedantic:
Makefile: add a DEVOPTS flag to get pedantic compilation

Merge branch 'es/diff-color-moved-fix'Junio C Hamano Wed, 15 Aug 2018 22:08:22 +0000 (15:08 -0700)

Merge branch 'es/diff-color-moved-fix'

One of the "diff --color-moved" mode "dimmed_zebra" that was named
in an unusual way has been deprecated and replaced by
"dimmed-zebra".

* es/diff-color-moved-fix:
diff: --color-moved: rename "dimmed_zebra" to "dimmed-zebra"

Merge branch 'bw/protocol-v2'Junio C Hamano Wed, 15 Aug 2018 22:08:21 +0000 (15:08 -0700)

Merge branch 'bw/protocol-v2'

Doc update.

* bw/protocol-v2:
pack-protocol: mention and point to docs for protocol v2

Merge branch 'sg/travis-cocci-diagnose-failure'Junio C Hamano Wed, 15 Aug 2018 22:08:21 +0000 (15:08 -0700)

Merge branch 'sg/travis-cocci-diagnose-failure'

Update the way we run static analysis tool at TravisCI to make it
easier to use its findings.

* sg/travis-cocci-diagnose-failure:
travis-ci: fail if Coccinelle static analysis found something to transform
travis-ci: run Coccinelle static analysis with two parallel jobs

Merge branch 'js/t7406-recursive-submodule-update-order... Junio C Hamano Wed, 15 Aug 2018 22:08:21 +0000 (15:08 -0700)

Merge branch 'js/t7406-recursive-submodule-update-order-fix'

Test fix.

* js/t7406-recursive-submodule-update-order-fix:
t7406: avoid failures solely due to timing issues

Merge branch 'bw/fetch-pack-i18n'Junio C Hamano Wed, 15 Aug 2018 22:08:20 +0000 (15:08 -0700)

Merge branch 'bw/fetch-pack-i18n'

i18n updates.

* bw/fetch-pack-i18n:
fetch-pack: mark die strings for translation

Merge branch 'sg/fast-import-dump-refs-on-checkpoint... Junio C Hamano Wed, 15 Aug 2018 22:08:20 +0000 (15:08 -0700)

Merge branch 'sg/fast-import-dump-refs-on-checkpoint-fix'

Test update.

* sg/fast-import-dump-refs-on-checkpoint-fix:
t9300: wait for background fast-import process to die after killing it

Merge branch 'sb/trailers-docfix'Junio C Hamano Wed, 15 Aug 2018 22:08:19 +0000 (15:08 -0700)

Merge branch 'sb/trailers-docfix'

Doc update.

* sb/trailers-docfix:
Documentation/git-interpret-trailers: explain possible values