gitweb.git
revision: implement sparse algorithmDerrick Stolee Wed, 16 Jan 2019 18:25:59 +0000 (10:25 -0800)

revision: implement sparse algorithm

When enumerating objects to place in a pack-file during 'git
pack-objects --revs', we discover the "frontier" of commits
that we care about and the boundary with commit we find
uninteresting. From that point, we walk trees to discover which
trees and blobs are uninteresting. Finally, we walk trees from the
interesting commits to find the interesting objects that are
placed in the pack.

This commit introduces a new, "sparse" way to discover the
uninteresting trees. We use the perspective of a single user trying
to push their topic to a large repository. That user likely changed
a very small fraction of the paths in their working directory, but
we spend a lot of time walking all reachable trees.

The way to switch the logic to work in this sparse way is to start
caring about which paths introduce new trees. While it is not
possible to generate a diff between the frontier boundary and all
of the interesting commits, we can simulate that behavior by
inspecting all of the root trees as a whole, then recursing down
to the set of trees at each path.

We already had taken the first step by passing an oidset to
mark_trees_uninteresting_sparse(). We now create a dictionary
whose keys are paths and values are oidsets. We consider the set
of trees that appear at each path. While we inspect a tree, we
add its subtrees to the oidsets corresponding to the tree entry's
path. We also mark trees as UNINTERESTING if the tree we are
parsing is UNINTERESTING.

To actually improve the performance, we need to terminate our
recursion. If the oidset contains only UNINTERESTING trees, then
we do not continue the recursion. This avoids walking trees that
are likely to not be reachable from interesting trees. If the
oidset contains only interesting trees, then we will walk these
trees in the final stage that collects the intersting objects to
place in the pack. Thus, we only recurse if the oidset contains
both interesting and UNINITERESTING trees.

There are a few ways that this is not a universally better option.

First, we can pack extra objects. If someone copies a subtree
from one tree to another, the first tree will appear UNINTERESTING
and we will not recurse to see that the subtree should also be
UNINTERESTING. We will walk the new tree and see the subtree as
a "new" object and add it to the pack. A test is modified to
demonstrate this behavior and to verify that the new logic is
being exercised.

Second, we can have extra memory pressure. If instead of being a
single user pushing a small topic we are a server sending new
objects from across the entire working directory, then we will
gain very little (the recursion will rarely terminate early) but
will spend extra time maintaining the path-oidset dictionaries.

Despite these potential drawbacks, the benefits of the algorithm
are clear. By adding a counter to 'add_children_by_path' and
'mark_tree_contents_uninteresting', I measured the number of
parsed trees for the two algorithms in a variety of repos.

For git.git, I used the following input:

v2.19.0
^v2.19.0~10

Objects to pack: 550
Walked (old alg): 282
Walked (new alg): 130

For the Linux repo, I used the following input:

v4.18
^v4.18~10

Objects to pack: 518
Walked (old alg): 4,836
Walked (new alg): 188

The two repos above are rather "wide and flat" compared to
other repos that I have used in the past. As a comparison,
I tested an old topic branch in the Azure DevOps repo, which
has a much deeper folder structure than the Linux repo.

Objects to pack: 220
Walked (old alg): 22,804
Walked (new alg): 129

I used the number of walked trees the main metric above because
it is consistent across multiple runs. When I ran my tests, the
performance of the pack-objects command with the same options
could change the end-to-end time by 10x depending on the file
system being warm. However, by repeating the same test on repeat
I could get more consistent timing results. The git.git and
Linux tests were too fast overall (less than 0.5s) to measure
an end-to-end difference. The Azure DevOps case was slow enough
to see the time improve from 15s to 1s in the warm case. The
cold case was 90s to 9s in my testing.

These improvements will have even larger benefits in the super-
large Windows repository. In our experiments, we see the
"Enumerate objects" phase of pack-objects taking 60-80% of the
end-to-end time of non-trivial pushes, taking longer than the
network time to send the pack and the server time to verify the
pack.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

list-objects: consume sparse tree walkDerrick Stolee Wed, 16 Jan 2019 18:25:58 +0000 (10:25 -0800)

list-objects: consume sparse tree walk

When creating a pack-file using 'git pack-objects --revs' we provide
a list of interesting and uninteresting commits. For example, a push
operation would make the local topic branch be interesting and the
known remote refs as uninteresting. We want to discover the set of
new objects to send to the server as a thin pack.

We walk these commits until we discover a frontier of commits such
that every commit walk starting at interesting commits ends in a root
commit or unintersting commit. We then need to discover which
non-commit objects are reachable from uninteresting commits. This
commit walk is not changing during this series.

The mark_edges_uninteresting() method in list-objects.c iterates on
the commit list and does the following:

* If the commit is UNINTERSTING, then mark its root tree and every
object it can reach as UNINTERESTING.

* If the commit is interesting, then mark the root tree of every
UNINTERSTING parent (and all objects that tree can reach) as
UNINTERSTING.

At the very end, we repeat the process on every commit directly
given to the revision walk from stdin. This helps ensure we properly
cover shallow commits that otherwise were not included in the
frontier.

The logic to recursively follow trees is in the
mark_tree_uninteresting() method in revision.c. The algorithm avoids
duplicate work by not recursing into trees that are already marked
UNINTERSTING.

Add a new 'sparse' option to the mark_edges_uninteresting() method
that performs this logic in a slightly different way. As we iterate
over the commits, we add all of the root trees to an oidset. Then,
call mark_trees_uninteresting_sparse() on that oidset. Note that we
include interesting trees in this process. The current implementation
of mark_trees_unintersting_sparse() will walk the same trees as
the old logic, but this will be replaced in a later change.

Add a '--sparse' flag in 'git pack-objects' to call this new logic.
Add a new test script t/t5322-pack-objects-sparse.sh that tests this
option. The tests currently demonstrate that the resulting object
list is the same as the old algorithm. This includes a case where
both algorithms pack an object that is not needed by a remote due to
limits on the explored set of trees. When the sparse algorithm is
changed in a later commit, we will add a test that demonstrates a
change of behavior in some cases.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision: add mark_tree_uninteresting_sparseDerrick Stolee Wed, 16 Jan 2019 18:25:58 +0000 (10:25 -0800)

revision: add mark_tree_uninteresting_sparse

In preparation for a new algorithm that walks fewer trees when
creating a pack from a set of revisions, create a method that
takes an oidset of tree oids and marks reachable objects as
UNINTERESTING.

The current implementation uses the existing
mark_tree_uninteresting to recursively walk the trees and blobs.
This will walk the same number of trees as the old mechanism. To
ensure that mark_tree_uninteresting walks the tree, we need to
remove the UNINTERESTING flag before calling the method. This
implementation will be replaced entirely in a later commit.

There is one new assumption in this approach: we are also given
the oids of the interesting trees. This implementation does not
use those trees at the moment, but we will use them in a later
rewrite of this method.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 2.20 v2.20.0Junio C Hamano Sun, 9 Dec 2018 04:16:21 +0000 (13:16 +0900)

Git 2.20

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

Merge tag 'l10n-2.20.0-rnd3' of https://github.com... Junio C Hamano Sun, 9 Dec 2018 04:11:36 +0000 (13:11 +0900)

Merge tag 'l10n-2.20.0-rnd3' of https://github.com/git-l10n/git-po

l10n-2.20.0-rnd3

* tag 'l10n-2.20.0-rnd3' of https://github.com/git-l10n/git-po: (22 commits)
l10n: de.po: fix two messages
l10n: zh_CN: for git v2.20.0 l10n round 1 to 3
l10n: update German translation
l10n: bg.po: Updated Bulgarian translation (4187t)
l10n: sv.po: Update Swedish translation (4187t0f0u)
l10n: fr.po v2.20.0 round 3
l10n: vi(4187t): Updated Vietnamese translation for v2.20.0 rd3
l10n: es.po v2.20.0 round 3
l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)
l10n: vi(4185t): Updated Vietnamese translation for v2.20.0
l10n: es.po v2.20.0 round 1
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: git.pot: v2.20.0 round 2 (2 new, 2 removed)
l10n: bg.po: Updated Bulgarian translation (4185t)
l10n: sv.po: Update Swedish translation (4185t0f0u)
l10n: fr.po v2.20 rnd 1
l10n: Update Catalan translation
l10n: git.pot: v2.20.0 round 1 (254 new, 27 removed)
l10n: Update Catalan translation
l10n: vi.po: fix typo in pack-objects
...

l10n: de.po: fix two messagesRalf Thielow Fri, 7 Dec 2018 18:43:07 +0000 (19:43 +0100)

l10n: de.po: fix two messages

Reported-by: Phillip Szelat <phillip.szelat@gmail.com>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

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

l10n: zh_CN: for git v2.20.0 l10n round 1 to 3

Translate 257 new messages (4187t0f0u) for git 2.20.0.

Reviewed-by: Zhou Fangyi <fangyi.zhou@yuriko.moe>
Reviewed-by: 依云 <lilydjwg@gmail.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

l10n: update German translationRalf Thielow Thu, 6 Dec 2018 06:44:41 +0000 (07:44 +0100)

l10n: update German translation

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>

Merge branch 'es/format-patch-range-diff-fix-fix'Junio C Hamano Tue, 4 Dec 2018 03:49:50 +0000 (12:49 +0900)

Merge branch 'es/format-patch-range-diff-fix-fix'

* es/format-patch-range-diff-fix-fix:
range-diff: always pass at least minimal diff options

Merge branch 'en/rebase-consistency'Junio C Hamano Tue, 4 Dec 2018 03:49:39 +0000 (12:49 +0900)

Merge branch 'en/rebase-consistency'

* en/rebase-consistency:
rebase docs: fix incorrect format of the section Behavioral Differences

rebase docs: fix incorrect format of the section Behavi... Johannes Sixt Mon, 3 Dec 2018 17:34:49 +0000 (18:34 +0100)

rebase docs: fix incorrect format of the section Behavioral Differences

The text body of section Behavioral Differences is typeset as code,
but should be regular text. Remove the indentation to achieve that.

While here, prettify the language:

- use "the x backend" instead of "x-based rebase";
- use present tense instead of future tense;

and use subsections instead of a list.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

RelNotes 2.20: drop spurious double quoteMartin Ågren Mon, 3 Dec 2018 20:21:51 +0000 (21:21 +0100)

RelNotes 2.20: drop spurious double quote

We have three double-quote characters, which is one too many or too few.
Dropping the last one seems to match the original intention best.

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

RelNotes 2.20: clarify sentenceMartin Ågren Mon, 3 Dec 2018 20:21:50 +0000 (21:21 +0100)

RelNotes 2.20: clarify sentence

I had to read this sentence a few times to understand it. Let's try to
clarify it.

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

RelNotes 2.20: move some items between sectionsMartin Ågren Mon, 3 Dec 2018 20:21:49 +0000 (21:21 +0100)

RelNotes 2.20: move some items between sections

Some items that should be in "Performance, Internal Implementation,
Development Support etc." have ended up in "UI, Workflows & Features"
and "Fixes since v2.19". Move them, and do s/uses/use/ while at it.

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

range-diff: always pass at least minimal diff optionsMartin Ågren Mon, 3 Dec 2018 21:21:31 +0000 (16:21 -0500)

range-diff: always pass at least minimal diff options

Commit d8981c3f88 ("format-patch: do not let its diff-options affect
--range-diff", 2018-11-30) taught `show_range_diff()` to accept a
NULL-pointer as an indication that it should use its own "reasonable
default". That fixed a regression from a5170794 ("Merge branch
'ab/range-diff-no-patch'", 2018-11-18), but unfortunately it introduced
a regression of its own.

In particular, it means we forget the `file` member of the diff options,
so rather than placing a range-diff in the cover-letter, we write it to
stdout. In order to fix this, rewrite the two callers adjusted by
d8981c3f88 to instead create a "dummy" set of diff options where they
only fill in the fields we absolutely require, such as output file and
color.

Modify and extend the existing tests to try and verify that the right
contents end up in the right place.

Don't revert `show_range_diff()`, i.e., let it keep accepting NULL.
Rather than removing what is dead code and figuring out it isn't
actually dead and we've broken 2.20, just leave it for now.

[es: retain diff coloring when going to stdout]

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

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Mon, 3 Dec 2018 04:49:45 +0000 (12:49 +0800)

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

l10n: bg.po: Updated Bulgarian translation (4187t)Alexander Shopov Sun, 2 Dec 2018 12:42:29 +0000 (13:42 +0100)

l10n: bg.po: Updated Bulgarian translation (4187t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

l10n: sv.po: Update Swedish translation (4187t0f0u)Peter Krefting Sun, 2 Dec 2018 14:43:34 +0000 (15:43 +0100)

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

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

Merge branch 'fr_2.20_round3' of git://github.com/jnavi... Jiang Xin Sun, 2 Dec 2018 14:36:36 +0000 (22:36 +0800)

Merge branch 'fr_2.20_round3' of git://github.com/jnavila/git

l10n: fr.po v2.20.0 round 3Jean-Noël Avila Sun, 2 Dec 2018 10:03:23 +0000 (11:03 +0100)

l10n: fr.po v2.20.0 round 3

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

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Sun, 2 Dec 2018 09:57:24 +0000 (17:57 +0800)

Merge branch 'master' of https://github.com/vnwildman/git

l10n: vi(4187t): Updated Vietnamese translation for... Tran Ngoc Quan Sun, 2 Dec 2018 07:15:00 +0000 (14:15 +0700)

l10n: vi(4187t): Updated Vietnamese translation for v2.20.0 rd3

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

l10n: es.po v2.20.0 round 3Christopher Diaz Riveros Sun, 2 Dec 2018 04:12:59 +0000 (23:12 -0500)

l10n: es.po v2.20.0 round 3

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

l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)Jiang Xin Sun, 2 Dec 2018 02:56:26 +0000 (10:56 +0800)

l10n: git.pot: v2.20.0 round 3 (5 new, 3 removed)

Generate po/git.pot from v2.20.0-rc2 for git v2.20.0 l10n round 3.

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

Merge branch 'master' of git://github.com/git-l10n... Jiang Xin Sun, 2 Dec 2018 02:55:14 +0000 (10:55 +0800)

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

Merge branch 'master' of https://github.com/vnwildman/gitJiang Xin Sun, 2 Dec 2018 02:25:09 +0000 (10:25 +0800)

Merge branch 'master' of https://github.com/vnwildman/git

l10n: vi(4185t): Updated Vietnamese translation for... Tran Ngoc Quan Sun, 2 Dec 2018 01:56:42 +0000 (08:56 +0700)

l10n: vi(4185t): Updated Vietnamese translation for v2.20.0

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

l10n: es.po v2.20.0 round 1Christopher Diaz Riveros Sat, 1 Dec 2018 18:41:27 +0000 (13:41 -0500)

l10n: es.po v2.20.0 round 1

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

Git 2.20-rc2 v2.20.0-rc2Junio C Hamano Sat, 1 Dec 2018 12:44:56 +0000 (21:44 +0900)

Git 2.20-rc2

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

Merge branch 'gh/diff-raw-has-no-ellipses'Junio C Hamano Sat, 1 Dec 2018 12:41:45 +0000 (21:41 +0900)

Merge branch 'gh/diff-raw-has-no-ellipses'

"git diff --raw" lost ellipses to adjust the output columns for
some time now, but the documentation still showed them.

* gh/diff-raw-has-no-ellipses:
doc: update diff-format.txt for removed ellipses in --raw

Merge branch 'ss/msvc-strcasecmp'Junio C Hamano Sat, 1 Dec 2018 12:41:45 +0000 (21:41 +0900)

Merge branch 'ss/msvc-strcasecmp'

MSVC update.

* ss/msvc-strcasecmp:
msvc: directly use MS version (_stricmp) of strcasecmp

Merge branch 'sg/test-BUG'Junio C Hamano Sat, 1 Dec 2018 12:41:44 +0000 (21:41 +0900)

Merge branch 'sg/test-BUG'

test framework has been updated to make a bug in the test script
(as opposed to bugs in Git that are discovered by running the
tests) stand out more prominently.

* sg/test-BUG:
tests: send "bug in the test script" errors to the script's stderr

Merge branch 'sg/test-cmp-rev'Junio C Hamano Sat, 1 Dec 2018 12:41:44 +0000 (21:41 +0900)

Merge branch 'sg/test-cmp-rev'

Test framework update.

* sg/test-cmp-rev:
test-lib-functions: make 'test_cmp_rev' more informative on failure

Merge branch 'ab/push-example-in-doc'Junio C Hamano Sat, 1 Dec 2018 12:41:44 +0000 (21:41 +0900)

Merge branch 'ab/push-example-in-doc'

An error message that sugggests how to give correct arguments to
"git push" has been updated.

* ab/push-example-in-doc:
push: change needlessly ambiguous example in error

Merge branch 'rt/rebase-in-c-message-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:44 +0000 (21:41 +0900)

Merge branch 'rt/rebase-in-c-message-fix'

* rt/rebase-in-c-message-fix:
builtin/rebase.c: remove superfluous space in messages

Merge branch 'sg/daemon-test-signal-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:43 +0000 (21:41 +0900)

Merge branch 'sg/daemon-test-signal-fix'

Test fix.

* sg/daemon-test-signal-fix:
t/lib-git-daemon: fix signal checking

Merge branch 'ma/reset-doc-rendering-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:43 +0000 (21:41 +0900)

Merge branch 'ma/reset-doc-rendering-fix'

Doc updates.

* ma/reset-doc-rendering-fix:
git-reset.txt: render literal examples as monospace
git-reset.txt: render tables correctly under Asciidoctor

Merge branch 'ab/replace-graft-with-replace-advice'Junio C Hamano Sat, 1 Dec 2018 12:41:42 +0000 (21:41 +0900)

Merge branch 'ab/replace-graft-with-replace-advice'

The advice message to tell the user to migrate an existing graft
file to the replace system when a graft file was read was shown
even when "git replace --convert-graft-file" command, which is the
way the message suggests to use, was running, which made little
sense.

* ab/replace-graft-with-replace-advice:
advice: don't pointlessly suggest --convert-graft-file

Merge branch 'js/rebase-stat-unrelated-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:42 +0000 (21:41 +0900)

Merge branch 'js/rebase-stat-unrelated-fix'

"git rebase --stat" to transplant a piece of history onto a totally
unrelated history were not working before and silently showed wrong
result. With the recent reimplementation in C, it started to instead
die with an error message, as the original logic was not prepared
to cope with this case. This has now been fixed.

* js/rebase-stat-unrelated-fix:
rebase --stat: fix when rebasing to an unrelated history

Merge branch 'js/rebase-reflog-action-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:42 +0000 (21:41 +0900)

Merge branch 'js/rebase-reflog-action-fix'

"git rebase" reimplemented recently in C accidentally changed the
way reflog entries are recorded (earlier "rebase -i" identified the
entries it leaves with "rebase -i", but the new version always
marks them with "rebase"). This has been corrected.

* js/rebase-reflog-action-fix:
rebase: fix GIT_REFLOG_ACTION regression

Merge branch 'jc/format-patch-range-diff-fix'Junio C Hamano Sat, 1 Dec 2018 12:41:42 +0000 (21:41 +0900)

Merge branch 'jc/format-patch-range-diff-fix'

"git format-patch --range-diff" by mistake passed the diff options
used to generate the primary output of the command to the
range-diff machinery, which caused the range-diff in the cover
letter to include fairly useless "--stat" output. This has been
corrected by forcing a non-customizable default formatting options
on the range-diff machinery when driven by format-patch.

* jc/format-patch-range-diff-fix:
format-patch: do not let its diff-options affect --range-diff

builtin/rebase.c: remove superfluous space in messagesRalf Thielow Fri, 30 Nov 2018 18:11:45 +0000 (19:11 +0100)

builtin/rebase.c: remove superfluous space in messages

The whitespace breakages in these messages were introduced while
reimplementing the subcommand in C. Match these messages to those
in the original scripted version.

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: bg.po: Updated Bulgarian translation (4185t)Alexander Shopov Sat, 1 Dec 2018 10:48:08 +0000 (11:48 +0100)

l10n: bg.po: Updated Bulgarian translation (4185t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

l10n: git.pot: v2.20.0 round 2 (2 new, 2 removed)Jiang Xin Sat, 1 Dec 2018 08:15:51 +0000 (16:15 +0800)

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

Generate po/git.pot from v2.20.0-rc1-10-g7068cbc4ab for git v2.20.0 l10n
round 2.

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

Merge branch 'master' of git://github.com/git-l10n... Jiang Xin Sat, 1 Dec 2018 08:14:16 +0000 (16:14 +0800)

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

Merge branch 'master' of git://github.com/alshopov... Jiang Xin Sat, 1 Dec 2018 08:13:31 +0000 (16:13 +0800)

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

Merge branch 'master' of git://github.com/nafmo/git... Jiang Xin Sat, 1 Dec 2018 08:11:45 +0000 (16:11 +0800)

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

Merge branch 'fr_2.20_rnd1' of git://github.com/jnavila/gitJiang Xin Sat, 1 Dec 2018 07:36:53 +0000 (15:36 +0800)

Merge branch 'fr_2.20_rnd1' of git://github.com/jnavila/git

l10n: bg.po: Updated Bulgarian translation (4185t)Alexander Shopov Mon, 29 Oct 2018 12:31:37 +0000 (13:31 +0100)

l10n: bg.po: Updated Bulgarian translation (4185t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>

rebase --stat: fix when rebasing to an unrelated historyJohannes Schindelin Thu, 29 Nov 2018 13:01:54 +0000 (05:01 -0800)

rebase --stat: fix when rebasing to an unrelated history

When rebasing to a commit history that has no common commits with the
current branch, there is no merge base. In diffstat mode, this means
that we cannot compare to the merge base, but we have to compare to the
empty tree instead.

Also, if running in verbose diffstat mode, we should not output

Changes from <merge-base> to <onto>

as that does not make sense without any merge base.

Note: neither scripted nor built-in versoin of `git rebase` were
prepared for this situation well. We use this opportunity not only to
fix the bug(s), but also to make both versions' output consistent in
this instance. And add a regression test to keep this working in all
eternity.

Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

rebase: fix GIT_REFLOG_ACTION regressionJohannes Schindelin Thu, 29 Nov 2018 19:09:21 +0000 (11:09 -0800)

rebase: fix GIT_REFLOG_ACTION regression

The scripted version of "rebase" honored the `GIT_REFLOG_ACTION`,
and some automation scripts expected the reflog entries to be
prefixed with "rebase -i", not "rebase", after running "rebase -i".
This regressed in the reimplementation in C.

Fix that, and add a regression test, both with `GIT_REFLOG_ACTION`
set and unset.

Note: the reflog message for "rebase finished" did *not* honor
GIT_REFLOG_ACTION, and as we are very late in the v2.20.0-rcN phase,
we leave that bug for later (as it seems that that bug has been with
us from the very beginning).

Reported by Ian Jackson.

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

format-patch: do not let its diff-options affect -... Junio C Hamano Fri, 30 Nov 2018 04:27:11 +0000 (13:27 +0900)

format-patch: do not let its diff-options affect --range-diff

Stop leaking how the primary output of format-patch is customized to
the range-diff machinery and instead let the latter use its own
"reasonable default", in order to correct the breakage introduced by
a5170794 ("Merge branch 'ab/range-diff-no-patch'", 2018-11-18) on
the 'master' front. "git format-patch --range-diff..." without any
weird diff option started to include the "range-diff --stat" output,
which is rather useless right now, that made the whole thing
unusable and this is probably the least disruptive way to whip the
codebase into a shippable shape.

We may want to later make the range-diff driven by format-patch more
configurable, but that would have to wait until we have a good
design.

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

l10n: sv.po: Update Swedish translation (4185t0f0u)Peter Krefting Thu, 29 Nov 2018 11:55:22 +0000 (12:55 +0100)

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

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

Merge branch 'ja/i18n-fix'Junio C Hamano Thu, 29 Nov 2018 07:28:39 +0000 (16:28 +0900)

Merge branch 'ja/i18n-fix'

* ja/i18n-fix:
i18n: fix small typos

Merge branch 'nd/n18n-fix'Junio C Hamano Thu, 29 Nov 2018 07:28:39 +0000 (16:28 +0900)

Merge branch 'nd/n18n-fix'

* nd/n18n-fix:
transport-helper.c: do not translate a string twice

i18n: fix small typosJean-Noël Avila Wed, 28 Nov 2018 21:43:09 +0000 (22:43 +0100)

i18n: fix small typos

Translating the new strings introduced for v2.20 showed some typos.

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

git-reset.txt: render literal examples as monospaceMartin Ågren Wed, 28 Nov 2018 19:02:10 +0000 (20:02 +0100)

git-reset.txt: render literal examples as monospace

Large parts of this document do not use `backticks` around literal
examples such as branch names (`topic/wip`), git usages, `HEAD` and
`<commit-ish>` so they render as ordinary text. Fix that.

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

git-reset.txt: render tables correctly under AsciidoctorMartin Ågren Wed, 28 Nov 2018 19:02:09 +0000 (20:02 +0100)

git-reset.txt: render tables correctly under Asciidoctor

Asciidoctor removes the indentation of each line in these tables, so the
last lines of each table have a completely broken alignment.

Similar to 379805051d ("Documentation: render revisions correctly under
Asciidoctor", 2018-05-06), use an explicit literal block to indicate
that we want to keep the leading whitespace in the tables.

Because this gives us some extra indentation, we can remove the one that
we have been carrying explicitly. That is, drop the first six spaces of
indentation on each line. With Asciidoc (8.6.10), this results in
identical rendering before and after this commit, both for git-reset.1
and git-reset.html.

Reported-by: Paweł Samoraj <samoraj.pawel@gmail.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport-helper.c: do not translate a string twiceNguyễn Thái Ngọc Duy Mon, 26 Nov 2018 19:57:56 +0000 (20:57 +0100)

transport-helper.c: do not translate a string twice

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

advice: don't pointlessly suggest --convert-graft-fileÆvar Arnfjörð Bjarmason Tue, 27 Nov 2018 20:12:55 +0000 (21:12 +0100)

advice: don't pointlessly suggest --convert-graft-file

The advice to run 'git replace --convert-graft-file' added in
f9f99b3f7d ("Deprecate support for .git/info/grafts", 2018-04-29)
didn't add an exception for the 'git replace --convert-graft-file'
codepath itself.

As a result we'd suggest running --convert-graft-file while the user
was running --convert-graft-file, which makes no sense. Before:

$ git replace --convert-graft-file
hint: Support for <GIT_DIR>/info/grafts is deprecated
hint: and will be removed in a future Git version.
hint:
hint: Please use "git replace --convert-graft-file"
hint: to convert the grafts into replace refs.
hint:
hint: Turn this message off by running
hint: "git config advice.graftFileDeprecated false"

Add a check for that case and skip printing the advice while the user
is busy following our advice.

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

l10n: fr.po v2.20 rnd 1Jean-Noël Avila Wed, 28 Nov 2018 21:16:56 +0000 (22:16 +0100)

l10n: fr.po v2.20 rnd 1

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

t/lib-git-daemon: fix signal checkingSZEDER Gábor Mon, 26 Nov 2018 20:03:37 +0000 (21:03 +0100)

t/lib-git-daemon: fix signal checking

Test scripts checking 'git daemon' stop the daemon with a TERM signal,
and the 'stop_git_daemon' helper checks the daemon's exit status to
make sure that it indeed died because of that signal.

This check is bogus since 03c39b3458 (t/lib-git-daemon: use
test_match_signal, 2016-06-24), for two reasons:

- Right after killing 'git daemon', 'stop_git_daemon' saves its exit
status in a variable, but since 03c39b3458 the condition checking
the exit status looks at '$?', which at this point is not the exit
status of 'git daemon', but that of the variable assignment, i.e.
it's always 0.

- The unexpected exit status should abort the whole test script with
'error', but it doesn't, because 03c39b3458 forgot to negate
'test_match_signal's exit status in the condition.

This patch fixes both issues.

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

Merge branch 'nd/per-worktree-ref-iteration'Junio C Hamano Mon, 26 Nov 2018 14:13:42 +0000 (23:13 +0900)

Merge branch 'nd/per-worktree-ref-iteration'

Build fix.

* nd/per-worktree-ref-iteration:
files-backend.c: fix build error on Solaris

Merge branch 'tb/clone-case-smashing-warning-test'Junio C Hamano Mon, 26 Nov 2018 14:13:42 +0000 (23:13 +0900)

Merge branch 'tb/clone-case-smashing-warning-test'

The code recently added to "git clone" to see if the platform's
filesystem is adequate to check out and use the project code
correctly (e.g. a case smashing filesystem cannot be used for a
project with two files whose paths are different only in case) was
meant to help Windows users, but the test for it was not enabled
for that platform, which has been corrected.

* tb/clone-case-smashing-warning-test:
t5601-99: Enable colliding file detection for MINGW

Merge branch 'jk/t5562-perl-path-fix'Junio C Hamano Mon, 26 Nov 2018 14:13:41 +0000 (23:13 +0900)

Merge branch 'jk/t5562-perl-path-fix'

Hotfix for test breakage on platforms whose Perl is not at
/usr/bin/perl

* jk/t5562-perl-path-fix:
t5562: fix perl path

doc: update diff-format.txt for removed ellipses in... Greg Hurrell Sat, 24 Nov 2018 09:29:58 +0000 (10:29 +0100)

doc: update diff-format.txt for removed ellipses in --raw

Since 7cb6ac1e4b ("diff: diff_aligned_abbrev: remove ellipsis after
abbreviated SHA-1 value", 2017-12-03), the "--raw" format of diff
does not add ellipses in an attempt to align the output, but the
documentation was not updated to reflect this.

Signed-off-by: Greg Hurrell <greg@hurrell.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

files-backend.c: fix build error on SolarisNguyễn Thái Ngọc Duy Sun, 25 Nov 2018 04:58:16 +0000 (05:58 +0100)

files-backend.c: fix build error on Solaris

This function files_reflog_path returns void, which usually means
"return;" not returning "void value" from another function.

Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

l10n: Update Catalan translationJordi Mas Sun, 25 Nov 2018 13:53:41 +0000 (14:53 +0100)

l10n: Update Catalan translation

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

t5562: fix perl pathJeff King Thu, 22 Nov 2018 23:38:21 +0000 (01:38 +0200)

t5562: fix perl path

Some systems do not have perl installed to /usr/bin. Use the variable
from the build settiings, and call perl directly than via shebang.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5601-99: Enable colliding file detection for MINGWTorsten Bögershausen Thu, 22 Nov 2018 17:59:52 +0000 (18:59 +0100)

t5601-99: Enable colliding file detection for MINGW

Commit b878579ae7 (clone: report duplicate entries on case-insensitive
filesystems - 2018-08-17) adds a warning to user when cloning a repo
with case-sensitive file names on a case-insensitive file system.

This test has never been enabled for MINGW.
It had been working since day 1, but I forget to report that to the
author.
Enable it after a re-test.

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

Git 2.20-rc1 v2.20.0-rc1Junio C Hamano Wed, 21 Nov 2018 14:24:52 +0000 (23:24 +0900)

Git 2.20-rc1

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

Sync with 2.19.2Junio C Hamano Wed, 21 Nov 2018 14:23:48 +0000 (23:23 +0900)

Sync with 2.19.2

Git 2.19.2 v2.19.2Junio C Hamano Wed, 21 Nov 2018 14:22:12 +0000 (23:22 +0900)

Git 2.19.2

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

Merge branch 'sg/test-rebase-editor-fix' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:10 +0000 (22:58 +0900)

Merge branch 'sg/test-rebase-editor-fix' into maint

* sg/test-rebase-editor-fix:
t3404-rebase-interactive: test abbreviated commands

Merge branch 'tb/char-may-be-unsigned' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:09 +0000 (22:58 +0900)

Merge branch 'tb/char-may-be-unsigned' into maint

Build portability fix.

* tb/char-may-be-unsigned:
path.c: char is not (always) signed

Merge branch 'jk/uploadpack-packobjectshook-fix' into... Junio C Hamano Wed, 21 Nov 2018 13:58:08 +0000 (22:58 +0900)

Merge branch 'jk/uploadpack-packobjectshook-fix' into maint

Code clean-up that results in a small bugfix.

* jk/uploadpack-packobjectshook-fix:
upload-pack: fix broken if/else chain in config callback

Merge branch 'uk/merge-subtree-doc-update' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:08 +0000 (22:58 +0900)

Merge branch 'uk/merge-subtree-doc-update' into maint

Belated documentation update to adjust to a new world order that
happened a yew years ago.

* uk/merge-subtree-doc-update:
howto/using-merge-subtree: mention --allow-unrelated-histories

Merge branch 'jc/cocci-preincr' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:08 +0000 (22:58 +0900)

Merge branch 'jc/cocci-preincr' into maint

Code cleanup.

* jc/cocci-preincr:
fsck: s/++i > 1/i++/
cocci: simplify "if (++u > 1)" to "if (u++)"

Merge branch 'ah/doc-updates' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:07 +0000 (22:58 +0900)

Merge branch 'ah/doc-updates' into maint

Doc updates.

* ah/doc-updates:
doc: fix formatting in git-update-ref
doc: fix indentation of listing blocks in gitweb.conf.txt
doc: fix descripion for 'git tag --format'
doc: fix inappropriate monospace formatting
doc: fix ASCII art tab spacing
doc: clarify boundaries of 'git worktree list --porcelain'

Merge branch 'sg/doc-show-branch-typofix' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:07 +0000 (22:58 +0900)

Merge branch 'sg/doc-show-branch-typofix' into maint

Docfix.

* sg/doc-show-branch-typofix:
doc: fix small typo in git show-branch

Merge branch 'tq/branch-style-fix' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:06 +0000 (22:58 +0900)

Merge branch 'tq/branch-style-fix' into maint

Code clean-up.

* tq/branch-style-fix:
branch: trivial style fix

Merge branch 'tq/branch-create-wo-branch-get' into... Junio C Hamano Wed, 21 Nov 2018 13:58:06 +0000 (22:58 +0900)

Merge branch 'tq/branch-create-wo-branch-get' into maint

Code clean-up.

* tq/branch-create-wo-branch-get:
builtin/branch.c: remove useless branch_get

Merge branch 'sb/strbuf-h-update' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:06 +0000 (22:58 +0900)

Merge branch 'sb/strbuf-h-update' into maint

Code clean-up to serve as a BCP example.
Further clean-up patches may want to follow soon.

* sb/strbuf-h-update:
strbuf.h: format according to coding guidelines

Merge branch 'du/cherry-is-plumbing' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:05 +0000 (22:58 +0900)

Merge branch 'du/cherry-is-plumbing' into maint

Doc update to mark "git cherry" as a plumbing command.

* du/cherry-is-plumbing:
doc: move git-cherry to plumbing

Merge branch 'du/get-tar-commit-id-is-plumbing' into... Junio C Hamano Wed, 21 Nov 2018 13:58:05 +0000 (22:58 +0900)

Merge branch 'du/get-tar-commit-id-is-plumbing' into maint

Doc update to mark "git get-tar-commit-id" as a plumbing command.

* du/get-tar-commit-id-is-plumbing:
doc: move git-get-tar-commit-id to plumbing

Merge branch 'mm/doc-no-dashed-git' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:04 +0000 (22:58 +0900)

Merge branch 'mm/doc-no-dashed-git' into maint

Doc update.

* mm/doc-no-dashed-git:
doc: fix a typo and clarify a sentence

Merge branch 'du/rev-parse-is-plumbing' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:04 +0000 (22:58 +0900)

Merge branch 'du/rev-parse-is-plumbing' into maint

Doc update.

* du/rev-parse-is-plumbing:
doc: move git-rev-parse from porcelain to plumbing

Merge branch 'ma/t7005-bash-workaround' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:04 +0000 (22:58 +0900)

Merge branch 'ma/t7005-bash-workaround' into maint

Test fix.

* ma/t7005-bash-workaround:
t7005-editor: quote filename to fix whitespace-issue

Merge branch 'jc/how-to-document-api' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:03 +0000 (22:58 +0900)

Merge branch 'jc/how-to-document-api' into maint

Doc update.

* jc/how-to-document-api:
CodingGuidelines: document the API in *.h files

Merge branch 'mw/doc-typofixes' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:03 +0000 (22:58 +0900)

Merge branch 'mw/doc-typofixes' into maint

Typofixes.

* mw/doc-typofixes:
docs: typo: s/isimilar/similar/
docs: graph: remove unnecessary `graph_update()' call
docs: typo: s/go/to/

Merge branch 'rs/sequencer-oidset-insert-avoids-dups... Junio C Hamano Wed, 21 Nov 2018 13:58:02 +0000 (22:58 +0900)

Merge branch 'rs/sequencer-oidset-insert-avoids-dups' into maint

Code clean-up.

* rs/sequencer-oidset-insert-avoids-dups:
sequencer: use return value of oidset_insert()

Merge branch 'ma/mailing-list-address-in-git-help'... Junio C Hamano Wed, 21 Nov 2018 13:58:02 +0000 (22:58 +0900)

Merge branch 'ma/mailing-list-address-in-git-help' into maint

Doc update.

* ma/mailing-list-address-in-git-help:
git doc: direct bug reporters to mailing list archive

Merge branch 'nd/packobjectshook-doc-fix' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:01 +0000 (22:58 +0900)

Merge branch 'nd/packobjectshook-doc-fix' into maint

Doc update.

* nd/packobjectshook-doc-fix:
config.txt: correct the note about uploadpack.packObjectsHook

Merge branch 'ma/t1400-undebug-test' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:01 +0000 (22:58 +0900)

Merge branch 'ma/t1400-undebug-test' into maint

Test fix.

* ma/t1400-undebug-test:
t1400: drop debug `echo` to actually execute `test`

Merge branch 'ma/commit-graph-docs' into maintJunio C Hamano Wed, 21 Nov 2018 13:58:00 +0000 (22:58 +0900)

Merge branch 'ma/commit-graph-docs' into maint

Doc update.

* ma/commit-graph-docs:
Doc: refer to the "commit-graph file" with dash
git-commit-graph.txt: refer to "*commit*-graph file"
git-commit-graph.txt: typeset more in monospace
git-commit-graph.txt: fix bullet lists

Merge branch 'dz/credential-doc-url-matching-rules... Junio C Hamano Wed, 21 Nov 2018 13:58:00 +0000 (22:58 +0900)

Merge branch 'dz/credential-doc-url-matching-rules' into maint

Doc update.

* dz/credential-doc-url-matching-rules:
doc: clarify gitcredentials path component matching

Merge branch 'jk/check-everything-connected-is-long... Junio C Hamano Wed, 21 Nov 2018 13:57:59 +0000 (22:57 +0900)

Merge branch 'jk/check-everything-connected-is-long-gone' into maint

Comment fix.

* jk/check-everything-connected-is-long-gone:
receive-pack: update comment with check_everything_connected

Merge branch 'fe/doc-updates' into maintJunio C Hamano Wed, 21 Nov 2018 13:57:58 +0000 (22:57 +0900)

Merge branch 'fe/doc-updates' into maint

Doc updates.

* fe/doc-updates:
git-describe.1: clarify that "human readable" is also git-readable
git-column.1: clarify initial description, provide examples
git-archimport.1: specify what kind of Arch we're talking about

Merge branch 'tg/t5551-with-curl-7.61.1' into maintJunio C Hamano Wed, 21 Nov 2018 13:57:58 +0000 (22:57 +0900)

Merge branch 'tg/t5551-with-curl-7.61.1' into maint

Test update.
Supersedes tz/t5551-with-curl-7.61.1 topic

* tg/t5551-with-curl-7.61.1:
t5551: compare sorted cookies files
t5551: move setup code inside test_expect blocks

Merge branch 'tq/refs-internal-comment-fix' into maintJunio C Hamano Wed, 21 Nov 2018 13:57:58 +0000 (22:57 +0900)

Merge branch 'tq/refs-internal-comment-fix' into maint

Fix for typo in a sample code in comment.

* tq/refs-internal-comment-fix:
refs: docstring typo