]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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

5 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>
5 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

5 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>
5 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

5 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

5 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

5 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

5 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

5 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

5 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

5 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"

5 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

5 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

5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 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
  ...

5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 years agoGit 2.33-rc0 v2.33.0-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>
5 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

5 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

5 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

5 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"

5 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

5 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

5 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

5 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'

5 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()

5 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>
5 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>
5 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>
5 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>
5 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>
5 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>
5 years agot2402: use ref-store test helper to create broken symlink
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:30 +0000 (16:53 +0000)] 
t2402: use ref-store test helper to create broken symlink

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot3320: use git-symbolic-ref rather than filesystem access
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:29 +0000 (16:53 +0000)] 
t3320: use git-symbolic-ref rather than filesystem access

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot6120: use git-update-ref rather than filesystem access
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:28 +0000 (16:53 +0000)] 
t6120: use git-update-ref rather than filesystem access

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

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot6050: use git-update-ref rather than filesystem access
Han-Wen Nienhuys [Mon, 2 Aug 2021 16:53:26 +0000 (16:53 +0000)] 
t6050: use git-update-ref rather than filesystem access

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: rename CURLOPT_FILE to CURLOPT_WRITEDATA
Ævar Arnfjörð Bjarmason [Fri, 30 Jul 2021 17:59:46 +0000 (19:59 +0200)] 
http: rename CURLOPT_FILE to CURLOPT_WRITEDATA

The CURLOPT_FILE name is an alias for CURLOPT_WRITEDATA, the
CURLOPT_WRITEDATA name has been preferred since curl 7.9.7, released
in May 2002[1].

1. https://curl.se/libcurl/c/CURLOPT_WRITEDATA.html

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: drop support for curl < 7.19.3 and < 7.17.0 (again)
Ævar Arnfjörð Bjarmason [Fri, 30 Jul 2021 17:59:45 +0000 (19:59 +0200)] 
http: drop support for curl < 7.19.3 and < 7.17.0 (again)

Remove the conditional use of CURLAUTH_DIGEST_IE and
CURLOPT_USE_SSL. These two have been split from earlier simpler checks
against LIBCURL_VERSION_NUM for ease of review.

According to

  https://github.com/curl/curl/blob/master/docs/libcurl/symbols-in-versions

the CURLAUTH_DIGEST_IE flag became available in 7.19.3, and
CURLOPT_USE_SSL in 7.17.0.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agouse fspathhash() everywhere
René Scharfe [Fri, 30 Jul 2021 19:06:58 +0000 (21:06 +0200)] 
use fspathhash() everywhere

cf2dc1c238 (speed up alt_odb_usable() with many alternates, 2021-07-07)
introduced the function fspathhash() for calculating path hashes while
respecting the configuration option core.ignorecase.  Call it instead of
open-coding it; the resulting code is shorter and less repetitive.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: drop support for curl < 7.19.4
Jeff King [Fri, 30 Jul 2021 17:59:44 +0000 (19:59 +0200)] 
http: drop support for curl < 7.19.4

In the last commit we dropped support for curl < 7.16.0, let's
continue that and drop support for versions older than 7.19.3. This
allows us to simplify the code by getting rid of some "#ifdef"'s.

Git was broken with vanilla curl < 7.19.4 from v2.12.0 until
v2.15.0. Compiling with it was broken by using CURLPROTO_* outside any
"#ifdef" in aeae4db174 (http: create function to get curl allowed
protocols, 2016-12-14), and fixed in v2.15.0 in f18777ba6ef (http: fix
handling of missing CURLPROTO_*, 2017-08-11).

It's unclear how much anyone was impacted by that in practice, since
as noted in [1] RHEL versions using curl older than that still
compiled, because RedHat backported some features. Perhaps other
vendors did the same.

Still, it's one datapoint indicating that it wasn't in active use at
the time. That (the v2.12.0 release) was in Feb 24, 2017, with v2.15.0
on Oct 30, 2017, it's now mid-2021.

1. http://lore.kernel.org/git/c8a2716d-76ac-735c-57f9-175ca3acbcb0@jupiterrise.com;
   followed-up by f18777ba6ef (http: fix handling of missing CURLPROTO_*,
   2017-08-11)

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot0001: fix broken not-quite getcwd(3) test in bed67874e2
Ævar Arnfjörð Bjarmason [Fri, 30 Jul 2021 16:18:14 +0000 (18:18 +0200)] 
t0001: fix broken not-quite getcwd(3) test in bed67874e2

With a54e938e5b (strbuf: support long paths w/o read rights in
strbuf_getcwd() on FreeBSD, 2017-03-26) we had t0001 break on systems
like OpenBSD and AIX whose getcwd(3) has standard (but not like glibc
et al) behavior.

This was partially fixed in bed67874e2 (t0001: skip test with
restrictive permissions if getpwd(3) respects them, 2017-08-07).

The problem with that fix is that while its analysis of the problem is
correct, it doesn't actually call getcwd(3), instead it invokes "pwd
-P". There is no guarantee that "pwd -P" is going to call getcwd(3),
as opposed to e.g. being a shell built-in.

On AIX under both bash and ksh this test breaks because "pwd -P" will
happily display the current working directory, but getcwd(3) called by
the "git init" we're testing here will fail to get it.

I checked whether clobbering the $PWD environment variable would
affect it, and it didn't. Presumably these shells keep track of their
working directory internally.

There's possible follow-up work here in teaching strbuf_getcwd() to
get the working directory with whatever method "pwd" uses on these
platforms. See [1] for a discussion of that, but let's take the easy
way out here and just skip these tests by fixing the
GETCWD_IGNORES_PERMS prerequisite to match the limitations of
strbuf_getcwd().

1. https://lore.kernel.org/git/b650bef5-d739-d98d-e9f1-fa292b6ce982@web.de/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: drop support for curl < 7.16.0
Jeff King [Fri, 30 Jul 2021 09:31:54 +0000 (11:31 +0200)] 
http: drop support for curl < 7.16.0

In the last commit we dropped support for curl < 7.11.1, let's
continue that and drop support for versions older than 7.16.0. This
allows us to get rid of some now-obsolete #ifdefs.

Choosing 7.16.0 is a somewhat arbitrary cutoff:

  1. It came out in October of 2006, almost 15 years ago.
     Besides being a nice round number, around 10 years is
     a common end-of-life support period, even for conservative
     distributions.

  2. That version introduced the curl_multi interface, which
     gives us a lot of bang for the buck in removing #ifdefs

RHEL 5 came with curl 7.15.5[1] (released in August 2006). RHEL 5's
extended life cycle program ended on 2020-11-30[1]. RHEL 6 comes with
curl 7.19.7 (released in November 2009), and RHEL 7 comes with
7.29.0 (released in February 2013).

1. http://lore.kernel.org/git/873e1f31-2a96-5b72-2f20-a5816cad1b51@jupiterrise.com

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agohttp: drop support for curl < 7.11.1
Jeff King [Fri, 30 Jul 2021 09:31:53 +0000 (11:31 +0200)] 
http: drop support for curl < 7.11.1

Drop support for this ancient version of curl and simplify the code by
allowing us get rid of some "#ifdef"'s.

Git will not build with vanilla curl older than 7.11.1 due our use of
CURLOPT_POSTFIELDSIZE in 37ee680d9b
(http.postbuffer: allow full range of ssize_t values,
2017-04-11). This field was introduced in curl 7.11.1.

We could solve these compilation problems with more #ifdefs,
but it's not worth the trouble. Version 7.11.1 came out in
March of 2004, over 17 years ago. Let's declare that too old
and drop any existing ifdefs that go further back. One
obvious benefit is that we'll have fewer conditional bits
cluttering the code.

This patch drops all #ifdefs that reference older versions
(note that curl's preprocessor macros are in hex, so we're
looking for 070b01, not 071101).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoDocumentation: render special characters correctly
Andrei Rybak [Thu, 29 Jul 2021 11:02:52 +0000 (13:02 +0200)] 
Documentation: render special characters correctly

Three hyphens are rendered verbatim, so "--" has to be used to produce a
dash.  There is no double arrow ("<->" is rendered as "<→"), so a left
and right arrow "<-->" have to be combined for that.

So fix asciidoc output for special characters.  This is similar to fixes
in commit de82095a95 (doc hash-function-transition: fix asciidoc output,
2021-02-05).

Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: reuse path strings in pool_alloc_filespec
Elijah Newren [Fri, 30 Jul 2021 11:47:43 +0000 (11:47 +0000)] 
merge-ort: reuse path strings in pool_alloc_filespec

pool_alloc_filespec() was written so that the code when pool != NULL
mimicked the code from alloc_filespec(), which including allocating
enough extra space for the path and then copying it.  However, the path
passed to pool_alloc_filespec() is always going to already be in the
same memory pool, so we may as well reuse it instead of copying it.

For the testcases mentioned in commit 557ac0350d ("merge-ort: begin
performance work; instrument with trace2_region_* calls", 2020-10-28),
this change improves the performance as follows:

                            Before                  After
    no-renames:       198.5 ms ±  3.4 ms     198.3 ms ±  2.9 ms
    mega-renames:     679.1 ms ±  5.6 ms     661.8 ms ±  5.9 ms
    just-one-mega:    271.9 ms ±  2.8 ms     264.6 ms ±  2.5 ms

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: store filepairs and filespecs in our mem_pool
Elijah Newren [Fri, 30 Jul 2021 11:47:42 +0000 (11:47 +0000)] 
merge-ort: store filepairs and filespecs in our mem_pool

For the testcases mentioned in commit 557ac0350d ("merge-ort: begin
performance work; instrument with trace2_region_* calls", 2020-10-28),
this change improves the performance as follows:

                            Before                  After
    no-renames:       198.1 ms ±  2.6 ms     198.5 ms ±  3.4 ms
    mega-renames:     715.8 ms ±  4.0 ms     679.1 ms ±  5.6 ms
    just-one-mega:    276.8 ms ±  4.2 ms     271.9 ms ±  2.8 ms

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodiffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc
Elijah Newren [Fri, 30 Jul 2021 11:47:41 +0000 (11:47 +0000)] 
diffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc

We want to be able to allocate filespecs and filepairs using a mem_pool.
However, filespec data will still remain outside the pool (perhaps in
the future we could plumb the pool through the various diff APIs to
allocate the filespec data too, but for now we are limiting the scope).
Add some extra functions to allocate these appropriately based on the
non-NULL-ness of opt->priv->pool, as well as some extra functions to
handle correctly deallocating the relevant parts of them.  A future
commit will make use of these new functions.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: switch our strmaps over to using memory pools
Elijah Newren [Fri, 30 Jul 2021 11:47:40 +0000 (11:47 +0000)] 
merge-ort: switch our strmaps over to using memory pools

For all the strmaps (including strintmaps and strsets) whose memory is
unconditionally freed as part of clear_or_reinit_internal_opts(), switch
them over to using our new memory pool.

For the testcases mentioned in commit 557ac0350d ("merge-ort: begin
performance work; instrument with trace2_region_* calls", 2020-10-28),
this change improves the performance as follows:

                            Before                  After
    no-renames:      202.5  ms ±  3.2  ms    198.1 ms ±  2.6 ms
    mega-renames:      1.072 s ±  0.012 s    715.8 ms ±  4.0 ms
    just-one-mega:   357.3  ms ±  3.9  ms    276.8 ms ±  4.2 ms

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: set up a memory pool
Elijah Newren [Fri, 30 Jul 2021 11:47:39 +0000 (11:47 +0000)] 
merge-ort: set up a memory pool

merge-ort has a lot of data structures, and they all tend to be freed
together in clear_or_reinit_internal_opts().  Set up a memory pool to
allow us to make these allocations and deallocations faster.  Future
commits will adjust various callers to make use of this memory pool.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: add pool_alloc, pool_calloc, and pool_strndup wrappers
Elijah Newren [Fri, 30 Jul 2021 11:47:38 +0000 (11:47 +0000)] 
merge-ort: add pool_alloc, pool_calloc, and pool_strndup wrappers

Make the code more flexible so that it can handle both being run with or
without a memory pool by adding utility functions which will either call
    xmalloc, xcalloc, xstrndup
or
    mem_pool_alloc, mem_pool_calloc, mem_pool_strndup
depending on whether we have a non-NULL memory pool.  A subsequent
commit will make use of these.

(We will actually be dropping these functions soon and just assuming we
always have a memory pool, but the flexibility was very useful during
development of merge-ort so I want to be able to restore it if needed.)

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agodiffcore-rename: use a mem_pool for exact rename detection's hashmap
Elijah Newren [Fri, 30 Jul 2021 11:47:37 +0000 (11:47 +0000)] 
diffcore-rename: use a mem_pool for exact rename detection's hashmap

Exact rename detection, via insert_file_table(), uses a hashmap to store
files by oid.  Use a mem_pool for the hashmap entries so these can all be
allocated and deallocated together.

For the testcases mentioned in commit 557ac0350d ("merge-ort: begin
performance work; instrument with trace2_region_* calls", 2020-10-28),
this change improves the performance as follows:

                            Before                  After
    no-renames:      204.2  ms ±  3.0  ms   202.5  ms ±  3.2  ms
    mega-renames:      1.076 s ±  0.015 s     1.072 s ±  0.012 s
    just-one-mega:   364.1  ms ±  7.0  ms   357.3  ms ±  3.9  ms

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agomerge-ort: rename str{map,intmap,set}_func()
Elijah Newren [Fri, 30 Jul 2021 11:47:36 +0000 (11:47 +0000)] 
merge-ort: rename str{map,intmap,set}_func()

In order to make it clearer that these three variables holding a
function refer to functions that will clear the strmap/strintmap/strset,
rename them to str{map,intmap,set}_clear_func().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoadd: remove ensure_full_index() with --renormalize
Derrick Stolee [Thu, 29 Jul 2021 14:52:07 +0000 (14:52 +0000)] 
add: remove ensure_full_index() with --renormalize

The --renormalize option updates the EOL conversions for the tracked
files. However, the loop already ignores files marked with the
SKIP_WORKTREE bit, so it will continue to do so with a sparse index
because the sparse directory entries also have this bit set.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoadd: ignore outside the sparse-checkout in refresh()
Derrick Stolee [Thu, 29 Jul 2021 14:52:06 +0000 (14:52 +0000)] 
add: ignore outside the sparse-checkout in refresh()

Since b243012 (refresh_index(): add flag to ignore SKIP_WORKTREE
entries, 2021-04-08), 'git add --refresh <path>' will output a warning
message when the path is outside the sparse-checkout definition. The
implementation of this warning happened in parallel with the
sparse-index work to add ensure_full_index() calls throughout the
codebase.

Update this loop to have the proper logic that checks to see if the
pathspec is outside the sparse-checkout definition. This avoids the need
to expand the sparse directory entry and determine if the path is
tracked, untracked, or ignored. We simply avoid updating the stat()
information because there isn't even an entry that matches the path!

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agopathspec: stop calling ensure_full_index
Derrick Stolee [Thu, 29 Jul 2021 14:52:05 +0000 (14:52 +0000)] 
pathspec: stop calling ensure_full_index

The add_pathspec_matches_against_index() focuses on matching a pathspec
to file entries in the index. This already works correctly for its only
use: checking if untracked files exist in the index.

The compatibility checks in t1092 already test that 'git add <dir>'
works for a directory outside of the sparse cone. That provides coverage
for removing this guard.

This finalizes our ability to run 'git add .' without expanding a sparse
index to a full one. This is evidenced by an update to t1092 and by
these performance numbers for p2000-sparse-operations.sh:

Test                                    HEAD~1            HEAD
--------------------------------------------------------------------------------
2000.10: git add . (full-index-v3)      0.37(0.28+0.07)   0.36(0.27+0.06) -2.7%
2000.11: git add . (full-index-v4)      0.33(0.26+0.06)   0.32(0.28+0.05) -3.0%
2000.12: git add . (sparse-index-v3)    0.57(0.53+0.07)   0.06(0.06+0.07) -89.5%
2000.13: git add . (sparse-index-v4)    0.57(0.53+0.07)   0.05(0.03+0.09) -91.2%

While the ~90% improvement is shown by the test results, it is worth
noting that expanding the sparse index was adding overhead in previous
commits. Comparing to the full index case, we see the performance go
from 0.33s to 0.05s, an 85% improvement.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoadd: allow operating on a sparse-only index
Derrick Stolee [Thu, 29 Jul 2021 14:52:04 +0000 (14:52 +0000)] 
add: allow operating on a sparse-only index

Disable command_requires_full_index for 'git add'. This does not require
any additional removals of ensure_full_index(). The main reason is that
'git add' discovers changes based on the pathspec and the worktree
itself. These are then inserted into the index directly, and calls to
index_name_pos() or index_file_exists() already call expand_to_path() at
the appropriate time to support a sparse-index.

Add a test to check that 'git add -A' and 'git add <file>' does not
expand the index at all, as long as <file> is not within a sparse
directory. This does not help the global 'git add .' case.

We can measure the improvement using p2000-sparse-operations.sh with
these results:

Test                                  HEAD~1           HEAD
------------------------------------------------------------------------------
2000.6: git add -A (full-index-v3)    0.35(0.30+0.05)  0.37(0.29+0.06) +5.7%
2000.7: git add -A (full-index-v4)    0.31(0.26+0.06)  0.33(0.27+0.06) +6.5%
2000.8: git add -A (sparse-index-v3)  0.57(0.53+0.07)  0.05(0.04+0.08) -91.2%
2000.9: git add -A (sparse-index-v4)  0.58(0.55+0.06)  0.05(0.05+0.06) -91.4%

While the 91% improvement seems impressive, it's important to recognize
that previously we had significant overhead for expanding the
sparse-index. Comparing to the full index case, 'git add -A' goes from
0.37s to 0.05s, which is "only" an 86% improvement.

This modification to 'git add' creates some behavior change depending on
the use of a sparse index. We modify a test in t1092 to demonstrate
these changes which will be remedied in future changes.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agot1092: test merge conflicts outside cone
Derrick Stolee [Thu, 29 Jul 2021 14:52:03 +0000 (14:52 +0000)] 
t1092: test merge conflicts outside cone

Conflicts can occur outside of the sparse-checkout definition, and in
that case users might try to resolve the conflicts in several ways.
Document a few of these ways in a test. Make it clear that this behavior
is not necessarily the optimal flow, since users can become confused
when Git deletes these files from the worktree in later commands.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoThe seventh batch
Junio C Hamano [Wed, 28 Jul 2021 19:01:27 +0000 (12:01 -0700)] 
The seventh batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 years agoMerge branch 'ps/t0000-output-directory-fix'
Junio C Hamano [Wed, 28 Jul 2021 20:18:04 +0000 (13:18 -0700)] 
Merge branch 'ps/t0000-output-directory-fix'

"TEST_OUTPUT_DIRECTORY=there make test" failed to work, which has
been corrected.

* ps/t0000-output-directory-fix:
  t0000: fix test if run with TEST_OUTPUT_DIRECTORY

5 years agoMerge branch 'tb/reverse-midx'
Junio C Hamano [Wed, 28 Jul 2021 20:18:04 +0000 (13:18 -0700)] 
Merge branch 'tb/reverse-midx'

The code that gives an error message in "git multi-pack-index" when
no subcommand is given tried to print a NULL pointer as a strong,
which has been corrected.

* tb/reverse-midx:
  multi-pack-index: fix potential segfault without sub-command

5 years agoMerge branch 'hn/refs-debug-empty-prefix'
Junio C Hamano [Wed, 28 Jul 2021 20:18:03 +0000 (13:18 -0700)] 
Merge branch 'hn/refs-debug-empty-prefix'

Debugging aid.

* hn/refs-debug-empty-prefix:
  refs/debug: quote prefix

5 years agoMerge branch 'pb/dont-complete-aliased-options'
Junio C Hamano [Wed, 28 Jul 2021 20:18:03 +0000 (13:18 -0700)] 
Merge branch 'pb/dont-complete-aliased-options'

The completion support used to offer alternate spelling of options
that exist only for compatibility, which has been corrected.

* pb/dont-complete-aliased-options:
  parse-options: don't complete option aliases by default

5 years agoMerge branch 'en/rename-limits-doc'
Junio C Hamano [Wed, 28 Jul 2021 20:18:02 +0000 (13:18 -0700)] 
Merge branch 'en/rename-limits-doc'

Documentation on "git diff -l<n>" and diff.renameLimit have been
updated, and the defaults for these limits have been raised.

* en/rename-limits-doc:
  rename: bump limit defaults yet again
  diffcore-rename: treat a rename_limit of 0 as unlimited
  doc: clarify documentation for rename/copy limits
  diff: correct warning message when renameLimit exceeded

5 years agoMerge branch 'ds/gender-neutral-doc-guidelines'
Junio C Hamano [Wed, 28 Jul 2021 20:18:02 +0000 (13:18 -0700)] 
Merge branch 'ds/gender-neutral-doc-guidelines'

A guideline for gender neutral documentation has been added.

* ds/gender-neutral-doc-guidelines:
  CodingGuidelines: recommend gender-neutral description

5 years agoMerge branch 'ds/status-with-sparse-index'
Junio C Hamano [Wed, 28 Jul 2021 20:18:01 +0000 (13:18 -0700)] 
Merge branch 'ds/status-with-sparse-index'

"git status" codepath learned to work with sparsely populated index
without hydrating it fully.

* ds/status-with-sparse-index:
  t1092: document bad sparse-checkout behavior
  fsmonitor: integrate with sparse index
  wt-status: expand added sparse directory entries
  status: use sparse-index throughout
  status: skip sparse-checkout percentage with sparse-index
  diff-lib: handle index diffs with sparse dirs
  dir.c: accept a directory as part of cone-mode patterns
  unpack-trees: unpack sparse directory entries
  unpack-trees: rename unpack_nondirectories()
  unpack-trees: compare sparse directories correctly
  unpack-trees: preserve cache_bottom
  t1092: add tests for status/add and sparse files
  t1092: expand repository data shape
  t1092: replace incorrect 'echo' with 'cat'
  sparse-index: include EXTENDED flag when expanding
  sparse-index: skip indexes with unmerged entries

5 years agoMerge branch 'js/ci-make-sparse'
Junio C Hamano [Wed, 28 Jul 2021 20:18:01 +0000 (13:18 -0700)] 
Merge branch 'js/ci-make-sparse'

The CI gained a new job to run "make sparse" check.

* js/ci-make-sparse:
  ci/install-dependencies: handle "sparse" job package installs
  ci: run "apt-get update" before "apt-get install"
  ci: run `make sparse` as part of the GitHub workflow

5 years agoMerge branch 'ab/pkt-line-tests'
Junio C Hamano [Wed, 28 Jul 2021 20:18:00 +0000 (13:18 -0700)] 
Merge branch 'ab/pkt-line-tests'

Tests that cover protocol bits have been updated and helpers
used there have been consolidated.

* ab/pkt-line-tests:
  test-lib-functions: use test-tool for [de]packetize()

5 years agoMerge branch 'jk/t0000-subtests-fix'
Junio C Hamano [Wed, 28 Jul 2021 20:18:00 +0000 (13:18 -0700)] 
Merge branch 'jk/t0000-subtests-fix'

Test fix.

* jk/t0000-subtests-fix:
  t0000: clear GIT_SKIP_TESTS before running sub-tests

5 years agoMerge branch 'dl/diff-merge-base'
Junio C Hamano [Wed, 28 Jul 2021 20:17:59 +0000 (13:17 -0700)] 
Merge branch 'dl/diff-merge-base'

"git diff --merge-base" documentation has been updated.

* dl/diff-merge-base:
  git-diff: fix missing --merge-base docs

5 years agoMerge branch 'ab/attribute-format'
Junio C Hamano [Wed, 28 Jul 2021 20:17:59 +0000 (13:17 -0700)] 
Merge branch 'ab/attribute-format'

Many "printf"-like helper functions we have have been annotated
with __attribute__() to catch placeholder/parameter mismatches.

* ab/attribute-format:
  advice.h: add missing __attribute__((format)) & fix usage
  *.h: add a few missing __attribute__((format))
  *.c static functions: add missing __attribute__((format))
  sequencer.c: move static function to avoid forward decl
  *.c static functions: don't forward-declare __attribute__

5 years agoMerge branch 'jk/log-decorate-optim'
Junio C Hamano [Wed, 28 Jul 2021 20:17:58 +0000 (13:17 -0700)] 
Merge branch 'jk/log-decorate-optim'

Optimize "git log" for cases where we wasted cycles to load ref
decoration data that may not be needed.

* jk/log-decorate-optim:
  load_ref_decorations(): fix decoration with tags
  add_ref_decoration(): rename s/type/deco_type/
  load_ref_decorations(): avoid parsing non-tag objects
  object.h: add lookup_object_by_type() function
  object.h: expand docstring for lookup_unknown_object()
  log: avoid loading decorations for userformats that don't need it
  pretty.h: update and expand docstring for userformat_find_requirements()

5 years agoMerge branch 'sm/worktree-add-lock'
Junio C Hamano [Wed, 28 Jul 2021 20:17:58 +0000 (13:17 -0700)] 
Merge branch 'sm/worktree-add-lock'

"git worktree add --lock" learned to record why the worktree is
locked with a custom message.

* sm/worktree-add-lock:
  worktree: teach `add` to accept --reason <string> with --lock
  worktree: mark lock strings with `_()` for translation
  t2400: clean up '"add" worktree with lock' test

5 years agoMerge branch 'ew/many-alternate-optim'
Junio C Hamano [Wed, 28 Jul 2021 20:17:57 +0000 (13:17 -0700)] 
Merge branch 'ew/many-alternate-optim'

Optimization for repositories with many alternate object store.

* ew/many-alternate-optim:
  oidtree: a crit-bit tree for odb_loose_cache
  oidcpy_with_padding: constify `src' arg
  make object_directory.loose_objects_subdir_seen a bitmap
  avoid strlen via strbuf_addstr in link_alt_odb_entry
  speed up alt_odb_usable() with many alternates

5 years agoMerge branch 'hj/commit-allow-empty-message'
Junio C Hamano [Wed, 28 Jul 2021 20:17:57 +0000 (13:17 -0700)] 
Merge branch 'hj/commit-allow-empty-message'

"git commit --allow-empty-message" won't abort the operation upon
an empty message, but the hint shown in the editor said otherwise.

* hj/commit-allow-empty-message:
  commit: remove irrelavent prompt on `--allow-empty-message`
  commit: reorganise commit hint strings