]> Kevux Git Server - rit/log
rit
4 years agol10n: pt_PT: cleaning duplicate translations
Daniel Santos [Mon, 9 Aug 2021 07:33:41 +0000 (08:33 +0100)]
l10n: pt_PT: cleaning duplicate translations

 * cleaning duplicate incorrect translations part 1

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: pt_PT: update translation tables
Daniel Santos [Fri, 6 Aug 2021 14:20:28 +0000 (15:20 +0100)]
l10n: pt_PT: update translation tables

 * update translation tables

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: pt_PT: translated git v2.33.0
Daniel Santos [Tue, 3 Aug 2021 13:50:58 +0000 (14:50 +0100)]
l10n: pt_PT: translated git v2.33.0

 * translated new entries of git v2.33.0

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agoMerge branch 'ar/submodule-add-config' into ar/submodule-add
Junio C Hamano [Tue, 10 Aug 2021 18:01:19 +0000 (11:01 -0700)]
Merge branch 'ar/submodule-add-config' into ar/submodule-add

* ar/submodule-add-config:
  submodule--helper: introduce add-config subcommand

4 years agosubmodule--helper: introduce add-config subcommand
Atharva Raykar [Fri, 6 Aug 2021 14:04:31 +0000 (19:34 +0530)]
submodule--helper: introduce add-config subcommand

Add a new "add-config" subcommand to `git submodule--helper` with the
goal of converting part of the shell code in git-submodule.sh related to
`git submodule add` into C code. This new subcommand sets the
configuration variables of a newly added submodule, by registering the
url in local git config, as well as the submodule name and path in the
.gitmodules file. It also sets 'submodule.<name>.active' to "true" if
the submodule path has not already been covered by any pathspec
specified in 'submodule.active'.

This is meant to be a faithful conversion from shell to C, although we
add comments to areas that could be improved in future patches, after
the conversion has settled.

Signed-off-by: Atharva Raykar <raykar.ath@gmail.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Shourya Shukla <periperidip@gmail.com>
Based-on-patch-by: Shourya Shukla <periperidip@gmail.com>
Based-on-patch-by: Prathamesh Chavan <pc44800@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoRevert 'diff-merges: let "-m" imply "-p"'
Jonathan Nieder [Fri, 6 Aug 2021 01:45:23 +0000 (18:45 -0700)]
Revert 'diff-merges: let "-m" imply "-p"'

This reverts commit f5bfcc823ba242a46e20fb6f71c9fbf7ebb222fe, which
made "git log -m" imply "--patch" by default.  The logic was that
"-m", which makes diff generation for merges perform a diff against
each parent, has no use unless I am viewing the diff, so we could save
the user some typing by turning on display of the resulting diff
automatically.  That wasn't expected to adversely affect scripts
because scripts would either be using a command like "git diff-tree"
that already emits diffs by default or would be combining -m with a
diff generation option such as --name-status.  By saving typing for
interactive use without adversely affecting scripts in the wild, it
would be a pure improvement.

The problem is that although diff generation options are only relevant
for the displayed diff, a script author can imagine them affecting
path limiting.  For example, I might run

git log -w --format=%H -- README

hoping to list commits that edited README, excluding whitespace-only
changes.  In fact, a whitespace-only change is not TREESAME so the use
of -w here has no effect (since we don't apply these diff generation
flags to the diff_options struct rev_info::pruning used for this
purpose), but the documentation suggests that it should work

Suppose you specified foo as the <paths>. We shall call
commits that modify foo !TREESAME, and the rest TREESAME. (In
a diff filtered for foo, they look different and equal,
respectively.)

and a script author who has not tested whitespace-only changes
wouldn't notice.

Similarly, a script author could include

git log -m --first-parent --format=%H -- README

to filter the first-parent history for commits that modified README.
The -m is a no-op but it reflects the script author's intent.  For
example, until 1e20a407fe2 (stash list: stop passing "-m" to "git
log", 2021-05-21), "git stash list" did this.

As a result, we can't safely change "-m" to imply "-p" without fear of
breaking such scripts.  Restore the previous behavior.

Noticed because Rust's src/bootstrap/bootstrap.py made use of this
same construct: https://github.com/rust-lang/rust/pull/87513.  That
script has been updated to omit the unnecessary "-m" option, but we
can expect other scripts in the wild to have similar expectations.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: sv.po: Update Swedish translation (5227t0f0u)
Peter Krefting [Mon, 9 Aug 2021 19:38:56 +0000 (20:38 +0100)]
l10n: sv.po: Update Swedish translation (5227t0f0u)

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
4 years agorevision: avoid hitting packfiles when commits are in commit-graph
Patrick Steinhardt [Mon, 9 Aug 2021 08:12:03 +0000 (10:12 +0200)]
revision: avoid hitting packfiles when commits are in commit-graph

When queueing references in git-rev-list(1), we try to optimize parsing
of commits via the commit-graph. To do so, we first look up the object's
type, and if it is a commit we call `repo_parse_commit()` instead of
`parse_object()`. This is quite inefficient though given that we're
always uncompressing the object header in order to determine the type.
Instead, we can opportunistically search the commit-graph for the object
ID: in case it's found, we know it's a commit and can directly fill in
the commit object without having to uncompress the object header.

Expose a new function `lookup_commit_in_graph()`, which tries to find a
commit in the commit-graph by ID, and convert `get_reference()` to use
this function. This provides a big performance win in cases where we
load references in a repository with lots of references pointing to
commits. The following has been executed in a real-world repository with
about 2.2 million refs:

    Benchmark #1: HEAD~: rev-list --unsorted-input --objects --quiet --not --all --not $newrev
      Time (mean ± σ):      4.458 s ±  0.044 s    [User: 4.115 s, System: 0.342 s]
      Range (min … max):    4.409 s …  4.534 s    10 runs

    Benchmark #2: HEAD: rev-list --unsorted-input --objects --quiet --not --all --not $newrev
      Time (mean ± σ):      3.089 s ±  0.015 s    [User: 2.768 s, System: 0.321 s]
      Range (min … max):    3.061 s …  3.105 s    10 runs

    Summary
      'HEAD: rev-list --unsorted-input --objects --quiet --not --all --not $newrev' ran
        1.44 ± 0.02 times faster than 'HEAD~: rev-list --unsorted-input --objects --quiet --not --all --not $newrev'

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agocommit-graph: split out function to search commit position
Patrick Steinhardt [Mon, 9 Aug 2021 08:11:59 +0000 (10:11 +0200)]
commit-graph: split out function to search commit position

The function `find_commit_in_graph()` assumes that the caller has passed
an object which was already determined to be a commit given that it will
access the commit's graph position, which is stored in a commit slab. In
a subsequent patch, we want to search for an object ID though without
knowing whether it is a commit or not, which is not currently possible.

Split out the logic to search the commit graph for a given object ID to
prepare for this change. This commit also renames the function to
`find_commit_pos_in_graph()`, which more accurately reflects what this
function does. Furthermore, in order to allow for the searched object ID
to be const, we need to adjust `bsearch_graph()`'s signature to accept a
constant object ID as input, too.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevision: stop retrieving reference twice
Patrick Steinhardt [Mon, 9 Aug 2021 08:11:54 +0000 (10:11 +0200)]
revision: stop retrieving reference twice

When queueing up references for the revision walk, `handle_one_ref()`
will resolve the reference's object ID via `get_reference()` and then
queue the ID as pending object via `add_pending_oid()`. But given that
`add_pending_oid()` is only a thin wrapper around `add_pending_object()`
which fist calls `get_reference()`, we effectively resolve the reference
twice and thus duplicate some of the work.

Fix the issue by instead calling `add_pending_object()` directly, which
takes the already-resolved object as input. In a repository with lots of
refs, this translates into a near 10% speedup:

    Benchmark #1: HEAD~: rev-list --unsorted-input --objects --quiet --not --all --not $newrev
      Time (mean ± σ):      5.015 s ±  0.038 s    [User: 4.698 s, System: 0.316 s]
      Range (min … max):    4.970 s …  5.089 s    10 runs

    Benchmark #2: HEAD: rev-list --unsorted-input --objects --quiet --not --all --not $newrev
      Time (mean ± σ):      4.606 s ±  0.029 s    [User: 4.260 s, System: 0.345 s]
      Range (min … max):    4.565 s …  4.657 s    10 runs

    Summary
      'HEAD: rev-list --unsorted-input --objects --quiet --not --all --not $newrev' ran
        1.09 ± 0.01 times faster than 'HEAD~: rev-list --unsorted-input --objects --quiet --not --all --not $newrev'

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoconnected: do not sort input revisions
Patrick Steinhardt [Mon, 9 Aug 2021 08:11:50 +0000 (10:11 +0200)]
connected: do not sort input revisions

In order to compute whether objects reachable from a set of tips are all
connected, we do a revision walk with these tips as positive references
and `--not --all`. `--not --all` will cause the revision walk to load
all preexisting references as uninteresting, which can be very expensive
in repositories with many references.

Benchmarking the git-rev-list(1) command highlights that by far the most
expensive single phase is initial sorting of the input revisions: after
all references have been loaded, we first sort commits by author date.
In a real-world repository with about 2.2 million references, it makes
up about 40% of the total runtime of git-rev-list(1).

Ultimately, the connectivity check shouldn't really bother about the
order of input revisions at all. We only care whether we can actually
walk all objects until we hit the cut-off point. So sorting the input is
a complete waste of time.

Introduce a new "--unsorted-input" flag to git-rev-list(1) which will
cause it to not sort the commits and adjust the connectivity check to
always pass the flag. This results in the following speedups, executed
in a clone of gitlab-org/gitlab [1]:

    Benchmark #1: git rev-list  --objects --quiet --not --all --not $(cat newrev)
      Time (mean ± σ):      7.639 s ±  0.065 s    [User: 7.304 s, System: 0.335 s]
      Range (min … max):    7.543 s …  7.742 s    10 runs

    Benchmark #2: git rev-list --unsorted-input --objects --quiet --not --all --not $newrev
      Time (mean ± σ):      4.995 s ±  0.044 s    [User: 4.657 s, System: 0.337 s]
      Range (min … max):    4.909 s …  5.048 s    10 runs

    Summary
      'git rev-list --unsorted-input --objects --quiet --not --all --not $(cat newrev)' ran
        1.53 ± 0.02 times faster than 'git rev-list  --objects --quiet --not --all --not $newrev'

[1]: https://gitlab.com/gitlab-org/gitlab.git. Note that not all refs
     are visible to clients.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuiltin/merge: avoid -Wformat-extra-args from ancient Xcode
Carlo Marcelo Arenas Belón [Sun, 8 Aug 2021 03:38:34 +0000 (20:38 -0700)]
builtin/merge: avoid -Wformat-extra-args from ancient Xcode

d540b70c85 (merge: cleanup messages like commit, 2019-04-17) adds
a way to change part of the helper text using a single call to
strbuf_add_commented_addf but with two formats with varying number
of parameters.

this trigger a warning in old versions of Xcode (ex 8.0), so use
instead two independent calls with a matching number of parameters

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoobject-store: avoid extra ';' from KHASH_INIT
Carlo Marcelo Arenas Belón [Mon, 9 Aug 2021 01:38:32 +0000 (18:38 -0700)]
object-store: avoid extra ';' from KHASH_INIT

cf2dc1c238 (speed up alt_odb_usable() with many alternates, 2021-07-07)
introduces a KHASH_INIT invocation with a trailing ';', which while
commonly expected will trigger warnings with pedantic on both
clang[-Wextra-semi] and gcc[-Wpedantic], because that macro has already
a semicolon and is meant to be invoked without one.

while fixing the macro would be a worthy solution (specially considering
this is a common recurring problem), remove the extra ';' for now to
minimize churn.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agooidtree: avoid nested struct oidtree_node
Carlo Marcelo Arenas Belón [Mon, 9 Aug 2021 01:38:31 +0000 (18:38 -0700)]
oidtree: avoid nested struct oidtree_node

92d8ed8ac1 (oidtree: a crit-bit tree for odb_loose_cache, 2021-07-07)
adds a struct oidtree_node that contains only an n field with a
struct cb_node.

unfortunately, while building in pedantic mode witch clang 12 (as well
as a similar error from gcc 11) it will show:

  oidtree.c:11:17: error: 'n' may not be nested in a struct due to flexible array member [-Werror,-Wflexible-array-extensions]
          struct cb_node n;
                         ^

because of a constrain coded in ISO C 11 6.7.2.1¶3 that forbids using
structs that contain a flexible array as part of another struct.

use a strict cb_node directly instead.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: vi.po(5227t): Updated Vietnamese translation for v2.32.0
Tran Ngoc Quan [Mon, 9 Aug 2021 00:58:57 +0000 (07:58 +0700)]
l10n: vi.po(5227t): Updated Vietnamese translation for v2.32.0

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
4 years agobuild: catch clang that identifies itself as "$VENDOR clang"
Junio C Hamano [Fri, 6 Aug 2021 20:35:37 +0000 (13:35 -0700)]
build: catch clang that identifies itself as "$VENDOR clang"

The case statement in detect-compiler notices 'clang', 'FreeBSD
clang' and 'Apple clang', but there are other platforms that follow
the '$VENDOR clang' pattern (e.g. Debian).

Generalize the pattern to catch them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuild: clang version may not be followed by extra words
Jeff King [Fri, 6 Aug 2021 19:20:22 +0000 (15:20 -0400)]
build: clang version may not be followed by extra words

The get_family and get_version helpers of detect-compiler assume
that the line to identify the version from the compilers have a
token "version", followed by the version number, followed by some
other string, e.g.

  $ CC=gcc get_version_line
  gcc version 10.2.1 20210110 (Debian 10.2.1-6)

But that is not necessarily true, e.g.

  $ CC=clang get_version_line
  Debian clang version 11.0.1-2

Tweak the script not to require extra string after the version.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobuild: update detect-compiler for newer Xcode version
Carlo Marcelo Arenas Belón [Fri, 6 Aug 2021 08:06:34 +0000 (01:06 -0700)]
build: update detect-compiler for newer Xcode version

1da1580e4c (Makefile: detect compiler and enable more warnings in
DEVELOPER=1, 2018-04-14) uses the output of the compiler banner to
detect the compiler family.

Apple had since changed the wording used to refer to its compiler
as clang instead of LLVM as shown by:

  $ cc --version
  Apple clang version 12.0.5 (clang-1205.0.22.9)
  Target: x86_64-apple-darwin20.6.0
  Thread model: posix
  InstalledDir: /Library/Developer/CommandLineTools/usr/bin

so update the script to match, and allow DEVELOPER=1 to work as
expected again in macOS.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.33-rc1
Junio C Hamano [Fri, 6 Aug 2021 19:53:06 +0000 (12:53 -0700)]
Git 2.33-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'cb/t7508-regexp-fix'
Junio C Hamano [Fri, 6 Aug 2021 19:52:22 +0000 (12:52 -0700)]
Merge branch 'cb/t7508-regexp-fix'

* cb/t7508-regexp-fix:
  t7508: avoid non POSIX BRE

4 years agoMerge branch 'ab/pickaxe-pcre2'
Junio C Hamano [Fri, 6 Aug 2021 19:52:15 +0000 (12:52 -0700)]
Merge branch 'ab/pickaxe-pcre2'

* ab/pickaxe-pcre2:
  diff: --pickaxe-all typofix

4 years agoMerge branch 'fc/disable-checkwinsize'
Junio C Hamano [Fri, 6 Aug 2021 19:50:26 +0000 (12:50 -0700)]
Merge branch 'fc/disable-checkwinsize'

* fc/disable-checkwinsize:
  test: fix for COLUMNS and bash 5

4 years agotest: fix for COLUMNS and bash 5
Felipe Contreras [Thu, 5 Aug 2021 19:48:25 +0000 (14:48 -0500)]
test: fix for COLUMNS and bash 5

Since c49a177bec (test-lib.sh: set COLUMNS=80 for --verbose
repeatability, 2021-06-29) multiple tests have been failing when using
bash 5 because checkwinsize is enabled by default, therefore COLUMNS is
reset using TIOCGWINSZ even for non-interactive shells.

It's debatable whether or not bash should even be doing that, but for
now we can avoid this undesirable behavior by disabling this option.

Reported-by: Fabian Stelzer <fabian.stelzer@campoint.net>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
[jc: with SZEDER Gábor's suggestion to do this before setting COLUMNS]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: bg.po: Updated Bulgarian translation (5227t)
Alexander Shopov [Fri, 6 Aug 2021 09:57:40 +0000 (12:57 +0300)]
l10n: bg.po: Updated Bulgarian translation (5227t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
4 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Fri, 6 Aug 2021 00:00:45 +0000 (08:00 +0800)]
Merge branch 'po-id' of github.com:bagasme/git-po

* 'po-id' of github.com:bagasme/git-po:
  l10n: id: po-id for 2.33.0 (round 1)

4 years agoUpdate docs for change of default merge backend
Elijah Newren [Wed, 4 Aug 2021 05:38:02 +0000 (05:38 +0000)]
Update docs for change of default merge backend

Make it clear that `ort` is the default merge strategy now rather than
`recursive`, including moving `ort` to the front of the list of merge
strategies.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoChange default merge backend from recursive to ort
Elijah Newren [Wed, 4 Aug 2021 05:38:01 +0000 (05:38 +0000)]
Change default merge backend from recursive to ort

There are a few reasons to switch the default:
  * Correctness
  * Extensibility
  * Performance

I'll provide some summaries about each.

=== Correctness ===

The original impetus for a new merge backend was to fix issues that were
difficult to fix within recursive's design.  The success with this goal
is perhaps most easily demonstrated by running the following:

  $ git grep -2 KNOWN_FAILURE t/ | grep -A 4 GIT_TEST_MERGE_ALGORITHM
  $ git grep test_expect_merge_algorithm.failure.success t/
  $ git grep test_expect_merge_algorithm.success.failure t/

In order, these greps show:

  * Seven sets of submodule tests (10 total tests) that fail with
    recursive but succeed with ort
  * 22 other tests that fail with recursive, but succeed with ort
  * 0 tests that pass with recursive, but fail with ort

=== Extensibility ===

Being able to perform merges without touching the working tree or index
makes it possible to create new features that were difficult with the
old backend:

  * Merging, cherry-picking, rebasing, reverting in bare repositories...
    or just on branches that aren't checked out.

  * `git diff AUTO_MERGE` -- ability to see what changes the user has
    made to resolve conflicts so far (see commit 5291828df8 ("merge-ort:
    write $GIT_DIR/AUTO_MERGE whenever we hit a conflict", 2021-03-20)

  * A --remerge-diff option for log/show, used to show diffs for merges
    that display the difference between what an automatic merge would
    have created and what was recorded in the merge.  (This option will
    often result in an empty diff because many merges are clean, but for
    the non-clean ones it will show how conflicts were fixed including
    the removal of conflict markers, and also show additional changes
    made outside of conflict regions to e.g. fix semantic conflicts.)

  * A --remerge-diff-only option for log/show, similar to --remerge-diff
    but also showing how cherry-picks or reverts differed from what an
    automatic cherry-pick or revert would provide.

The last three have been implemented already (though only one has been
submitted upstream so far; the others were waiting for performance work
to complete), and I still plan to implement the first one.

=== Performance ===

I'll quote from the summary of my final optimization for merge-ort
(while fixing the testcase name from 'no-renames' to 'few-renames'):

                               Timings

                                          Infinite
                 merge-       merge-     Parallelism
                recursive    recursive    of rename    merge-ort
                 v2.30.0      current     detection     current
                ----------   ---------   -----------   ---------
few-renames:      18.912 s    18.030 s     11.699 s     198.3 ms
mega-renames:   5964.031 s   361.281 s    203.886 s     661.8 ms
just-one-mega:   149.583 s    11.009 s      7.553 s     264.6 ms

                           Speedup factors

                                          Infinite
                 merge-       merge-     Parallelism
                recursive    recursive    of rename
                 v2.30.0      current     detection    merge-ort
                ----------   ---------   -----------   ---------
few-renames:        1           1.05         1.6           95
mega-renames:       1          16.5         29           9012
just-one-mega:      1          13.6         20            565

And, for partial clone users:

             Factor reduction in number of objects needed

                                          Infinite
                 merge-       merge-     Parallelism
                recursive    recursive    of rename
                 v2.30.0      current     detection    merge-ort
                ----------   ---------   -----------   ---------
mega-renames:       1            1            1          181.3

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agorevision: separate walk and unsorted flags
Patrick Steinhardt [Thu, 5 Aug 2021 11:25:24 +0000 (13:25 +0200)]
revision: separate walk and unsorted flags

The `--no-walk` flag supports two modes: either it sorts the revisions
given as input input or it doesn't. This is reflected in a single
`no_walk` flag, which reflects one of the three states "walk", "don't
walk but without sorting" and "don't walk but with sorting".

Split up the flag into two separate bits, one indicating whether we
should walk or not and one indicating whether the input should be sorted
or not. This will allow us to more easily introduce a new flag
`--unsorted-input`, which only impacts the sorting bit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMakefile: normalize clobbering & xargs for tags targets
Ævar Arnfjörð Bjarmason [Wed, 4 Aug 2021 22:54:40 +0000 (00:54 +0200)]
Makefile: normalize clobbering & xargs for tags targets

Since the "tags", "TAGS" and "cscope.out" targets rely on piping into
xargs with an "echo <list> | xargs" pattern, we need to make sure
we're in an append mode.

Unlike my recent change to make use of ".DELETE_ON_ERROR" in
7b76d6bf221 (Makefile: add and use the ".DELETE_ON_ERROR" flag,
2021-06-29), we really do need the "rm $@+" at the beginning (note,
not "rm $@").

This is because the xargs command may decide to invoke the program
multiple times. We need to make sure we've got a union of its results
at the end.

For "ctags" and "etags" we used the "-a" flag for this, for cscope
that behavior is the default. Its "-u" flag disables its equivalent of
an implicit "-a" flag.

Let's also consistently use the $@ and $@+ names instead of needlessly
hardcoding or referring to more verbose names in the "tags" and "TAGS"
rules.

These targets could perhaps be improved in the future by factoring
this "echo <list> | xargs" pattern so that we make intermediate tags
files for each source file, and then assemble them into one "tags"
file at the end.

The etags manual page suggests that doing that (or perhaps just
--update) might be counter-productive, in any case, the tag building
is fast enough for me, so I'm leaving that for now.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMakefile: remove "cscope.out", not "cscope*" in cscope.out target
Ævar Arnfjörð Bjarmason [Wed, 4 Aug 2021 22:54:39 +0000 (00:54 +0200)]
Makefile: remove "cscope.out", not "cscope*" in cscope.out target

Before we generate a "cscope.out" file, remove that file explicitly,
and not everything matching "cscope*". This doesn't change any
behavior of the Makefile in practice, but makes this rule less
confusing, and consistent with other similar rules.

The cscope target was added in a2a9150bf06 (makefile: Add a cscope
target, 2007-10-06). It has always referred to cscope* instead of to
cscope.out in .gitignore and the "clean" target, even though we only
ever generated a cscope.out file.

This was seemingly done to aid use-cases where someone invoked cscope
with the "-q" flag, which would make it create a "cscope.in.out" and
"cscope.po.out" files in addition to "cscope.out".

But us removing those files we never generated is confusing, so let's
only remove the file we need to, furthermore let's use the "-f" flag
to explicitly name the cscope.out file, even though it's the default
if not "-f" argument is supplied.

It is somewhat inconsistent to change from the glob here but not in
the "clean" rule and .gitignore, an earlier version of this change
updated those as well, but see [1][2] for why they were kept.

1. https://lore.kernel.org/git/87k0lit57x.fsf@evledraar.gmail.com/
2. https://lore.kernel.org/git/87im0kn983.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoupload-pack: document and rename --advertise-refs
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:43 +0000 (03:25 +0200)]
upload-pack: document and rename --advertise-refs

The --advertise-refs documentation in git-upload-pack added in
9812f2136b3 (upload-pack.c: use parse-options API, 2016-05-31) hasn't
been entirely true ever since v2 support was implemented in
e52449b6722 (connect: request remote refs using v2, 2018-03-15). Under
v2 we don't advertise the refs at all, but rather dump the
capabilities header.

This option has always been an obscure internal implementation detail,
it wasn't even documented for git-receive-pack. Since it has exactly
one user let's rename it to --http-backend-info-refs, which is more
accurate and points the reader in the right direction. Let's also
cross-link this from the protocol v1 and v2 documentation.

I'm retaining a hidden --advertise-refs alias in case there's any
external users of this, and making both options hidden to the bash
completion (as with most other internal-only options).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve.[ch]: remove "serve_options", split up --advertise-refs code
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:42 +0000 (03:25 +0200)]
serve.[ch]: remove "serve_options", split up --advertise-refs code

The "advertise capabilities" mode of serve.c added in
ed10cb952d3 (serve: introduce git-serve, 2018-03-15) is only used by
the http-backend.c to call {upload,receive}-pack with the
--advertise-refs parameter. See 42526b478e3 (Add stateless RPC options
to upload-pack, receive-pack, 2009-10-30).

Let's just make cmd_upload_pack() take the two (v2) or three (v2)
parameters the the v2/v1 servicing functions need directly, and pass
those in via the function signature. The logic of whether daemon mode
is implied by the timeout belongs in the v1 function (only used
there).

Once we split up the "advertise v2 refs" from "serve v2 request" it
becomes clear that v2 never cared about those in combination. The only
time it mattered was for v1 to emit its ref advertisement, in that
case we wanted to emit the smart-http-only "no-done" capability.

Since we only do that in the --advertise-refs codepath let's just have
it set "do_done" itself in v1's upload_pack() just before send_ref(),
at that point --advertise-refs and --stateless-rpc in combination are
redundant (the only user is get_info_refs() in http-backend.c), so we
can just pass in --advertise-refs only.

Since we need to touch all the serve() and advertise_capabilities()
codepaths let's rename them to less clever and obvious names, it's
been suggested numerous times, the latest of which is [1]'s suggestion
for protocol_v2_serve_loop(). Let's go with that.

1. https://lore.kernel.org/git/CAFQ2z_NyGb8rju5CKzmo6KhZXD0Dp21u-BbyCb2aNxLEoSPRJw@mail.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years ago{upload,receive}-pack tests: add --advertise-refs tests
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:41 +0000 (03:25 +0200)]
{upload,receive}-pack tests: add --advertise-refs tests

The --advertise-refs option had no explicit tests of its own, only
other http tests that would fail at a distance if it it was
broken. Let's test its behavior explicitly.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve.c: move version line to advertise_capabilities()
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:40 +0000 (03:25 +0200)]
serve.c: move version line to advertise_capabilities()

The advertise_capabilities() is only called from serve() and we always
emit this version line before it. In a subsequent commit I'll make
builtin/upload-pack.c sometimes call advertise_capabilities()
directly, so it'll make sense to have this line emitted by
advertise_capabilities(), not serve() itself.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve: move transfer.advertiseSID check into session_id_advertise()
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:39 +0000 (03:25 +0200)]
serve: move transfer.advertiseSID check into session_id_advertise()

In 6b5b6e422ee (serve: advertise session ID in v2 capabilities,
2020-11-11) the check for transfer.advertiseSID was added to the
beginning of the main serve() loop. Thus on startup of the server we'd
populate it.

Let's instead use an explicit lazy initialization pattern in
session_id_advertise() itself, we'll still look the config up only
once per-process, but by moving it out of serve() itself the further
changing of that routine becomes easier.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve.[ch]: don't pass "struct strvec *keys" to commands
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:38 +0000 (03:25 +0200)]
serve.[ch]: don't pass "struct strvec *keys" to commands

The serve.c API added in ed10cb952d3 (serve: introduce git-serve,
2018-03-15) was passing in the raw capabilities "keys", but nothing
downstream of it ever used them.

Let's remove that code because it's not needed. If we do end up
needing to pass information about the advertisement in the future
it'll make more sense to have serve.c parse the capabilities keys and
pass the result of its parsing, rather than expecting expecting its
API users to parse the same keys again.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve: use designated initializers
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:37 +0000 (03:25 +0200)]
serve: use designated initializers

Change the declaration of the protocol_capability struct to use
designated initializers, this makes this more verbose now, but a
follow-up commit will add a new field. At that point these lines would
be too dense to be on one line comfortably.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotransport: use designated initializers
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:36 +0000 (03:25 +0200)]
transport: use designated initializers

Change the assignments to the various transport_vtables to use
designated initializers, this makes the code easier to read and
maintain.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agotransport: rename "fetch" in transport_vtable to "fetch_refs"
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:35 +0000 (03:25 +0200)]
transport: rename "fetch" in transport_vtable to "fetch_refs"

Rename the "fetch" member of the transport_vtable to "fetch_refs" for
consistency with the existing "push_refs". Neither of them just push
"refs" but refs and objects, but having the two match makes the code
more readable than having it be inconsistent, especially since
"fetch_refs" is a lot easier to grep for than "fetch".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoserve: mark has_capability() as static
Ævar Arnfjörð Bjarmason [Thu, 5 Aug 2021 01:25:34 +0000 (03:25 +0200)]
serve: mark has_capability() as static

The has_capability() function introduced in ed10cb952d3 (serve:
introduce git-serve, 2018-03-15) has never been used anywhere except
serve.c, so let's mark it as static.

It was later changed from "extern" in 554544276a6 (*.[ch]: remove
extern from function declarations using spatch, 2019-04-29), but we
could have simply marked it as "static" instead.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoUpdate error message and code comment
Elijah Newren [Wed, 4 Aug 2021 23:50:54 +0000 (23:50 +0000)]
Update error message and code comment

There were two locations in the code that referred to 'merge-recursive'
but which were also applicable to 'merge-ort'.  Update them to more
general wording.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-strategies.txt: add coverage of the `ort` merge strategy
Elijah Newren [Wed, 4 Aug 2021 23:50:53 +0000 (23:50 +0000)]
merge-strategies.txt: add coverage of the `ort` merge strategy

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogit-rebase.txt: correct out-of-date and misleading text about renames
Elijah Newren [Wed, 4 Aug 2021 23:50:52 +0000 (23:50 +0000)]
git-rebase.txt: correct out-of-date and misleading text about renames

Commit 58634dbff8 ("rebase: Allow merge strategies to be used when
rebasing", 2006-06-21) added the --merge option to git-rebase so that
renames could be detected (at least when using the `recursive` merge
backend).  However, git-am -3 gained that same ability in commit
579c9bb198 ("Use merge-recursive in git-am -3.", 2006-12-28).  As such,
the comment about being able to detect renames is not particularly
noteworthy.  Remove it.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-strategies.txt: fix simple capitalization error
Elijah Newren [Wed, 4 Aug 2021 23:50:51 +0000 (23:50 +0000)]
merge-strategies.txt: fix simple capitalization error

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-strategies.txt: avoid giving special preference to patience algorithm
Elijah Newren [Wed, 4 Aug 2021 23:50:50 +0000 (23:50 +0000)]
merge-strategies.txt: avoid giving special preference to patience algorithm

We already have diff-algorithm that explains why there are special diff
algorithms, so we do not need to re-explain patience.  patience exists
as its own toplevel option for historical reasons, but there's no reason
to give it special preference or document it again and suggest it's more
important than other diff algorithms, so just refer to it as a
deprecated shorthand for `diff-algorithm=patience`.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-strategies.txt: do not imply using copy detection is desired
Elijah Newren [Wed, 4 Aug 2021 23:50:49 +0000 (23:50 +0000)]
merge-strategies.txt: do not imply using copy detection is desired

Stating that the recursive strategy "currently cannot make use of
detected copies" implies that this is a technical shortcoming of the
current algorithm.  I disagree with that.  I don't see how copies could
possibly be used in a sane fashion in a merge algorithm -- would we
propagate changes in one file on one side of history to each copy of
that file when merging?  That makes no sense to me.  I cannot think of
anything else that would make sense either.  Change the wording to
simply state that we ignore any copies.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-strategies.txt: update wording for the resolve strategy
Elijah Newren [Wed, 4 Aug 2021 23:50:48 +0000 (23:50 +0000)]
merge-strategies.txt: update wording for the resolve strategy

It is probably helpful to cover the default merge strategy first, so
move the text for the resolve strategy to later in the document.

Further, the wording for "resolve" claimed that it was "considered
generally safe and fast", which might imply in some readers minds that
the same is not true of other strategies.  Rather than adding this text
to all the strategies, just remove it from this one.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoDocumentation: edit awkward references to `git merge-recursive`
Elijah Newren [Wed, 4 Aug 2021 23:50:47 +0000 (23:50 +0000)]
Documentation: edit awkward references to `git merge-recursive`

A few places in the documentation referred to the "`recursive` strategy"
using the phrase "`git merge-recursive`", suggesting that it was forking
subprocesses to call a toplevel builtin.  Perhaps that was relevant to
when rebase was a shell script, but it seems like a rather indirect way
to refer to the `recursive` strategy.  Simplify the references.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodirectory-rename-detection.txt: small updates due to merge-ort optimizations
Elijah Newren [Wed, 4 Aug 2021 23:50:46 +0000 (23:50 +0000)]
directory-rename-detection.txt: small updates due to merge-ort optimizations

In commit 0c4fd732f0 ("Move computation of dir_rename_count from
merge-ort to diffcore-rename", 2021-02-27), much of the logic for
computing directory renames moved into diffcore-rename.
directory-rename-detection.txt had claims that all of that logic was
found in merge-recursive.  Update the documentation.

Acked-by: Derrick Stolee <dstolee@microsoft.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agogit-rebase.txt: correct antiquated claims about --rebase-merges
Elijah Newren [Wed, 4 Aug 2021 23:50:45 +0000 (23:50 +0000)]
git-rebase.txt: correct antiquated claims about --rebase-merges

When --rebase-merges was first introduced, it only worked with the
`recursive` strategy.  Some time later, it gained support for merges
using the `octopus` strategy.  The limitation of only supporting these
two strategies was documented in 25cff9f109 ("rebase -i --rebase-merges:
add a section to the man page", 2018-04-25) and lifted in e145d99347
("rebase -r: support merge strategies other than `recursive`",
2019-07-31).  However, when the limitation was lifted, the documentation
was not updated.  Update it now.

Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: pt_PT: update git-po-helper
Daniel Santos [Tue, 3 Aug 2021 12:30:05 +0000 (13:30 +0100)]
l10n: pt_PT: update git-po-helper

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: pt_PT: remove trailing comments
Daniel Santos [Mon, 2 Aug 2021 13:41:11 +0000 (14:41 +0100)]
l10n: pt_PT: remove trailing comments

 * removed all unecessary trailing file comments

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: pt_PT: translation tables
Daniel Santos [Sat, 24 Jul 2021 12:46:59 +0000 (13:46 +0100)]
l10n: pt_PT: translation tables

 * filled translation table
 * add other translation table helper

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: id: po-id for 2.33.0 (round 1)
Bagas Sanjaya [Wed, 4 Aug 2021 10:24:39 +0000 (17:24 +0700)]
l10n: id: po-id for 2.33.0 (round 1)

Translate following new components:
  * builtin/show-branch.c
  * builtin/show-index.c
  * builtin/show-ref.c
  * builtin/shortlog.c
  * builtin/describe.c
  * bisect.c
  * builtin/bisect--helper.c
  * blame.c
  * builtin/blame.c
  * grep.c
  * builtin/grep.c
  * builtin/diff-tree.c
  * builtin/diff.c
  * help.c

Update translation for following components:
  * diff.c
  * builtin/clone.c
  * builtin/fetch.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
4 years agoMerge branch 'tr-loc-v2.33' of github.com:bitigchi/git-po
Jiang Xin [Thu, 5 Aug 2021 04:56:29 +0000 (12:56 +0800)]
Merge branch 'tr-loc-v2.33' of github.com:bitigchi/git-po

* 'tr-loc-v2.33' of github.com:bitigchi/git-po:
  l10n: tr: v2.33.0 round 1

4 years agol10n: tr: v2.33.0 round 1
Emir Sarı [Tue, 3 Aug 2021 11:13:08 +0000 (14:13 +0300)]
l10n: tr: v2.33.0 round 1

Signed-off-by: Emir Sarı <bitigchi@me.com>
4 years agoMerge branch 'fr_v2.33_rnd1' of github.com:jnavila/git
Jiang Xin [Thu, 5 Aug 2021 00:36:31 +0000 (08:36 +0800)]
Merge branch 'fr_v2.33_rnd1' of github.com:jnavila/git

* 'fr_v2.33_rnd1' of github.com:jnavila/git:
  l10n: fr.po v2.33 rnd 1
  l10n: fr: fix typo

4 years agoThe eighth batch
Junio C Hamano [Wed, 4 Aug 2021 20:09:13 +0000 (13:09 -0700)]
The eighth batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'tb/mingw-rmdir-symlink-to-directory'
Junio C Hamano [Wed, 4 Aug 2021 20:28:56 +0000 (13:28 -0700)]
Merge branch 'tb/mingw-rmdir-symlink-to-directory'

Windows rmdir() equivalent behaves differently from POSIX ones in
that when used on a symbolic link that points at a directory, the
target directory gets removed, which has been corrected.

* tb/mingw-rmdir-symlink-to-directory:
  mingw: align symlinks-related rmdir() behavior with Linux

4 years agoMerge branch 'ar/doc-markup-fix'
Junio C Hamano [Wed, 4 Aug 2021 20:28:55 +0000 (13:28 -0700)]
Merge branch 'ar/doc-markup-fix'

Doc mark-up fix.

* ar/doc-markup-fix:
  Documentation: render special characters correctly

4 years agoMerge branch 'ab/getcwd-test'
Junio C Hamano [Wed, 4 Aug 2021 20:28:55 +0000 (13:28 -0700)]
Merge branch 'ab/getcwd-test'

Portability test update.

* ab/getcwd-test:
  t0001: fix broken not-quite getcwd(3) test in bed67874e2

4 years agoMerge branch 'rs/use-fspathhash'
Junio C Hamano [Wed, 4 Aug 2021 20:28:54 +0000 (13:28 -0700)]
Merge branch 'rs/use-fspathhash'

Code simplification.

* rs/use-fspathhash:
  use fspathhash() everywhere

4 years agoMerge branch 'pb/merge-autostash-more'
Junio C Hamano [Wed, 4 Aug 2021 20:28:54 +0000 (13:28 -0700)]
Merge branch 'pb/merge-autostash-more'

The local changes stashed by "git merge --autostash" were lost when
the merge failed in certain ways, which has been corrected.

* pb/merge-autostash-more:
  merge: apply autostash if merge strategy fails
  merge: apply autostash if fast-forward fails
  Documentation: define 'MERGE_AUTOSTASH'
  merge: add missing word "strategy" to a message

4 years agoMerge branch 'en/ort-perf-batch-14'
Junio C Hamano [Wed, 4 Aug 2021 20:28:54 +0000 (13:28 -0700)]
Merge branch 'en/ort-perf-batch-14'

Further optimization on "merge -sort" backend.

* en/ort-perf-batch-14:
  merge-ort: restart merge with cached renames to reduce process entry cost
  merge-ort: avoid recursing into directories when we don't need to
  merge-ort: defer recursing into directories when merge base is matched
  merge-ort: add a handle_deferred_entries() helper function
  merge-ort: add data structures for allowable trivial directory resolves
  merge-ort: add some more explanations in collect_merge_info_callback()
  merge-ort: resolve paths early when we have sufficient information

4 years agoMerge branch 'ds/commit-and-checkout-with-sparse-index'
Junio C Hamano [Wed, 4 Aug 2021 20:28:53 +0000 (13:28 -0700)]
Merge branch 'ds/commit-and-checkout-with-sparse-index'

"git checkout" and "git commit" learn to work without unnecessarily
expanding sparse indexes.

* ds/commit-and-checkout-with-sparse-index:
  unpack-trees: resolve sparse-directory/file conflicts
  t1092: document bad 'git checkout' behavior
  checkout: stop expanding sparse indexes
  sparse-index: recompute cache-tree
  commit: integrate with sparse-index
  p2000: compress repo names
  p2000: add 'git checkout -' test and decrease depth

4 years agoMerge branch 'ab/update-submitting-patches'
Junio C Hamano [Wed, 4 Aug 2021 20:28:53 +0000 (13:28 -0700)]
Merge branch 'ab/update-submitting-patches'

Reorganize and update the SubmitingPatches document.

* ab/update-submitting-patches:
  SubmittingPatches: replace discussion of Travis with GitHub Actions
  SubmittingPatches: move discussion of Signed-off-by above "send"

4 years agoMerge branch 'ah/plugleaks'
Junio C Hamano [Wed, 4 Aug 2021 20:28:52 +0000 (13:28 -0700)]
Merge branch 'ah/plugleaks'

Leak plugging.

* ah/plugleaks:
  reset: clear_unpack_trees_porcelain to plug leak
  builtin/rebase: fix options.strategy memory lifecycle
  builtin/merge: free found_ref when done
  builtin/mv: free or UNLEAK multiple pointers at end of cmd_mv
  convert: release strbuf to avoid leak
  read-cache: call diff_setup_done to avoid leak
  ref-filter: also free head for ATOM_HEAD to avoid leak
  diffcore-rename: move old_dir/new_dir definition to plug leak
  builtin/for-each-repo: remove unnecessary argv copy to plug leak
  builtin/submodule--helper: release unused strbuf to avoid leak
  environment: move strbuf into block to plug leak
  fmt-merge-msg: free newly allocated temporary strings when done

4 years agoMerge branch 'ar/submodule-add'
Junio C Hamano [Wed, 4 Aug 2021 20:28:52 +0000 (13:28 -0700)]
Merge branch 'ar/submodule-add'

Rewrite of "git submodule" in C continues.

* ar/submodule-add:
  submodule: drop unused sm_name parameter from show_fetch_remotes()
  submodule--helper: introduce add-clone subcommand
  submodule--helper: refactor module_clone()
  submodule: prefix die messages with 'fatal'
  t7400: test failure to add submodule in tracked path

4 years agofetch-pack: speed up loading of refs via commit graph
Patrick Steinhardt [Wed, 4 Aug 2021 13:56:11 +0000 (15:56 +0200)]
fetch-pack: speed up loading of refs via commit graph

When doing reference negotiation, git-fetch-pack(1) is loading all refs
from disk in order to determine which commits it has in common with the
remote repository. This can be quite expensive in repositories with many
references though: in a real-world repository with around 2.2 million
refs, fetching a single commit by its ID takes around 44 seconds.

Dominating the loading time is decompression and parsing of the objects
which are referenced by commits. Given the fact that we only care about
commits (or tags which can be peeled to one) in this context, there is
thus an easy performance win by switching the parsing logic to make use
of the commit graph in case we have one available. Like this, we avoid
hitting the object database to parse these commits but instead only load
them from the commit-graph. This results in a significant performance
boost when executing git-fetch in said repository with 2.2 million refs:

    Benchmark #1: HEAD~: git fetch $remote $commit
      Time (mean ± σ):     44.168 s ±  0.341 s    [User: 42.985 s, System: 1.106 s]
      Range (min … max):   43.565 s … 44.577 s    10 runs

    Benchmark #2: HEAD: git fetch $remote $commit
      Time (mean ± σ):     19.498 s ±  0.724 s    [User: 18.751 s, System: 0.690 s]
      Range (min … max):   18.629 s … 20.454 s    10 runs

    Summary
      'HEAD: git fetch $remote $commit' ran
        2.27 ± 0.09 times faster than 'HEAD~: git fetch $remote $commit'

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agodiff: --pickaxe-all typofix
Bagas Sanjaya [Wed, 4 Aug 2021 12:24:20 +0000 (19:24 +0700)]
diff: --pickaxe-all typofix

When I was fixing fuzzies as I updating po/id.po for 2.33.0 l10n round,
I noticed a triple-dash typo (--pickaxe-all) at diff.c, which according
to git-diff(1) manpage, the correct option name should be --pickaxe-all.

Fix the typo.

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
Acked-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agomerge-ort: remove compile-time ability to turn off usage of memory pools
Elijah Newren [Sat, 31 Jul 2021 17:27:38 +0000 (17:27 +0000)]
merge-ort: remove compile-time ability to turn off usage of memory pools

Simplify code maintenance by removing the ability to toggle between
usage of memory pools and direct allocations.  This allows us to also
remove paths_to_free since it was solely about bookkeeping to make sure
we freed the necessary paths, and allows us to remove some auxiliary
functions.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agol10n: fr.po v2.33 rnd 1
Jean-Noël Avila [Tue, 3 Aug 2021 20:13:07 +0000 (22:13 +0200)]
l10n: fr.po v2.33 rnd 1

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agol10n: fr: fix typo
Jean-Noël Avila [Sat, 19 Jun 2021 11:40:34 +0000 (13:40 +0200)]
l10n: fr: fix typo

Reported-by: Andrei Rybak <rybak.a.v@gmail.com>
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
4 years agol10n: pt_PT: add Portuguese translations part 5
Daniel Santos [Fri, 23 Jul 2021 15:57:22 +0000 (16:57 +0100)]
l10n: pt_PT: add Portuguese translations part 5

* git-po-helper update

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: pt_PT: add Portuguese translations part 4
Daniel Santos [Fri, 18 Jun 2021 21:44:59 +0000 (22:44 +0100)]
l10n: pt_PT: add Portuguese translations part 4

* Fixed some typos
* Transformed 'não' (no) into affirmative
* Substituted 'excerto' to 'pedaço'

Signed-off-by: Daniel Santos <hello@brighterdan.com>
4 years agol10n: Update Catalan translation
Jordi Mas [Tue, 3 Aug 2021 10:50:24 +0000 (12:50 +0200)]
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
4 years agol10n: git.pot: v2.33.0 round 1 (38 new, 15 removed)
Jiang Xin [Tue, 3 Aug 2021 09:06:56 +0000 (17:06 +0800)]
l10n: git.pot: v2.33.0 round 1 (38 new, 15 removed)

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

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
4 years agoMerge branch 'master' of github.com:git/git
Jiang Xin [Tue, 3 Aug 2021 09:03:35 +0000 (17:03 +0800)]
Merge branch 'master' of github.com:git/git

* 'master' of github.com:git/git: (397 commits)
  Git 2.33-rc0
  The seventh batch
  ci/install-dependencies: handle "sparse" job package installs
  ci: run "apt-get update" before "apt-get install"
  cache-tree: prefetch in partial clone read-tree
  unpack-trees: refactor prefetching code
  pack-bitmap: check pack validity when opening bitmap
  bundle tests: use test_cmp instead of grep
  bundle tests: use ">file" not ": >file"
  The sixth batch
  doc: pull: fix rebase=false documentation
  pack-bitmap: clarify comment in filter_bitmap_exclude_type()
  doc: clarify description of 'submodule.recurse'
  doc/git-config: simplify "override" advice for FILES section
  doc/git-config: clarify GIT_CONFIG environment variable
  doc/git-config: explain --file instead of referring to GIT_CONFIG
  t0000: fix test if run with TEST_OUTPUT_DIRECTORY
  multi-pack-index: fix potential segfault without sub-command
  refs/debug: quote prefix
  t0000: clear GIT_SKIP_TESTS before running sub-tests
  ...

4 years agomingw: align symlinks-related rmdir() behavior with Linux
Thomas Bétous [Mon, 2 Aug 2021 21:07:30 +0000 (21:07 +0000)]
mingw: align symlinks-related rmdir() behavior with Linux

When performing a rebase, rmdir() is called on the folder .git/logs. On
Unix rmdir() exits without deleting anything in case .git/logs is a
symbolic link but the equivalent functions on Windows (_rmdir, _wrmdir
and RemoveDirectoryW) do not behave the same and remove the folder if it
is symlinked even if it is not empty.

This creates issues when folders in .git/ are symlinks which is
especially the case when git-repo[1] is used: It replaces `.git/logs/`
with a symlink.

One such issue is that the _target_ of that symlink is removed e.g.
during a `git rebase`, where `delete_reflog("REBASE_HEAD")` will not
only try to remove `.git/logs/REBASE_HEAD` but then recursively try to
remove the parent directories until an error occurs, a technique that
obviously relies on `rmdir()` refusing to remove a symlink.

This was reported in https://github.com/git-for-windows/git/issues/2967.

This commit updates mingw_rmdir() so that its behavior is the same as
Linux rmdir() in case of symbolic links.

To verify that Git does not regress on the reported issue, this patch
adds a regression test for the `git rebase` symptom, even if the same
`rmdir()` behavior is quite likely to cause potential problems in other
Git commands as well.

[1]: git-repo is a python tool built on top of Git which helps manage
many Git repositories. It stores all the .git/ folders in a central
place by taking advantage of symbolic links.
More information: https://gerrit.googlesource.com/git-repo/

Signed-off-by: Thomas Bétous <tomspycell@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7508: avoid non POSIX BRE
Carlo Marcelo Arenas Belón [Sun, 1 Aug 2021 21:53:00 +0000 (14:53 -0700)]
t7508: avoid non POSIX BRE

24c30e0b6 (wt-status: tolerate dangling marks, 2020-09-01) adds a test
that uses a BRE which breaks at least with OpenBSD's grep.

switch to an ERE as it is done for similar checks and while at it, remove
the now obsolete test_i18ngrep call.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobundle doc: replace "basis" with "prerequsite(s)"
Ævar Arnfjörð Bjarmason [Sat, 31 Jul 2021 08:23:07 +0000 (10:23 +0200)]
bundle doc: replace "basis" with "prerequsite(s)"

In the preceding commits we introduced new documentation that talks
about "[commit|object] prerequsite(s)", but also faithfully moved
around existing documentation that talks about the "basis".

Let's change both that moved-around documentation and other existing
documentation in the file to consistently use "[commit|object]"
prerequisite(s)" instead of talking about "basis". The mention of
"basis" isn't wrong, but readers will be helped by us using only one
term throughout the document for this concept.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobundle doc: rewrite the "DESCRIPTION" section
Ævar Arnfjörð Bjarmason [Sat, 31 Jul 2021 08:23:04 +0000 (10:23 +0200)]
bundle doc: rewrite the "DESCRIPTION" section

Rewrite the "DESCRIPTION" section for "git bundle" to start by talking
about what bundles are in general terms, rather than diving directly
into one example of what they might be used for.

This changes documentation that's been substantially the same ever
since the command was added in 2e0afafebd8 (Add git-bundle: move
objects and references by archive, 2007-02-22).

I've split up the DESCRIPTION into that section and a "BUNDLE FORMAT"
section, it briefly discusses the format, but then links to the
technical/bundle-format.txt documentation.

The "the user must specify a basis" part of this is discussed below in
"SPECIFYING REFERENCES", and will be further elaborated on in a
subsequent commit. So I'm removing that part and letting the mention
of "revision exclusions" suffice.

There was a discussion about whether to say anything at all about
"thin packs" here[1]. I think it's good to mention it for the curious
reader willing to read the technical docs, but let's explicitly say
that there's no "thick pack", and that the difference shouldn't
matter.

1. http://lore.kernel.org/git/xmqqk0mbt5rj.fsf@gitster.g

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobundle doc: elaborate on rev<->ref restriction
Ævar Arnfjörð Bjarmason [Sat, 31 Jul 2021 08:23:06 +0000 (10:23 +0200)]
bundle doc: elaborate on rev<->ref restriction

Elaborate on the restriction that you cannot provide a revision that
doesn't resolve to a reference in the "SPECIFYING REFERENCES" section
with examples.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agobundle doc: elaborate on object prerequisites
Ævar Arnfjörð Bjarmason [Sat, 31 Jul 2021 08:23:05 +0000 (10:23 +0200)]
bundle doc: elaborate on object prerequisites

Split out the discussion bout "object prerequisites" into its own
section, and add some more examples of the common cases.

See 2e0afafebd (Add git-bundle: move objects and references by
archive, 2007-02-22) for the introduction of the documentation being
changed here.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoGit 2.33-rc0
Junio C Hamano [Fri, 30 Jul 2021 23:14:07 +0000 (16:14 -0700)]
Git 2.33-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agoMerge branch 'jk/check-pack-valid-before-opening-bitmap'
Junio C Hamano [Mon, 2 Aug 2021 21:06:43 +0000 (14:06 -0700)]
Merge branch 'jk/check-pack-valid-before-opening-bitmap'

A race between repacking and using pack bitmaps has been corrected.

* jk/check-pack-valid-before-opening-bitmap:
  pack-bitmap: check pack validity when opening bitmap

4 years agoMerge branch 'jt/bulk-prefetch'
Junio C Hamano [Mon, 2 Aug 2021 21:06:42 +0000 (14:06 -0700)]
Merge branch 'jt/bulk-prefetch'

"git read-tree" had a codepath where blobs are fetched one-by-one
from the promisor remote, which has been corrected to fetch in bulk.

* jt/bulk-prefetch:
  cache-tree: prefetch in partial clone read-tree
  unpack-trees: refactor prefetching code

4 years agoMerge branch 'fc/pull-no-rebase-merges-theirs-into-ours'
Junio C Hamano [Mon, 2 Aug 2021 21:06:42 +0000 (14:06 -0700)]
Merge branch 'fc/pull-no-rebase-merges-theirs-into-ours'

Documentation fix for "git pull --rebase=no".

* fc/pull-no-rebase-merges-theirs-into-ours:
  doc: pull: fix rebase=false documentation

4 years agoMerge branch 'ab/bundle-tests'
Junio C Hamano [Mon, 2 Aug 2021 21:06:41 +0000 (14:06 -0700)]
Merge branch 'ab/bundle-tests'

"git bundle" gained more test coverage.

* ab/bundle-tests:
  bundle tests: use test_cmp instead of grep
  bundle tests: use ">file" not ": >file"

4 years agoMerge branch 'ps/perf-with-separate-output-directory'
Junio C Hamano [Mon, 2 Aug 2021 21:06:41 +0000 (14:06 -0700)]
Merge branch 'ps/perf-with-separate-output-directory'

Test update.

* ps/perf-with-separate-output-directory:
  perf: fix when running with TEST_OUTPUT_DIRECTORY

4 years agoMerge branch 'js/ci-check-whitespace-updates'
Junio C Hamano [Mon, 2 Aug 2021 21:06:40 +0000 (14:06 -0700)]
Merge branch 'js/ci-check-whitespace-updates'

CI update.

* js/ci-check-whitespace-updates:
  ci(check-whitespace): restrict to the intended commits
  ci(check-whitespace): stop requiring a read/write token

4 years agoMerge branch 'jk/config-env-doc'
Junio C Hamano [Mon, 2 Aug 2021 21:06:39 +0000 (14:06 -0700)]
Merge branch 'jk/config-env-doc'

Documentation around GIT_CONFIG has been updated.

* jk/config-env-doc:
  doc/git-config: simplify "override" advice for FILES section
  doc/git-config: clarify GIT_CONFIG environment variable
  doc/git-config: explain --file instead of referring to GIT_CONFIG

4 years agoMerge branch 'pb/submodule-recurse-doc'
Junio C Hamano [Mon, 2 Aug 2021 21:06:39 +0000 (14:06 -0700)]
Merge branch 'pb/submodule-recurse-doc'

Doc update.

* pb/submodule-recurse-doc:
  doc: clarify description of 'submodule.recurse'

4 years agoMerge branch 'tb/bitmap-type-filter-comment-fix'
Junio C Hamano [Mon, 2 Aug 2021 21:06:38 +0000 (14:06 -0700)]
Merge branch 'tb/bitmap-type-filter-comment-fix'

In-code comment update.

* tb/bitmap-type-filter-comment-fix:
  pack-bitmap: clarify comment in filter_bitmap_exclude_type()

4 years agot6001: avoid direct file system access
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:36 +0000 (16:53 +0000)]
t6001: avoid direct file system access

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot6500: use "ls -1" to snapshot ref database state
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:35 +0000 (16:53 +0000)]
t6500: use "ls -1" to snapshot ref database state

By doing ls -1 .git/{reftable,refs/heads}, we can capture changes to both
reftable and packed/loose ref storage.

This relies on the fact that git-pack-refs (which we're looking for here)
changes the number (loose/packed storage) and/or names (reftable) files used for
ref storage.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot7064: use update-ref -d to remove upstream branch
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:34 +0000 (16:53 +0000)]
t7064: use update-ref -d to remove upstream branch

The previous code tested this by writing $ZERO_OID explicitly in the packed-refs
file. This is a type of corruption that doesn't reflect realistic use-cases. In
addition, even the ref-store test-tool refuses to write invalid OIDs.
(update-ref interprets $ZERO_OID is deleting the ref).

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot1410: mark test as REFFILES
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:33 +0000 (16:53 +0000)]
t1410: mark test as REFFILES

This test takes a lock on the target of a symref, and then verifies that it is
possible to expire the symref's reflog. In reftable, one can only take a global
lock (which would prevent the symref reflog from being expired altogether.)

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot1405: mark test for 'git pack-refs' as REFFILES
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:32 +0000 (16:53 +0000)]
t1405: mark test for 'git pack-refs' as REFFILES

The tests verifies that "pack-refs" causes loose refs to be packed. As both
loose and packed refs are concepts specific to the files backend, mark the test
as REFFILES.

Check the outcome of the pack-refs operation. This was apparently forgotten in
the commit introducing this test: 16feb99d (Mar 26 2017, "t1405: some basic
tests on main ref store").

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 years agot1405: use 'git reflog exists' to check reflog existence
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:31 +0000 (16:53 +0000)]
t1405: use 'git reflog exists' to check reflog existence

This fixes a test failure for reftable.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>