]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
3 years agotests: disable GIT_TEST_SPLIT_INDEX for sparse index tests
SZEDER Gábor [Thu, 26 Aug 2021 21:00:03 +0000 (23:00 +0200)] 
tests: disable GIT_TEST_SPLIT_INDEX for sparse index tests

The sparse index and split index features are said to be currently
incompatible [1], and consequently GIT_TEST_SPLIT_INDEX=1 might
interfere with the test cases exercising the sparse index feature.
Therefore GIT_TEST_SPLIT_INDEX is already explicitly disabled for the
whole of 't1092-sparse-checkout-compatibility.sh'.  There are,
however, two other test cases exercising sparse index, namely
'sparse-index enabled and disabled' in
't1091-sparse-checkout-builtin.sh' and 'status succeeds with sparse
index' in 't7519-status-fsmonitor.sh', and these two could fail with
GIT_TEST_SPLIT_INDEX=1 as well [2].

Unset GIT_TEST_SPLIT_INDEX and disable the split index in these two
test cases to avoid such interference.

Note that this is the minimal change to merely avoid failures when
these test cases are run with GIT_TEST_SPLIT_INDEX=1.  Interestingly,
though, without these changes the 'git sparse-checkout init --cone
--sparse-index' commands still succeed even with split index, and set
all the necessary configuration variables and create the initial
'$GIT_DIR/info/sparse-checkout' file, but the test failures are caused
by later sanity checks finding that the index is not in fact a sparse
index.  This indicates that 'git sparse-checkout init --sparse-index'
lacks some error checking and its tests lack coverage related to split
index, but fixing those issues is beyond the scope of this patch
series.

[1] https://public-inbox.org/git/48e9c3d6-407a-1843-2d91-22112410e3f8@gmail.com/

[2] Neither of these test cases fail at the moment, because
    GIT_TEST_SPLIT_INDEX=1 is broken and never splits the index, and
    it broke long before the sparse index feature was added.
    This patch series is about to fix GIT_TEST_SPLIT_INDEX, and then
    both test cases mentioned above would fail.

(The diff is best viewed with '--ignore-all-space')

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoread-cache: look for shared index files next to the index, too
SZEDER Gábor [Thu, 26 Aug 2021 21:00:02 +0000 (23:00 +0200)] 
read-cache: look for shared index files next to the index, too

When reading a split index git always looks for its referenced shared
base index in the gitdir of the current repository, even when reading
an alternate index specified via GIT_INDEX_FILE, and even when that
alternate index file is the "main" '.git/index' file of an other
repository.  However, if that split index and its referenced shared
index files were written by a git command running entirely in that
other repository, then, naturally, the shared index file is written to
that other repository's gitdir.  Consequently, a git command
attempting to read that shared index file while running in a different
repository won't be able find it and will error out.

I'm not sure in what use case it is necessary to read the index of one
repository by a git command running in a different repository, but it
is certainly possible to do so, and in fact the test 'bare repository:
check that --cached honors index' in 't0003-attributes.sh' does
exactly that.  If GIT_TEST_SPLIT_INDEX=1 were to split the index in
just the right moment [1], then this test would indeed fail, because
the referenced shared index file could not be found.

Let's look for the referenced shared index file not only in the gitdir
of the current directory, but, if the shared index is not there, right
next to the split index as well.

[1] We haven't seen this issue trigger a failure in t0003 yet,
    because:

      - While GIT_TEST_SPLIT_INDEX=1 is supposed to trigger index
        splitting randomly, the first index write has always been
        deterministic and it has never split the index.

      - That alternate index file in the other repository is written
        only once in the entire test script, so it's never split.

    However, the next patch will fix GIT_TEST_SPLIT_INDEX, and while
    doing so it will slightly change its behavior to always split the
    index already on the first index write, and t0003 would always
    fail without this patch.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agot1600-index: disable GIT_TEST_SPLIT_INDEX
SZEDER Gábor [Thu, 26 Aug 2021 21:00:01 +0000 (23:00 +0200)] 
t1600-index: disable GIT_TEST_SPLIT_INDEX

Tests in 't1600-index.sh' check that various bogus index version
values are recognized and an appropriate warning message is issued.
GIT_TEST_SPLIT_INDEX=1 is supposed to trigger index splitting
randomly, and thus might interfere [1] with these tests: splitting the
index means that two index files are written (the shared base index
and the split '.git/index'), and the same warning message is then
issued twice, failing these tests.

Unset GIT_TEST_SPLIT_INDEX in this test script to avoid such
interference.

[1] There is no such interference at the moment, because, alas,
    GIT_TEST_SPLIT_INDEX=1 is broken and never split the index.  There
    was no such interference in the past (before it broke) either,
    because the first index write with GIT_TEST_SPLIT_INDEX=1 never
    split the index, only the second write did.  A subsequent commit
    fixing GIT_TEST_SPLIT_INDEX will have all the details on this.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agot1600-index: don't run git commands upstream of a pipe
SZEDER Gábor [Thu, 26 Aug 2021 21:00:00 +0000 (23:00 +0200)] 
t1600-index: don't run git commands upstream of a pipe

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agot1600-index: remove unnecessary redirection
SZEDER Gábor [Thu, 26 Aug 2021 20:59:59 +0000 (22:59 +0200)] 
t1600-index: remove unnecessary redirection

In a helper function in the 't1600-index.sh' test script the stderr
of a 'git add' command is redirected to its stdout, but its stdout is
not redirected anywhere.  So apparently this redirection is
unnecessary, remove it.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'ds/sparse-index-ignored-files' into sg/test-split-index-fix
Junio C Hamano [Wed, 8 Sep 2021 06:23:22 +0000 (23:23 -0700)] 
Merge branch 'ds/sparse-index-ignored-files' into sg/test-split-index-fix

* ds/sparse-index-ignored-files:
  sparse-checkout: clear tracked sparse dirs
  sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag
  attr: be careful about sparse directories
  sparse-checkout: create helper methods
  sparse-index: use WRITE_TREE_MISSING_OK
  sparse-index: silently return when cache tree fails
  unpack-trees: fix nested sparse-dir search
  sparse-index: silently return when not using cone-mode patterns
  t7519: rewrite sparse index test

3 years agosparse-checkout: clear tracked sparse dirs
Derrick Stolee [Wed, 8 Sep 2021 01:42:33 +0000 (01:42 +0000)] 
sparse-checkout: clear tracked sparse dirs

When changing the scope of a sparse-checkout using cone mode, we might
have some tracked directories go out of scope. The current logic removes
the tracked files from within those directories, but leaves the ignored
files within those directories. This is a bit unexpected to users who
have given input to Git saying they don't need those directories
anymore.

This is something that is new to the cone mode pattern type: the user
has explicitly said "I want these directories and _not_ those
directories." The typical sparse-checkout patterns more generally apply
to "I want files with with these patterns" so it is natural to leave
ignored files as they are. This focus on directories in cone mode
provides us an opportunity to change the behavior.

Leaving these ignored files in the sparse directories makes it
impossible to gain performance benefits in the sparse index. When we
track into these directories, we need to know if the files are ignored
or not, which might depend on the _tracked_ .gitignore file(s) within
the sparse directory. This depends on the indexed version of the file,
so the sparse directory must be expanded.

We must take special care to look for untracked, non-ignored files in
these directories before deleting them. We do not want to delete any
meaningful work that the users were doing in those directories and
perhaps forgot to add and commit before switching sparse-checkout
definitions. Since those untracked files might be code files that
generated ignored build output, also do not delete any ignored files
from these directories in that case. The users can recover their state
by resetting their sparse-checkout definition to include that directory
and continue. Alternatively, they can see the warning that is presented
and delete the directory themselves to regain the performance they
expect.

By deleting the sparse directories when changing scope (or running 'git
sparse-checkout reapply') we regain these performance benefits as if the
repository was in a clean state.

Since these ignored files are frequently build output or helper files
from IDEs, the users should not need the files now that the tracked
files are removed. If the tracked files reappear, then they will have
newer timestamps than the build artifacts, so the artifacts will need to
be regenerated anyway.

Use the sparse-index as a data structure in order to find the sparse
directories that can be safely deleted. Re-expand the index to a full
one if it was full before.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agosparse-index: add SPARSE_INDEX_MEMORY_ONLY flag
Derrick Stolee [Wed, 8 Sep 2021 01:42:32 +0000 (01:42 +0000)] 
sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag

The convert_to_sparse() method checks for the GIT_TEST_SPARSE_INDEX
environment variable or the "index.sparse" config setting before
converting the index to a sparse one. This is for ease of use since all
current consumers are preparing to compress the index before writing it
to disk. If these settings are not enabled, then convert_to_sparse()
silently returns without doing anything.

We will add a consumer in the next change that wants to use the sparse
index as an in-memory data structure, regardless of whether the on-disk
format should be sparse.

To that end, create the SPARSE_INDEX_MEMORY_ONLY flag that will skip
these config checks when enabled. All current consumers are modified to
pass '0' in the new 'flags' parameter.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoattr: be careful about sparse directories
Derrick Stolee [Wed, 8 Sep 2021 01:42:31 +0000 (01:42 +0000)] 
attr: be careful about sparse directories

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agosparse-checkout: create helper methods
Derrick Stolee [Wed, 8 Sep 2021 01:42:30 +0000 (01:42 +0000)] 
sparse-checkout: create helper methods

As we integrate the sparse index into more builtins, we occasionally
need to check the sparse-checkout patterns to see if a path is within
the sparse-checkout cone. Create some helper methods that help
initialize the patterns and check for pattern matching to make this
easier.

The existing callers of commands like get_sparse_checkout_patterns() use
a custom 'struct pattern_list' that is not necessarily the one in the
'struct index_state', so there are not many previous uses that could
adopt these helpers. There are just two in builtin/add.c and
sparse-index.c that can use path_in_sparse_checkout().

We add a path_in_cone_mode_sparse_checkout() as well that will only
return false if the path is outside of the sparse-checkout definition
_and_ the sparse-checkout patterns are in cone mode.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agosparse-index: use WRITE_TREE_MISSING_OK
Derrick Stolee [Wed, 8 Sep 2021 01:42:29 +0000 (01:42 +0000)] 
sparse-index: use WRITE_TREE_MISSING_OK

When updating the cache tree in convert_to_sparse(), the
WRITE_TREE_MISSING_OK flag indicates that trees might be computed that
do not already exist within the object database. This happens in cases
such as 'git add' creating new trees that it wants to store in
anticipation of a following 'git commit'. If this flag is not specified,
then it might trigger a promisor fetch or a failure due to the object
not existing locally.

Use WRITE_TREE_MISSING_OK during convert_to_sparse() to avoid these
possible reasons for the cache_tree_update() to fail.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agosparse-index: silently return when cache tree fails
Derrick Stolee [Wed, 8 Sep 2021 01:42:28 +0000 (01:42 +0000)] 
sparse-index: silently return when cache tree fails

If cache_tree_update() returns a non-zero value, then it could not
create the cache tree. This is likely due to a path having a merge
conflict. Since we are already returning early, let's return silently to
avoid making it seem like we failed to write the index at all.

If we remove our dependence on the cache tree within
convert_to_sparse(), then we could still recover from this scenario and
have a sparse index.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agounpack-trees: fix nested sparse-dir search
Derrick Stolee [Wed, 8 Sep 2021 01:42:27 +0000 (01:42 +0000)] 
unpack-trees: fix nested sparse-dir search

The iterated search in find_cache_entry() was recently modified to
include a loop that searches backwards for a sparse directory entry that
matches the given traverse_info and name_entry. However, the string
comparison failed to actually concatenate those two strings, so this
failed to find a sparse directory when it was not a top-level directory.

This caused some errors in rare cases where a 'git checkout' spanned a
diff that modified files within the sparse directory entry, but we could
not correctly find the entry.

Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Helped-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agosparse-index: silently return when not using cone-mode patterns
Derrick Stolee [Wed, 8 Sep 2021 01:42:26 +0000 (01:42 +0000)] 
sparse-index: silently return when not using cone-mode patterns

While the sparse-index is only enabled when core.sparseCheckoutCone is
also enabled, it is possible for the user to modify the sparse-checkout
file manually in a way that does not match cone-mode patterns. In this
case, we should refuse to convert an index into a sparse index, since
the sparse_checkout_patterns will not be initialized with recursive and
parent path hashsets.

Also silently return if there are no cache entries, which is a simple
case: there are no paths to make sparse!

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agot7519: rewrite sparse index test
Derrick Stolee [Wed, 8 Sep 2021 01:42:25 +0000 (01:42 +0000)] 
t7519: rewrite sparse index test

The sparse index is tested with the FS Monitor hook and extension since
f8fe49e (fsmonitor: integrate with sparse index, 2021-07-14). This test
was very fragile because it shared an index across sparse and non-sparse
behavior. Since that expansion and contraction could cause the index to
lose its FS Monitor bitmap and token, behavior is fragile to changes in
'git sparse-checkout set'.

Rewrite the test to use two clones of the original repo: full and
sparse. This allows us to also keep the test files (actual, expect,
trace2.txt) out of the repos we are testing with 'git status'.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoThe second batch
Junio C Hamano [Mon, 30 Aug 2021 23:06:22 +0000 (16:06 -0700)] 
The second batch

The most significant of this batch is of course "merge -sort".
Thanks, Elijah and everybody who helped the topic.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'cb/ci-freebsd-update'
Junio C Hamano [Mon, 30 Aug 2021 23:06:06 +0000 (16:06 -0700)] 
Merge branch 'cb/ci-freebsd-update'

Update FreeBSD CI job

* cb/ci-freebsd-update:
  ci: update freebsd 12 cirrus job

3 years agoMerge branch 'tl/traverse-non-commits-rename'
Junio C Hamano [Mon, 30 Aug 2021 23:06:06 +0000 (16:06 -0700)] 
Merge branch 'tl/traverse-non-commits-rename'

Meh.

* tl/traverse-non-commits-rename:
  list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits"

3 years agoMerge branch 'bc/t5607-avoid-broken-test-fail-prereqs'
Junio C Hamano [Mon, 30 Aug 2021 23:06:05 +0000 (16:06 -0700)] 
Merge branch 'bc/t5607-avoid-broken-test-fail-prereqs'

The current implementation of GIT_TEST_FAIL_PREREQS is broken in
that checking for the lack of a prerequisite would not work.  Avoid
the use of "if ! test_have_prereq X" in a test script.

* bc/t5607-avoid-broken-test-fail-prereqs:
  t5607: avoid using prerequisites to select algorithm

3 years agoMerge branch 'th/userdiff-more-java'
Junio C Hamano [Mon, 30 Aug 2021 23:06:05 +0000 (16:06 -0700)] 
Merge branch 'th/userdiff-more-java'

The userdiff pattern for "java" language has been updated.

* th/userdiff-more-java:
  userdiff: improve java hunk header regex

3 years agoMerge branch 'jk/range-diff-fixes'
Junio C Hamano [Mon, 30 Aug 2021 23:06:05 +0000 (16:06 -0700)] 
Merge branch 'jk/range-diff-fixes'

"git range-diff" code clean-up.

* jk/range-diff-fixes:
  range-diff: use ssize_t for parsed "len" in read_patches()
  range-diff: handle unterminated lines in read_patches()
  range-diff: drop useless "offset" variable from read_patches()

3 years agoMerge branch 'jk/apply-binary-hunk-parsing-fix'
Junio C Hamano [Mon, 30 Aug 2021 23:06:04 +0000 (16:06 -0700)] 
Merge branch 'jk/apply-binary-hunk-parsing-fix'

"git apply" miscounted the bytes and failed to read to the end of
binary hunks.

* jk/apply-binary-hunk-parsing-fix:
  apply: keep buffer/size pair in sync when parsing binary hunks

3 years agoMerge branch 'jc/userdiff-pattern-hint'
Junio C Hamano [Mon, 30 Aug 2021 23:06:03 +0000 (16:06 -0700)] 
Merge branch 'jc/userdiff-pattern-hint'

Remind developers that the userdiff patterns should be kept simple
and permissive, assuming that the contents they apply are always
syntactically correct.

* jc/userdiff-pattern-hint:
  userdiff: comment on the builtin patterns

3 years agoMerge branch 'cb/builtin-merge-format-string-fix'
Junio C Hamano [Mon, 30 Aug 2021 23:06:02 +0000 (16:06 -0700)] 
Merge branch 'cb/builtin-merge-format-string-fix'

Code clean-up.

* cb/builtin-merge-format-string-fix:
  builtin/merge: avoid -Wformat-extra-args from ancient Xcode

3 years agoMerge branch 'js/log-protocol-version'
Junio C Hamano [Mon, 30 Aug 2021 23:06:02 +0000 (16:06 -0700)] 
Merge branch 'js/log-protocol-version'

Debugging aid.

* js/log-protocol-version:
  connect, protocol: log negotiated protocol version

3 years agoMerge branch 'en/ort-becomes-the-default'
Junio C Hamano [Mon, 30 Aug 2021 23:06:01 +0000 (16:06 -0700)] 
Merge branch 'en/ort-becomes-the-default'

Use `ort` instead of `recursive` as the default merge strategy.

* en/ort-becomes-the-default:
  Update docs for change of default merge backend
  Change default merge backend from recursive to ort

3 years agoMerge branch 'en/merge-strategy-docs'
Junio C Hamano [Mon, 30 Aug 2021 23:06:01 +0000 (16:06 -0700)] 
Merge branch 'en/merge-strategy-docs'

Documentation updates.

* en/merge-strategy-docs:
  Update error message and code comment
  merge-strategies.txt: add coverage of the `ort` merge strategy
  git-rebase.txt: correct out-of-date and misleading text about renames
  merge-strategies.txt: fix simple capitalization error
  merge-strategies.txt: avoid giving special preference to patience algorithm
  merge-strategies.txt: do not imply using copy detection is desired
  merge-strategies.txt: update wording for the resolve strategy
  Documentation: edit awkward references to `git merge-recursive`
  directory-rename-detection.txt: small updates due to merge-ort optimizations
  git-rebase.txt: correct antiquated claims about --rebase-merges

3 years agoMerge branch 'en/pull-conflicting-options'
Junio C Hamano [Mon, 30 Aug 2021 23:06:01 +0000 (16:06 -0700)] 
Merge branch 'en/pull-conflicting-options'

"git pull" had various corner cases that were not well thought out
around its --rebase backend, e.g. "git pull --ff-only" did not stop
but went ahead and rebased when the history on other side is not a
descendant of our history.  The series tries to fix them up.

* en/pull-conflicting-options:
  pull: fix handling of multiple heads
  pull: update docs & code for option compatibility with rebasing
  pull: abort by default when fast-forwarding is not possible
  pull: make --rebase and --no-rebase override pull.ff=only
  pull: since --ff-only overrides, handle it first
  pull: abort if --ff-only is given and fast-forwarding is impossible
  t7601: add tests of interactions with multiple merge heads and config
  t7601: test interaction of merge/rebase/fast-forward flags and options

3 years agoThe first batch post 2.33
Junio C Hamano [Tue, 24 Aug 2021 22:33:23 +0000 (15:33 -0700)] 
The first batch post 2.33

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'ps/fetch-pack-load-refs-optim'
Junio C Hamano [Tue, 24 Aug 2021 22:32:41 +0000 (15:32 -0700)] 
Merge branch 'ps/fetch-pack-load-refs-optim'

Loading of ref tips to prepare for common ancestry negotiation in
"git fetch-pack" has been optimized by taking advantage of the
commit graph when available.

* ps/fetch-pack-load-refs-optim:
  fetch-pack: speed up loading of refs via commit graph

3 years agoMerge branch 'jt/push-negotiation-fixes'
Junio C Hamano [Tue, 24 Aug 2021 22:32:40 +0000 (15:32 -0700)] 
Merge branch 'jt/push-negotiation-fixes'

Bugfix for common ancestor negotiation recently introduced in "git
push" code path.

* jt/push-negotiation-fixes:
  fetch: die on invalid --negotiation-tip hash
  send-pack: fix push nego. when remote has refs
  send-pack: fix push.negotiate with remote helper

3 years agoMerge branch 'es/trace2-log-parent-process-name'
Junio C Hamano [Tue, 24 Aug 2021 22:32:40 +0000 (15:32 -0700)] 
Merge branch 'es/trace2-log-parent-process-name'

trace2 logs learned to show parent process name to see in what
context Git was invoked.

* es/trace2-log-parent-process-name:
  tr2: log parent process name
  tr2: make process info collection platform-generic

3 years agoMerge branch 'hn/refs-test-cleanup'
Junio C Hamano [Tue, 24 Aug 2021 22:32:39 +0000 (15:32 -0700)] 
Merge branch 'hn/refs-test-cleanup'

A handful of tests that assumed implementation details of files
backend for refs have been cleaned up.

* hn/refs-test-cleanup:
  t6001: avoid direct file system access
  t6500: use "ls -1" to snapshot ref database state
  t7064: use update-ref -d to remove upstream branch
  t1410: mark test as REFFILES
  t1405: mark test for 'git pack-refs' as REFFILES
  t1405: use 'git reflog exists' to check reflog existence
  t2402: use ref-store test helper to create broken symlink
  t3320: use git-symbolic-ref rather than filesystem access
  t6120: use git-update-ref rather than filesystem access
  t1503: mark symlink test as REFFILES
  t6050: use git-update-ref rather than filesystem access

3 years agoMerge branch 'en/ort-perf-batch-15'
Junio C Hamano [Tue, 24 Aug 2021 22:32:39 +0000 (15:32 -0700)] 
Merge branch 'en/ort-perf-batch-15'

Final batch for "merge -sort" optimization.

* en/ort-perf-batch-15:
  merge-ort: remove compile-time ability to turn off usage of memory pools
  merge-ort: reuse path strings in pool_alloc_filespec
  merge-ort: store filepairs and filespecs in our mem_pool
  diffcore-rename, merge-ort: add wrapper functions for filepair alloc/dealloc
  merge-ort: switch our strmaps over to using memory pools
  merge-ort: set up a memory pool
  merge-ort: add pool_alloc, pool_calloc, and pool_strndup wrappers
  diffcore-rename: use a mem_pool for exact rename detection's hashmap
  merge-ort: rename str{map,intmap,set}_func()

3 years agoMerge branch 'js/expand-runtime-prefix'
Junio C Hamano [Tue, 24 Aug 2021 22:32:38 +0000 (15:32 -0700)] 
Merge branch 'js/expand-runtime-prefix'

Pathname expansion (like "~username/") learned a way to specify a
location relative to Git installation (e.g. its $sharedir which is
$(prefix)/share), with "%(prefix)".

* js/expand-runtime-prefix:
  expand_user_path: allow in-flight topics to keep using the old name
  interpolate_path(): allow specifying paths relative to the runtime prefix
  Use a better name for the function interpolating paths
  expand_user_path(): clarify the role of the `real_home` parameter
  expand_user_path(): remove stale part of the comment
  tests: exercise the RUNTIME_PREFIX feature

3 years agoMerge branch 'ab/bundle-doc'
Junio C Hamano [Tue, 24 Aug 2021 22:32:37 +0000 (15:32 -0700)] 
Merge branch 'ab/bundle-doc'

Doc update.

* ab/bundle-doc:
  bundle doc: replace "basis" with "prerequsite(s)"
  bundle doc: elaborate on rev<->ref restriction
  bundle doc: elaborate on object prerequisites
  bundle doc: rewrite the "DESCRIPTION" section

3 years agoMerge branch 'zh/ref-filter-raw-data'
Junio C Hamano [Tue, 24 Aug 2021 22:32:37 +0000 (15:32 -0700)] 
Merge branch 'zh/ref-filter-raw-data'

Prepare the "ref-filter" machinery that drives the "--format"
option of "git for-each-ref" and its friends to be used in "git
cat-file --batch".

* zh/ref-filter-raw-data:
  ref-filter: add %(rest) atom
  ref-filter: use non-const ref_format in *_atom_parser()
  ref-filter: --format=%(raw) support --perl
  ref-filter: add %(raw) atom
  ref-filter: add obj-type check in grab contents

3 years agoMerge branch 'ab/pack-stdin-packs-fix'
Junio C Hamano [Tue, 24 Aug 2021 22:32:36 +0000 (15:32 -0700)] 
Merge branch 'ab/pack-stdin-packs-fix'

Input validation of "git pack-objects --stdin-packs" has been
corrected.

* ab/pack-stdin-packs-fix:
  pack-objects: fix segfault in --stdin-packs option
  pack-objects tests: cover blindspots in stdin handling

3 years agoMerge branch 'ab/http-drop-old-curl'
Junio C Hamano [Tue, 24 Aug 2021 22:32:36 +0000 (15:32 -0700)] 
Merge branch 'ab/http-drop-old-curl'

Support for ancient versions of cURL library (pre 7.19.4) has been
dropped.

* ab/http-drop-old-curl:
  http: rename CURLOPT_FILE to CURLOPT_WRITEDATA
  http: drop support for curl < 7.19.3 and < 7.17.0 (again)
  http: drop support for curl < 7.19.4
  http: drop support for curl < 7.16.0
  http: drop support for curl < 7.11.1

3 years agoMerge branch 'ds/add-with-sparse-index'
Junio C Hamano [Tue, 24 Aug 2021 22:32:35 +0000 (15:32 -0700)] 
Merge branch 'ds/add-with-sparse-index'

"git add" can work better with the sparse index.

* ds/add-with-sparse-index:
  add: remove ensure_full_index() with --renormalize
  add: ignore outside the sparse-checkout in refresh()
  pathspec: stop calling ensure_full_index
  add: allow operating on a sparse-only index
  t1092: test merge conflicts outside cone

3 years agoMerge branch 'jc/bisect-sans-show-branch'
Junio C Hamano [Tue, 24 Aug 2021 22:32:35 +0000 (15:32 -0700)] 
Merge branch 'jc/bisect-sans-show-branch'

"git bisect" spawned "git show-branch" only to pretty-print the
title of the commit after checking out the next version to be
tested; this has been rewritten in C.

* jc/bisect-sans-show-branch:
  bisect: simplify return code from bisect_checkout()
  bisect: do not run show-branch just to show the current commit

3 years agoGit 2.33 v2.33.0
Junio C Hamano [Mon, 16 Aug 2021 19:15:44 +0000 (12:15 -0700)] 
Git 2.33

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'rs/oidtree-alignment-fix'
Junio C Hamano [Mon, 16 Aug 2021 19:14:35 +0000 (12:14 -0700)] 
Merge branch 'rs/oidtree-alignment-fix'

Codepath to access recently added oidtree data structure had
to make unaligned accesses to oids, which has been corrected.

* rs/oidtree-alignment-fix:
  oidtree: avoid unaligned access to crit-bit tree

3 years agoMerge tag 'l10n-2.33.0-rnd2' of git://github.com/git-l10n/git-po
Junio C Hamano [Mon, 16 Aug 2021 16:38:57 +0000 (09:38 -0700)] 
Merge tag 'l10n-2.33.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.33.0-rnd2

* tag 'l10n-2.33.0-rnd2' of git://github.com/git-l10n/git-po: (46 commits)
  l10n: sv.po: Update Swedish translation (5230t0f0u)
  l10n: TEAMS: change Simplified Chinese team leader
  l10n: tr: v2.33 (round 2)
  l10n: es: 2.33.0 round 2
  l10n: zh_CN: for git v2.33.0 l10n round 2
  l10n: zh_CN: Revision for git v2.32.0 l10n round 1
  l10n: README: refactor to use GFM syntax
  l10n: update German translation for Git v2.33.0 (rnd2)
  l10n: pt_PT: v2.33.0 round 2
  l10n: pt_PT: git-po-helper update
  l10n: pt_PT: update translation table
  l10n: zh_TW.po: remove the obsolete glossary
  l10n: vi.po(5230t): Updated translation for v2.32.0 round 2
  l10n: fr.po v2.33 rnd 2
  l10n: id: po-id for 2.33.0 round 2
  l10n: zh_TW.po: update for v2.33.0 rnd 2
  l10n: git.pot: v2.33.0 round 2 (11 new, 8 removed)
  l10n: de.po: fix typos
  l10n: update German translation for Git v2.33.0
  l10n: fr.po fix typos in commands and variables
  ...

3 years agol10n: sv.po: Update Swedish translation (5230t0f0u)
Peter Krefting [Sat, 14 Aug 2021 20:15:58 +0000 (21:15 +0100)] 
l10n: sv.po: Update Swedish translation (5230t0f0u)

Also fixed some typos reported by "git-po-helper".

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
3 years agol10n: TEAMS: change Simplified Chinese team leader
Jiang Xin [Sun, 15 Aug 2021 22:39:30 +0000 (06:39 +0800)] 
l10n: TEAMS: change Simplified Chinese team leader

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
3 years agooidtree: avoid unaligned access to crit-bit tree
René Scharfe [Sat, 14 Aug 2021 20:00:38 +0000 (22:00 +0200)] 
oidtree: avoid unaligned access to crit-bit tree

The flexible array member "k" of struct cb_node is used to store the key
of the crit-bit tree node.  It offers no alignment guarantees -- in fact
the current struct layout puts it one byte after a 4-byte aligned
address, i.e. guaranteed to be misaligned.

oidtree uses a struct object_id as cb_node key.  Since cf0983213c (hash:
add an algo member to struct object_id, 2021-04-26) it requires 4-byte
alignment.  The mismatch is reported by UndefinedBehaviorSanitizer at
runtime like this:

hash.h:277:2: runtime error: member access within misaligned address 0x00015000802d for type 'struct object_id', which requires 4 byte alignment
0x00015000802d: note: pointer points here
 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00
             ^
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior hash.h:277:2 in

We can fix that by:

1. eliminating the alignment requirement of struct object_id,
2. providing the alignment in struct cb_node, or
3. avoiding the issue by only using memcpy to access "k".

Currently we only store one of two values in "algo" in struct object_id.
We could use a uint8_t for that instead and widen it only once we add
support for our twohundredth algorithm or so.  That would not only avoid
alignment issues, but also reduce the memory requirements for each
instance of struct object_id by ca. 9%.

Supporting keys with alignment requirements might be useful to spread
the use of crit-bit trees.  It can be achieved by using a wider type for
"k" (e.g. uintmax_t), using different types for the members "byte" and
"otherbits" (e.g. uint16_t or uint32_t for each), or by avoiding the use
of flexible arrays like khash.h does.

This patch implements the third option, though, because it has the least
potential for causing side-effects and we're close to the next release.
If one of the other options is implemented later as well to get their
additional benefits we can get rid of the extra copies introduced here.

Reported-by: Andrzej Hunt <andrzej@ahunt.org>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'next' of github.com:ChrisADR/git-po
Jiang Xin [Sun, 15 Aug 2021 10:32:20 +0000 (18:32 +0800)] 
Merge branch 'next' of github.com:ChrisADR/git-po

* 'next' of github.com:ChrisADR/git-po:
  l10n: es: 2.33.0 round 2

3 years agol10n: tr: v2.33 (round 2)
Emir Sarı [Sun, 15 Aug 2021 07:17:15 +0000 (10:17 +0300)] 
l10n: tr: v2.33 (round 2)

Signed-off-by: Emir Sarı <bitigchi@me.com>
3 years agol10n: es: 2.33.0 round 2
Christopher Diaz Riveros [Sat, 14 Aug 2021 16:13:11 +0000 (11:13 -0500)] 
l10n: es: 2.33.0 round 2

Signed-off-by: Christopher Diaz Riveros <christopher.diaz.riv@gmail.com>
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Javier Spagnoletti phansys@gmail.com
Signed-off-by: Cleydyr Albuquerque <cleydyr@gmail.com>
Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>
Signed-off-by: Guillermo Ramos <gramosg>
3 years agol10n: zh_CN: for git v2.33.0 l10n round 2
Jiang Xin [Mon, 2 Aug 2021 00:25:39 +0000 (08:25 +0800)] 
l10n: zh_CN: for git v2.33.0 l10n round 2

Translate 48 new messages (5230t0f0u) for git 2.33.0, and also fixed
typos found by "git-po-helper".

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Fangyi Zhou <me@fangyi.io>
3 years agol10n: zh_CN: Revision for git v2.32.0 l10n round 1
Fangyi Zhou [Mon, 7 Jun 2021 04:59:56 +0000 (12:59 +0800)] 
l10n: zh_CN: Revision for git v2.32.0 l10n round 1

Signed-off-by: Fangyi Zhou <me@fangyi.io>
3 years agol10n: README: refactor to use GFM syntax
Jiang Xin [Fri, 6 Aug 2021 03:07:48 +0000 (11:07 +0800)] 
l10n: README: refactor to use GFM syntax

Format README.md using GFM (GitHub Flavored Markdown) syntax.

- In order to use more than 3 level headings, use ATX style headings
  instead of setext style headings.

- In order to add highlights for code blocks, use fenced code blocks
  instead of indented code blocks.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
3 years agoMerge branch 'l10n-2.33-rnd2' of github.com:ralfth/git
Jiang Xin [Sun, 15 Aug 2021 02:26:18 +0000 (10:26 +0800)] 
Merge branch 'l10n-2.33-rnd2' of github.com:ralfth/git

* 'l10n-2.33-rnd2' of github.com:ralfth/git:
  l10n: update German translation for Git v2.33.0 (rnd2)

3 years agoMerge branch 'pt-PT' of github.com:git-l10n-pt-PT/git-po
Jiang Xin [Sun, 15 Aug 2021 02:24:24 +0000 (10:24 +0800)] 
Merge branch 'pt-PT' of github.com:git-l10n-pt-PT/git-po

* 'pt-PT' of github.com:git-l10n-pt-PT/git-po:
  l10n: pt_PT: v2.33.0 round 2
  l10n: pt_PT: git-po-helper update
  l10n: pt_PT: update translation table

3 years agol10n: update German translation for Git v2.33.0 (rnd2)
Ralf Thielow [Sat, 14 Aug 2021 14:35:44 +0000 (16:35 +0200)] 
l10n: update German translation for Git v2.33.0 (rnd2)

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
3 years agol10n: pt_PT: v2.33.0 round 2
Daniel Santos [Sat, 14 Aug 2021 12:02:31 +0000 (13:02 +0100)] 
l10n: pt_PT: v2.33.0 round 2

 * translation of new entries

Signed-off-by: Daniel Santos <hello@brighterdan.com>
3 years agol10n: pt_PT: git-po-helper update
Daniel Santos [Sat, 14 Aug 2021 11:08:39 +0000 (12:08 +0100)] 
l10n: pt_PT: git-po-helper update

 * run git-po-helper update pt_PT.po

Signed-off-by: Daniel Santos <hello@brighterdan.com>
3 years agol10n: pt_PT: update translation table
Daniel Santos [Thu, 12 Aug 2021 21:13:03 +0000 (22:13 +0100)] 
l10n: pt_PT: update translation table

 * updated translation table

Signed-off-by: Daniel Santos <hello@brighterdan.com>
3 years agoMerge branch 'loc/zh_TW/210814' of github.com:l10n-tw/git-po
Jiang Xin [Sat, 14 Aug 2021 11:30:54 +0000 (19:30 +0800)] 
Merge branch 'loc/zh_TW/210814' of github.com:l10n-tw/git-po

* 'loc/zh_TW/210814' of github.com:l10n-tw/git-po:
  l10n: zh_TW.po: remove the obsolete glossary
  l10n: zh_TW.po: update for v2.33.0 rnd 2

3 years agol10n: zh_TW.po: remove the obsolete glossary
Yi-Jyun Pan [Sat, 14 Aug 2021 06:11:42 +0000 (14:11 +0800)] 
l10n: zh_TW.po: remove the obsolete glossary

Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
3 years agoMerge branch 'master' of github.com:vnwildman/git
Jiang Xin [Sat, 14 Aug 2021 09:02:54 +0000 (17:02 +0800)] 
Merge branch 'master' of github.com:vnwildman/git

* 'master' of github.com:vnwildman/git:
  l10n: vi.po(5230t): Updated translation for v2.32.0 round 2

3 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sat, 14 Aug 2021 09:01:27 +0000 (17:01 +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 2

3 years agol10n: vi.po(5230t): Updated translation for v2.32.0 round 2
Tran Ngoc Quan [Sat, 14 Aug 2021 07:54:44 +0000 (14:54 +0700)] 
l10n: vi.po(5230t): Updated translation for v2.32.0 round 2

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
3 years agol10n: fr.po v2.33 rnd 2
Jean-Noël Avila [Sat, 14 Aug 2021 06:28:48 +0000 (08:28 +0200)] 
l10n: fr.po v2.33 rnd 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
3 years agol10n: id: po-id for 2.33.0 round 2
Bagas Sanjaya [Sat, 14 Aug 2021 02:35:18 +0000 (09:35 +0700)] 
l10n: id: po-id for 2.33.0 round 2

Update translation for following component:
  * builtin/submodule--helper.c

Translate following new component:
  * builtin/revert.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
3 years agol10n: zh_TW.po: update for v2.33.0 rnd 2
Yi-Jyun Pan [Sat, 14 Aug 2021 05:48:09 +0000 (13:48 +0800)] 
l10n: zh_TW.po: update for v2.33.0 rnd 2

Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
3 years agoMerge branch 'master' of github.com:vnwildman/git
Jiang Xin [Sat, 14 Aug 2021 03:52:34 +0000 (11:52 +0800)] 
Merge branch 'master' of github.com:vnwildman/git

* 'master' of github.com:vnwildman/git:
  l10n: vi.po(5227t): Fixed typo after run git-po-helper

3 years agol10n: git.pot: v2.33.0 round 2 (11 new, 8 removed)
Jiang Xin [Fri, 13 Aug 2021 23:57:34 +0000 (07:57 +0800)] 
l10n: git.pot: v2.33.0 round 2 (11 new, 8 removed)

Generate po/git.pot from v2.33.0-rc2 for git v2.33.0 l10n round 2.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
3 years agoMerge branch 'master' of github.com:git/git
Jiang Xin [Fri, 13 Aug 2021 23:56:22 +0000 (07:56 +0800)] 
Merge branch 'master' of github.com:git/git

* 'master' of github.com:git/git: (51 commits)
  Git 2.33-rc2
  object-file: use unsigned arithmetic with bit mask
  Revert 'diff-merges: let "-m" imply "-p"'
  object-store: avoid extra ';' from KHASH_INIT
  oidtree: avoid nested struct oidtree_node
  Git 2.33-rc1
  test: fix for COLUMNS and bash 5
  The eighth batch
  diff: --pickaxe-all typofix
  mingw: align symlinks-related rmdir() behavior with Linux
  t7508: avoid non POSIX BRE
  use fspathhash() everywhere
  t0001: fix broken not-quite getcwd(3) test in bed67874e2
  Documentation: render special characters correctly
  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
  ...

3 years agoMerge branch 'master' of github.com:nafmo/git-l10n-sv
Jiang Xin [Fri, 13 Aug 2021 23:55:01 +0000 (07:55 +0800)] 
Merge branch 'master' of github.com:nafmo/git-l10n-sv

* 'master' of github.com:nafmo/git-l10n-sv:
  l10n: sv.po: Update Swedish translation (5227t0f0u)

3 years agoMerge branch 'master' of github.com:alshopov/git-po
Jiang Xin [Fri, 13 Aug 2021 23:54:38 +0000 (07:54 +0800)] 
Merge branch 'master' of github.com:alshopov/git-po

* 'master' of github.com:alshopov/git-po:
  l10n: bg.po: Updated Bulgarian translation (5227t)

3 years agoMerge branch 'l10n-2.33' of github.com:ralfth/git
Jiang Xin [Fri, 13 Aug 2021 23:50:33 +0000 (07:50 +0800)] 
Merge branch 'l10n-2.33' of github.com:ralfth/git

* 'l10n-2.33' of github.com:ralfth/git:
  l10n: de.po: fix typos
  l10n: update German translation for Git v2.33.0

3 years agoMerge branch 'fr_fix_typos' of github.com:jnavila/git
Jiang Xin [Fri, 13 Aug 2021 23:45:37 +0000 (07:45 +0800)] 
Merge branch 'fr_fix_typos' of github.com:jnavila/git

* 'fr_fix_typos' of github.com:jnavila/git:
  l10n: fr.po fix typos in commands and variables

3 years agoMerge branch 'master' of github.com:Softcatala/git-po
Jiang Xin [Fri, 13 Aug 2021 23:44:41 +0000 (07:44 +0800)] 
Merge branch 'master' of github.com:Softcatala/git-po

* 'master' of github.com:Softcatala/git-po:
  l10n: Update Catalan translation

3 years agol10n: de.po: fix typos
Ralf Thielow [Fri, 13 Aug 2021 15:07:04 +0000 (17:07 +0200)] 
l10n: de.po: fix typos

Fix some typos found by `./git-po-helper check-po po/de.po`.

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
3 years agol10n: update German translation for Git v2.33.0
Ralf Thielow [Mon, 9 Aug 2021 14:50:31 +0000 (16:50 +0200)] 
l10n: update German translation for Git v2.33.0

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
3 years agoci: update freebsd 12 cirrus job
Carlo Marcelo Arenas Belón [Thu, 12 Aug 2021 20:22:00 +0000 (13:22 -0700)] 
ci: update freebsd 12 cirrus job

make sure it uses a supported OS branch and uses all the resources
that can be allocated efficiently.

while only 1GB of memory is needed, 2GB is the minimum for a 2 CPU
machine (the default), but by increasing parallelism wall time has
been reduced by 35%.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agolist-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits"
Teng Long [Thu, 12 Aug 2021 08:59:31 +0000 (16:59 +0800)] 
list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits"

Function `traverse_trees_and_blobs` not only works on trees and blobs,
but also on tags, the function name is somewhat misleading. This commit
rename it to `traverse_non_commits`.

Signed-off-by: Teng Long <dyroneteng@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agol10n: fr.po fix typos in commands and variables
Jean-Noël Avila [Thu, 12 Aug 2021 19:09:51 +0000 (21:09 +0200)] 
l10n: fr.po fix typos in commands and variables

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
3 years agol10n: id: mismatch variable name fixes
Bagas Sanjaya [Thu, 12 Aug 2021 10:18:29 +0000 (17:18 +0700)] 
l10n: id: mismatch variable name fixes

Jiang Xin reported possible typos in po/id.po, all of them are mismatch
variable names. Fix them.

Reported-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
3 years agol10n: vi.po(5227t): Fixed typo after run git-po-helper
Tran Ngoc Quan [Thu, 12 Aug 2021 07:05:39 +0000 (14:05 +0700)] 
l10n: vi.po(5227t): Fixed typo after run git-po-helper

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
3 years agol10n: Update Catalan translation
Jordi Mas [Thu, 12 Aug 2021 06:07:32 +0000 (08:07 +0200)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
3 years agot5607: avoid using prerequisites to select algorithm
brian m. carlson [Wed, 11 Aug 2021 23:16:44 +0000 (23:16 +0000)] 
t5607: avoid using prerequisites to select algorithm

In this test, we currently use the SHA1 prerequisite to specify the
algorithm we're using to test, since SHA-256 bundles are always v3,
whereas SHA-1 bundles default to v2, and as a result the default output
differs.

However, this causes a problem if we run with GIT_TEST_FAIL_PREREQS set,
since that means that we'll unexpectedly fail the SHA1 prerequisite,
resulting in incorrect expected output.  Let's fix this by checking
against the built-in data called "algo", which tells us which algorithm
is in use.  This should work in any situation, making our test a little
more robust.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'daniel' of github.com:git-l10n-pt-PT/git-po
Jiang Xin [Thu, 12 Aug 2021 00:23:55 +0000 (08:23 +0800)] 
Merge branch 'daniel' of github.com:git-l10n-pt-PT/git-po

* 'daniel' of github.com:git-l10n-pt-PT/git-po:
  l10n: pt_PT: cleaning flags mismatch
  l10n: pt_PT: cleaning duplicate translations
  l10n: pt_PT: update translation tables
  l10n: pt_PT: translated git v2.33.0
  l10n: pt_PT: update git-po-helper
  l10n: pt_PT: remove trailing comments
  l10n: pt_PT: translation tables
  l10n: pt_PT: add Portuguese translations part 5
  l10n: pt_PT: add Portuguese translations part 4

3 years agoGit 2.33-rc2 v2.33.0-rc2
Junio C Hamano [Wed, 11 Aug 2021 18:54:03 +0000 (11:54 -0700)] 
Git 2.33-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoMerge branch 'jn/log-m-does-not-imply-p'
Junio C Hamano [Wed, 11 Aug 2021 19:36:18 +0000 (12:36 -0700)] 
Merge branch 'jn/log-m-does-not-imply-p'

Earlier "git log -m" was changed to always produce patch output,
which would break existing scripts, which has been reverted.

* jn/log-m-does-not-imply-p:
  Revert 'diff-merges: let "-m" imply "-p"'

3 years agoMerge branch 'cb/many-alternate-optim-fixup'
Junio C Hamano [Wed, 11 Aug 2021 19:36:17 +0000 (12:36 -0700)] 
Merge branch 'cb/many-alternate-optim-fixup'

Build fix.

* cb/many-alternate-optim-fixup:
  object-file: use unsigned arithmetic with bit mask
  object-store: avoid extra ';' from KHASH_INIT
  oidtree: avoid nested struct oidtree_node

3 years agouserdiff: improve java hunk header regex
Tassilo Horn [Wed, 11 Aug 2021 17:51:04 +0000 (19:51 +0200)] 
userdiff: improve java hunk header regex

Currently, the git diff hunk headers show the wrong method signature if the
method has a qualified return type, an array return type, or a generic return
type because the regex doesn't allow dots (.), [], or < and > in the return
type.  Also, type parameter declarations couldn't be matched.

Add several t4018 tests asserting the right hunk headers for different cases:

  - enum constant change
  - change in generic method with bounded type parameters
  - change in generic method with wildcard
  - field change in a nested class

Signed-off-by: Tassilo Horn <tsdh@gnu.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agouserdiff: comment on the builtin patterns
Junio C Hamano [Tue, 10 Aug 2021 22:12:01 +0000 (15:12 -0700)] 
userdiff: comment on the builtin patterns

Remind developers that they do not need to go overboard to implement
patterns to prepare for invalid constructs.  They only have to be
sufficiently permissive, assuming that the payload is syntactically
correct, and that may allow them to be simpler.

Text stolen mostly from, and further improved by, Johannes Sixt.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoobject-file: use unsigned arithmetic with bit mask
René Scharfe [Fri, 6 Aug 2021 17:53:47 +0000 (19:53 +0200)] 
object-file: use unsigned arithmetic with bit mask

33f379eee6 (make object_directory.loose_objects_subdir_seen a bitmap,
2021-07-07) replaced a wasteful 256-byte array with a 32-byte array
and bit operations.  The mask calculation shifts a literal 1 of type
int left by anything between 0 and 31.  UndefinedBehaviorSanitizer
doesn't like that and reports:

object-file.c:2477:18: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'

Make sure to use an unsigned 1 instead to avoid the issue.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agol10n: pt_PT: cleaning flags mismatch
Daniel Santos [Wed, 11 Aug 2021 04:07:01 +0000 (05:07 +0100)] 
l10n: pt_PT: cleaning flags mismatch

 * corrected git flags mismatch

Signed-off-by: Daniel Santos <hello@brighterdan.com>
3 years agoMerge branch 'ds/add-with-sparse-index' into ds/sparse-index-ignored-files
Junio C Hamano [Tue, 10 Aug 2021 20:39:14 +0000 (13:39 -0700)] 
Merge branch 'ds/add-with-sparse-index' into ds/sparse-index-ignored-files

* ds/add-with-sparse-index:
  add: remove ensure_full_index() with --renormalize
  add: ignore outside the sparse-checkout in refresh()
  pathspec: stop calling ensure_full_index
  add: allow operating on a sparse-only index
  t1092: test merge conflicts outside cone

3 years agoconnect, protocol: log negotiated protocol version
Josh Steadmon [Tue, 10 Aug 2021 17:20:39 +0000 (10:20 -0700)] 
connect, protocol: log negotiated protocol version

It is useful for performance monitoring and debugging purposes to know
the wire protocol used for remote operations. This may differ from the
version set in local configuration due to differences in version and/or
configuration between the server and the client. Therefore, log the
negotiated wire protocol version via trace2, for both clients and
servers.

Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agoapply: keep buffer/size pair in sync when parsing binary hunks
Jeff King [Tue, 10 Aug 2021 01:01:52 +0000 (21:01 -0400)] 
apply: keep buffer/size pair in sync when parsing binary hunks

We parse through binary hunks by looping through the buffer with code
like:

    llen = linelen(buffer, size);

    ...do something with the line...

    buffer += llen;
    size -= llen;

However, before we enter the loop, there is one call that increments
"buffer" but forgets to decrement "size". As a result, our "size" is off
by the length of that line, and subsequent calls to linelen() may look
past the end of the buffer for a newline.

The fix is easy: we just need to decrement size as we do elsewhere.

This bug goes all the way back to 0660626caf (binary diff: further
updates., 2006-05-05). Presumably nobody noticed because it only
triggers if the patch is corrupted, and even then we are often "saved"
by luck. We use a strbuf to store the incoming patch, so we overallocate
there, plus we add a 16-byte run of NULs as slop for memory comparisons.
So if this happened accidentally, the common case is that we'd just read
a few uninitialized bytes from the end of the strbuf before producing
the expected "this patch is corrupted" error complaint.

However, it is possible to carefully construct a case which reads off
the end of the buffer. The included test does so. It will pass both
before and after this patch when run normally, but using a tool like
ASan shows that we get an out-of-bounds read before this patch, but not
after.

Reported-by: Xingman Chen <xichixingman@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agorange-diff: use ssize_t for parsed "len" in read_patches()
Jeff King [Mon, 9 Aug 2021 22:48:48 +0000 (18:48 -0400)] 
range-diff: use ssize_t for parsed "len" in read_patches()

As we iterate through the buffer containing git-log output, parsing
lines, we use an "int" to store the size of an individual line. This
should be a size_t, as we have no guarantee that there is not a
malicious 2GB+ commit-message line in the output.

Overflowing this integer probably doesn't do anything _too_ terrible. We
are not using the value to size a buffer, so the worst case is probably
an out-of-bounds read from before the array. But it's easy enough to
fix.

Note that we have to use ssize_t here, since we also store the length
result from parse_git_diff_header(), which may return a negative value
for error. That function actually returns an int itself, which has a
similar overflow problem, but I'll leave that for another day. Much
of the apply.c code uses ints and should be converted as a whole; in the
meantime, a negative return from parse_git_diff_header() will be
interpreted as an error, and we'll bail (so we can't handle such a case,
but given that it's likely to be malicious anyway, the important thing
is we don't have any memory errors).

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agorange-diff: handle unterminated lines in read_patches()
Jeff King [Mon, 9 Aug 2021 22:48:39 +0000 (18:48 -0400)] 
range-diff: handle unterminated lines in read_patches()

When parsing our buffer of output from git-log, we have a
find_end_of_line() helper that finds the next newline, and gives us the
number of bytes to move past it, or the size of the whole remaining
buffer if there is no newline.

But trying to handle both those cases leads to some oddities:

  - we try to overwrite the newline with NUL in the caller, by writing
    over line[len-1]. This is at best redundant, since the helper will
    already have done so if it saw a newline. But if it didn't see a
    newline, it's actively wrong; we'll overwrite the byte at the end of
    the (unterminated) line.

    We could solve this just dropping the extra NUL assignment in the
    caller and just letting the helper do the right thing. But...

  - if we see a "diff --git" line, we'll restore the newline on top of
    the NUL byte, so we can pass the string to parse_git_diff_header().
    But if there was no newline in the first place, we can't do this.
    There's no place to put it (the current code writes a newline
    over whatever byte we obliterated earlier). The best we can do is
    feed the complete remainder of the buffer to the function (which is,
    in fact, a string, by virtue of being a strbuf).

To solve this, the caller needs to know whether we actually found a
newline or not. We could modify find_end_of_line() to return that
information, but we can further observe that it has only one caller.
So let's just inline it in that caller.

Nobody seems to have noticed this case, probably because git-log would
never produce input that doesn't end with a newline. Arguably we could
just return an error as soon as we see that the output does not end in a
newline. But the code to do so actually ends up _longer_, mostly because
of the cleanup we have to do in handling the error.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years agorange-diff: drop useless "offset" variable from read_patches()
Jeff King [Mon, 9 Aug 2021 22:47:42 +0000 (18:47 -0400)] 
range-diff: drop useless "offset" variable from read_patches()

The "offset" variable was was introduced in 44b67cb62b (range-diff:
split lines manually, 2019-07-11), but it has never done anything
useful. We use it to count up the number of bytes we've consumed, but we
never look at the result. It was probably copied accidentally from an
almost-identical loop in apply.c:find_header() (and the point of that
commit was to make use of the parse_git_diff_header() function which
underlies both).

Because the variable was set but not used, most compilers didn't seem to
notice, but the upcoming clang-14 does complain about it, via its
-Wunused-but-set-variable warning.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 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>
3 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>