]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
2 years agotrace2: add global counter mechanism
Jeff Hostetler [Mon, 24 Oct 2022 13:41:07 +0000 (13:41 +0000)] 
trace2: add global counter mechanism

Add global counters mechanism to Trace2.

The Trace2 counters mechanism adds the ability to create a set of
global counter variables and an API to increment them efficiently.
Counters can optionally report per-thread usage in addition to the sum
across all threads.

Counter events are emitted to the Trace2 logs when a thread exits and
at process exit.

Counters are an alternative to `data` and `data_json` events.

Counters are useful when you want to measure something across the life
of the process, when you don't want per-measurement events for
performance reasons, when the data does not fit conveniently within a
region, or when your control flow does not easily let you write the
final total.  For example, you might use this to report the number of
calls to unzip() or the number of de-delta steps during a checkout.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: add stopwatch timers
Jeff Hostetler [Mon, 24 Oct 2022 13:41:06 +0000 (13:41 +0000)] 
trace2: add stopwatch timers

Add stopwatch timer mechanism to Trace2.

Timers are an alternative to Trace2 Regions.  Regions are useful for
measuring the time spent in various computation phases, such as the
time to read the index, time to scan for unstaged files, time to scan
for untracked files, and etc.

However, regions are not appropriate in all places.  For example,
during a checkout, it would be very inefficient to use regions to
measure the total time spent inflating objects from the ODB from
across the entire lifetime of the process; a per-unzip() region would
flood the output and significantly slow the command; and some form of
post-processing would be requried to compute the time spent in unzip().

Timers can be used to measure a series of timer intervals and emit
a single summary event (at thread and/or process exit).

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: convert ctx.thread_name from strbuf to pointer
Jeff Hostetler [Mon, 24 Oct 2022 13:41:05 +0000 (13:41 +0000)] 
trace2: convert ctx.thread_name from strbuf to pointer

Convert the `tr2tls_thread_ctx.thread_name` field from a `strbuf`
to a "const char*" pointer.

The `thread_name` field is a constant string that is constructed when
the context is created.  Using a (non-const) `strbuf` structure for it
caused some confusion in the past because it implied that someone
could rename a thread after it was created.  That usage was not
intended.  Change it to a const pointer to make the intent more clear.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: improve thread-name documentation in the thread-context
Jeff Hostetler [Mon, 24 Oct 2022 13:41:04 +0000 (13:41 +0000)] 
trace2: improve thread-name documentation in the thread-context

Improve the documentation of the tr2tls_thread_ctx.thread_name field
and its relation to the tr2tls_thread_ctx.thread_id field.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: rename the thread_name argument to trace2_thread_start
Jeff Hostetler [Mon, 24 Oct 2022 13:41:03 +0000 (13:41 +0000)] 
trace2: rename the thread_name argument to trace2_thread_start

Rename the `thread_name` argument in `tr2tls_create_self()` and
`trace2_thread_start()` to be `thread_base_name` to make it clearer
that the passed argument is a component used in the construction of
the actual `struct tr2tls_thread_ctx.thread_name` variable.

The base name will be used along with the thread id to create a
unique thread name.

This commit does not change how the `thread_name` field is
allocated or stored within the `tr2tls_thread_ctx` structure.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoapi-trace2.txt: elminate section describing the public trace2 API
Jeff Hostetler [Mon, 24 Oct 2022 13:41:02 +0000 (13:41 +0000)] 
api-trace2.txt: elminate section describing the public trace2 API

Eliminate the mostly obsolete `Public API` sub-section from the
`Trace2 API` section in the documentation.  Strengthen the referral
to `trace2.h`.

Most of the technical information in this sub-section was moved to
`trace2.h` in 6c51cb525d (trace2: move doc to trace2.h, 2019-11-17) to
be adjacent to the function prototypes.  The remaining text wasn't
that useful by itself.

Furthermore, the text would need a bit of overhaul to add routines
that do not immediately generate a message, such as stopwatch timers.
So it seemed simpler to just get rid of it.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotr2tls: clarify TLS terminology
Jeff Hostetler [Mon, 24 Oct 2022 13:41:01 +0000 (13:41 +0000)] 
tr2tls: clarify TLS terminology

Reduce or eliminate use of the term "TLS" in the Trace2 code.

The term "TLS" has two popular meanings: "thread-local storage" and
"transport layer security".  In the Trace2 source, the term is associated
with the former.  There was concern on the mailing list about it refering
to the latter.

Update the source and documentation to eliminate the use of the "TLS" term
or replace it with the phrase "thread-local storage" to reduce ambiguity.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agotrace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx
Jeff Hostetler [Mon, 24 Oct 2022 13:41:00 +0000 (13:41 +0000)] 
trace2: use size_t alloc,nr_open_regions in tr2tls_thread_ctx

Use "size_t" rather than "int" for the "alloc" and "nr_open_regions"
fields in the "tr2tls_thread_ctx".  These are used by ALLOC_GROW().

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoThe second batch
Junio C Hamano [Tue, 11 Oct 2022 17:02:52 +0000 (10:02 -0700)] 
The second batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'rs/gc-pack-refs-simplify'
Junio C Hamano [Tue, 11 Oct 2022 17:36:12 +0000 (10:36 -0700)] 
Merge branch 'rs/gc-pack-refs-simplify'

Code clean-up.

* rs/gc-pack-refs-simplify:
  gc: simplify maintenance_task_pack_refs()

2 years agoMerge branch 'nb/doc-mergetool-typofix'
Junio C Hamano [Tue, 11 Oct 2022 17:36:12 +0000 (10:36 -0700)] 
Merge branch 'nb/doc-mergetool-typofix'

Typofix.

* nb/doc-mergetool-typofix:
  mergetool.txt: typofix 'overwriten' -> 'overwritten'

2 years agoMerge branch 'jk/sequencer-missing-author-name-check'
Junio C Hamano [Tue, 11 Oct 2022 17:36:12 +0000 (10:36 -0700)] 
Merge branch 'jk/sequencer-missing-author-name-check'

Typofix in code.

* jk/sequencer-missing-author-name-check:
  sequencer: detect author name errors in read_author_script()

2 years agoMerge branch 'pw/ssh-sign-report-errors'
Junio C Hamano [Tue, 11 Oct 2022 17:36:11 +0000 (10:36 -0700)] 
Merge branch 'pw/ssh-sign-report-errors'

The codepath to sign learned to report errors when it fails to read
from "ssh-keygen".

* pw/ssh-sign-report-errors:
  ssh signing: return an error when signature cannot be read

2 years agoMerge branch 'pw/mailinfo-b-fix'
Junio C Hamano [Tue, 11 Oct 2022 17:36:11 +0000 (10:36 -0700)] 
Merge branch 'pw/mailinfo-b-fix'

Fix a logic in "mailinfo -b" that miscomputed the length of a
substring, which lead to an out-of-bounds access.

* pw/mailinfo-b-fix:
  mailinfo -b: fix an out of bounds access

2 years agoMerge branch 'rs/test-httpd-in-C-locale'
Junio C Hamano [Tue, 11 Oct 2022 17:36:11 +0000 (10:36 -0700)] 
Merge branch 'rs/test-httpd-in-C-locale'

Force C locale while running tests around httpd to make sure we can
find expected error messages in the log.

* rs/test-httpd-in-C-locale:
  t/lib-httpd: pass LANG and LC_ALL to Apache

2 years agoMerge branch 'ds/bundle-uri-docfix'
Junio C Hamano [Tue, 11 Oct 2022 17:36:10 +0000 (10:36 -0700)] 
Merge branch 'ds/bundle-uri-docfix'

Doc formatting fix.

* ds/bundle-uri-docfix:
  bundle-uri: fix technical doc issues

2 years agoThe (real) first batch for 2.39
Junio C Hamano [Mon, 10 Oct 2022 17:09:09 +0000 (10:09 -0700)] 
The (real) first batch for 2.39

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'js/merge-ort-in-read-only-repo'
Junio C Hamano [Mon, 10 Oct 2022 17:08:43 +0000 (10:08 -0700)] 
Merge branch 'js/merge-ort-in-read-only-repo'

In read-only repositories, "git merge-tree" tried to come up with a
merge result tree object, which it failed (which is not wrong) and
led to a segfault (which is bad), which has been corrected.

* js/merge-ort-in-read-only-repo:
  merge-ort: return early when failing to write a blob
  merge-ort: fix segmentation fault in read-only repositories

2 years agoMerge branch 'tb/midx-repack-ignore-cruft-packs'
Junio C Hamano [Mon, 10 Oct 2022 17:08:43 +0000 (10:08 -0700)] 
Merge branch 'tb/midx-repack-ignore-cruft-packs'

"git multi-pack-index repack/expire" used to repack unreachable
cruft into a new pack, which have been corrected.

* tb/midx-repack-ignore-cruft-packs:
  midx.c: avoid cruft packs with non-zero `repack --batch-size`
  midx.c: remove unnecessary loop condition
  midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`
  midx.c: avoid cruft packs with `repack --batch-size=0`
  midx.c: prevent `expire` from removing the cruft pack
  Documentation/git-multi-pack-index.txt: clarify expire behavior
  Documentation/git-multi-pack-index.txt: fix typo

2 years agoMerge branch 'hn/parse-worktree-ref'
Junio C Hamano [Mon, 10 Oct 2022 17:08:43 +0000 (10:08 -0700)] 
Merge branch 'hn/parse-worktree-ref'

Code and semantics cleaning.

* hn/parse-worktree-ref:
  refs: unify parse_worktree_ref() and ref_type()

2 years agoMerge branch 'ja/rebase-i-avoid-amending-self'
Junio C Hamano [Mon, 10 Oct 2022 17:08:43 +0000 (10:08 -0700)] 
Merge branch 'ja/rebase-i-avoid-amending-self'

"git rebase -i" can mistakenly attempt to apply a fixup to a commit
itself, which has been corrected.

* ja/rebase-i-avoid-amending-self:
  sequencer: avoid dropping fixup commit that targets self via commit-ish

2 years agoMerge branch 'rj/ref-filter-get-head-description-leakfix'
Junio C Hamano [Mon, 10 Oct 2022 17:08:42 +0000 (10:08 -0700)] 
Merge branch 'rj/ref-filter-get-head-description-leakfix'

Leakfix.

* rj/ref-filter-get-head-description-leakfix:
  ref-filter.c: fix a leak in get_head_description

2 years agoMerge branch 'jc/environ-docs'
Junio C Hamano [Mon, 10 Oct 2022 17:08:41 +0000 (10:08 -0700)] 
Merge branch 'jc/environ-docs'

Documentation on various Boolean GIT_* environment variables have
been clarified.

* jc/environ-docs:
  environ: GIT_INDEX_VERSION affects not just a new repository
  environ: simplify description of GIT_INDEX_FILE
  environ: GIT_FLUSH should be made a usual Boolean
  environ: explain Boolean environment variables
  environ: document GIT_SSL_NO_VERIFY

2 years agoMerge branch 'ah/branch-autosetupmerge-grammofix'
Junio C Hamano [Mon, 10 Oct 2022 17:08:40 +0000 (10:08 -0700)] 
Merge branch 'ah/branch-autosetupmerge-grammofix'

Fix grammar of a message introduced in previous round.

* ah/branch-autosetupmerge-grammofix:
  push: improve grammar of branch.autoSetupMerge advice

2 years agoMerge branch 'ab/test-malloc-with-sanitize-leak'
Junio C Hamano [Mon, 10 Oct 2022 17:08:40 +0000 (10:08 -0700)] 
Merge branch 'ab/test-malloc-with-sanitize-leak'

Test fix.

* ab/test-malloc-with-sanitize-leak:
  test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK

2 years agoMerge branch 'sy/sparse-grep'
Junio C Hamano [Mon, 10 Oct 2022 17:08:40 +0000 (10:08 -0700)] 
Merge branch 'sy/sparse-grep'

"git grep" learned to expand the sparse-index more lazily and on
demand in a sparse checkout.

* sy/sparse-grep:
  builtin/grep.c: integrate with sparse index

2 years agoMerge branch 'ds/scalar-unregister-idempotent'
Junio C Hamano [Mon, 10 Oct 2022 17:08:40 +0000 (10:08 -0700)] 
Merge branch 'ds/scalar-unregister-idempotent'

"scalar unregister" in a repository that is already been
unregistered reported an error.

* ds/scalar-unregister-idempotent:
  string-list: document iterator behavior on NULL input
  gc: replace config subprocesses with API calls
  scalar: make 'unregister' idempotent
  maintenance: add 'unregister --force'

2 years agoMerge branch 'mc/cred-helper-ignore-unknown'
Junio C Hamano [Mon, 10 Oct 2022 17:08:40 +0000 (10:08 -0700)] 
Merge branch 'mc/cred-helper-ignore-unknown'

Most credential helpers ignored unknown entries in a credential
description, but a few died upon seeing them.  The latter were
taught to ignore them, too

* mc/cred-helper-ignore-unknown:
  osxkeychain: clarify that we ignore unknown lines
  netrc: ignore unknown lines (do not die)
  wincred: ignore unknown lines (do not die)

2 years agoMerge branch 'jk/remote-rename-without-fetch-refspec'
Junio C Hamano [Mon, 10 Oct 2022 17:08:39 +0000 (10:08 -0700)] 
Merge branch 'jk/remote-rename-without-fetch-refspec'

"git remote rename" failed to rename a remote without fetch
refspec, which has been corrected.

* jk/remote-rename-without-fetch-refspec:
  remote: handle rename of remote without fetch refspec

2 years agoMerge branch 'jk/clone-allow-bare-and-o-together'
Junio C Hamano [Mon, 10 Oct 2022 17:08:39 +0000 (10:08 -0700)] 
Merge branch 'jk/clone-allow-bare-and-o-together'

"git clone" did not like to see the "--bare" and the "--origin"
options used together without a good reason.

* jk/clone-allow-bare-and-o-together:
  clone: allow "--bare" with "-o"

2 years agoMerge branch 'jk/fsck-on-diet'
Junio C Hamano [Mon, 10 Oct 2022 17:08:39 +0000 (10:08 -0700)] 
Merge branch 'jk/fsck-on-diet'

"git fsck" failed to release contents of tree objects already used
from the memory, which has been fixed.

* jk/fsck-on-diet:
  parse_object_buffer(): respect save_commit_buffer
  fsck: turn off save_commit_buffer
  fsck: free tree buffers after walking unreachable objects

2 years agoMerge branch 'so/diff-merges-cleanup'
Junio C Hamano [Mon, 10 Oct 2022 17:08:39 +0000 (10:08 -0700)] 
Merge branch 'so/diff-merges-cleanup'

Code clean-up.

* so/diff-merges-cleanup:
  diff-merges: clarify log.diffMerges documentation
  diff-merges: cleanup set_diff_merges()
  diff-merges: cleanup func_by_opt()

2 years agoMerge branch 'ah/fsmonitor-daemon-usage-non-l10n'
Junio C Hamano [Mon, 10 Oct 2022 17:08:39 +0000 (10:08 -0700)] 
Merge branch 'ah/fsmonitor-daemon-usage-non-l10n'

Fix messages incorrectly marked for translation.

* ah/fsmonitor-daemon-usage-non-l10n:
  fsmonitor--daemon: don't translate literal commands

2 years agoStart 2.39 cycle
Junio C Hamano [Sat, 8 Oct 2022 00:09:21 +0000 (17:09 -0700)] 
Start 2.39 cycle

The version numbers do not mean much, but we may want to call the
first one in 2023 version 3.1 or something, but let's just increment
the second digit from the previous one for this cycle.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'ac/fuzzers'
Junio C Hamano [Sat, 8 Oct 2022 00:19:59 +0000 (17:19 -0700)] 
Merge branch 'ac/fuzzers'

Source file shuffling.

* ac/fuzzers:
  fuzz: reorganise the path for existing oss-fuzz fuzzers

2 years agoMerge branch 'vd/fix-unaligned-read-index-v4'
Junio C Hamano [Sat, 8 Oct 2022 00:19:59 +0000 (17:19 -0700)] 
Merge branch 'vd/fix-unaligned-read-index-v4'

The codepath that reads from the index v4 had unaligned memory
accesses, which has been corrected.

* vd/fix-unaligned-read-index-v4:
  read-cache: avoid misaligned reads in index v4

2 years agoMerge branch 'es/retire-efgrep'
Junio C Hamano [Sat, 8 Oct 2022 00:19:59 +0000 (17:19 -0700)] 
Merge branch 'es/retire-efgrep'

Prepare for GNU [ef]grep that throw warning of their uses.

* es/retire-efgrep:
  check-non-portable-shell: detect obsolescent egrep/fgrep

2 years agoMerge branch 'dd/retire-efgrep'
Junio C Hamano [Sat, 8 Oct 2022 00:19:59 +0000 (17:19 -0700)] 
Merge branch 'dd/retire-efgrep'

Prepare for GNU [ef]grep that throw warning of their uses.

* dd/retire-efgrep:
  t: convert fgrep usage to "grep -F"
  t: convert egrep usage to "grep -E"
  t: remove \{m,n\} from BRE grep usage
  CodingGuidelines: allow grep -E

2 years agoMerge branch 'ds/use-platform-regex-on-macos'
Junio C Hamano [Sat, 8 Oct 2022 00:19:58 +0000 (17:19 -0700)] 
Merge branch 'ds/use-platform-regex-on-macos'

With a bit of header twiddling, use the native regexp library on
macOS instead of the compat/ one.

* ds/use-platform-regex-on-macos:
  grep: fix multibyte regex handling under macOS

2 years agobundle-uri: fix technical doc issues
Derrick Stolee [Fri, 7 Oct 2022 15:50:09 +0000 (15:50 +0000)] 
bundle-uri: fix technical doc issues

Two documentation issues exist in the technical docs for the bundle URI
feature.

First, there is an extraneous "the" across a linebreak, making the
nonsensical phrase "the bundle the list" which should just be "the
bundle list".

Secondly, the asciidoc update treats the string "`have`s" as starting a
"<code>" block, but the second tick is interpreted as an apostrophe
instead of a closing "</code>" tag. This causes entire sentences to be
formatted as code until the next one comes along. Simply adding a space
here does not work properly as the rendered HTML keeps that space.
Instead, restructure the sentence slightly to avoid using a plural,
allowing the HTML to render correctly.

Reported-by: Philip Oakley <philipoakley@iee.email>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agot/lib-httpd: pass LANG and LC_ALL to Apache
René Scharfe [Thu, 6 Oct 2022 15:33:07 +0000 (17:33 +0200)] 
t/lib-httpd: pass LANG and LC_ALL to Apache

t5411 starts a web server with no explicit language setting, so it uses
the system default.  Ten of its tests expect it to return error messages
containing the prefix "fatal: ", emitted by die().  This prefix can be
localized since a1fd2cf8cd (i18n: mark message helpers prefix for
translation, 2022-06-21), however.  As a result these ten tests break
for me on a system with LANG="de_DE.UTF-8" because the web server sends
localized messages with "Schwerwiegend: " instead of "fatal: ".

Fix these tests by passing LANG and LC_ALL to the web server, which are
set to "C" by t/test-lib.sh, to get untranslated messages on both sides.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agogc: simplify maintenance_task_pack_refs()
René Scharfe [Tue, 4 Oct 2022 16:17:39 +0000 (18:17 +0200)] 
gc: simplify maintenance_task_pack_refs()

Pass a constant string array directly to run_command_v_opt() instead of
copying it into a strvec first.  This shortens the code and avoids heap
allocations.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agomergetool.txt: typofix 'overwriten' -> 'overwritten'
Noah Betzen [Tue, 4 Oct 2022 00:55:24 +0000 (00:55 +0000)] 
mergetool.txt: typofix 'overwriten' -> 'overwritten'

Signed-off-by: Noah Betzen <noah@nezteb.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agossh signing: return an error when signature cannot be read
Phillip Wood [Tue, 4 Oct 2022 10:01:34 +0000 (10:01 +0000)] 
ssh signing: return an error when signature cannot be read

If the signature file cannot be read we print an error message but do
not return an error to the caller. In practice it seems unlikely that
the file would be unreadable if the call to ssh-keygen succeeds.

The unlink_or_warn() call is moved to the end of the function so that
we always try and remove the signature file. This isn't strictly
necessary at the moment but it protects us against any extra code
being added between trying to read the signature file and the cleanup
at the end of the function in the future. unlink_or_warn() only prints
a warning if it exists and cannot be removed.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agosequencer: detect author name errors in read_author_script()
Jeff King [Mon, 3 Oct 2022 17:35:02 +0000 (13:35 -0400)] 
sequencer: detect author name errors in read_author_script()

As we parse the author-script file, we check for missing or duplicate
lines for GIT_AUTHOR_NAME, etc. But after reading the whole file, our
final error conditional checks "date_i" twice and "name_i" not at all.
This not only leads to us failing to abort, but we may do an
out-of-bounds read on the string_list array.

The bug goes back to 442c36bd08 (am: improve author-script error
reporting, 2018-10-31), though the code was soon after moved to this
spot by bcd33ec25f (add read_author_script() to libgit, 2018-10-31).
It was presumably just a typo in 442c36bd08.

We'll add test coverage for all the error cases here, though only the
GIT_AUTHOR_NAME ones fail (even in a vanilla build they segfault
consistently, but certainly with SANITIZE=address).

Reported-by: Michael V. Scovetta <michael.scovetta@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agomailinfo -b: fix an out of bounds access
Phillip Wood [Mon, 3 Oct 2022 09:23:30 +0000 (09:23 +0000)] 
mailinfo -b: fix an out of bounds access

To remove bracketed strings containing "PATCH" from the subject line
cleanup_subject() scans the subject for the opening bracket using an
offset from the beginning of the line. It then searches for the
closing bracket with strchr(). To calculate the length of the
bracketed string it unfortunately adds rather than subtracts the
offset from the result of strchr(). This leads to an out of bounds
access in memmem() when looking to see if the brackets contain
"PATCH".

We have tests that trigger this bug that were added in ae52d57f0b
(t5100: add some more mailinfo tests, 2017-05-31). The commit message
mentions that they are marked test_expect_failure as they trigger an
assertion in strbuf_splice(). While it is reassuring that
strbuf_splice() detects the problem and dies in retrospect that should
perhaps have warranted a little more investigation. The bug was
introduced by 17635fc900 (mailinfo: -b option keeps [bracketed]
strings that is not a [PATCH] marker, 2009-07-15). I think the reason
it has survived so long is that '-b' is not a popular option and
without it the offset is always zero.

This was found by the address sanitizer while I was cleaning up the
test_todo idea in [1].

[1] https://lore.kernel.org/git/db558292-2783-3270-4824-43757822a389@gmail.com/

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoGit 2.38 v2.38.0
Junio C Hamano [Sun, 2 Oct 2022 15:43:56 +0000 (08:43 -0700)] 
Git 2.38

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge tag 'l10n-2.38.0-rnd3' of https://github.com/git-l10n/git-po
Junio C Hamano [Sun, 2 Oct 2022 15:24:32 +0000 (08:24 -0700)] 
Merge tag 'l10n-2.38.0-rnd3' of https://github.com/git-l10n/git-po

l10n-2.38.0-rnd3

* tag 'l10n-2.38.0-rnd3' of https://github.com/git-l10n/git-po: (25 commits)
  l10n: zh_TW.po: Git 2.38.0, round 3
  l10n: fr: v2.38.0 round 3
  l10n: Update Catalan translation
  l10n: de.po: update German translation
  l10n: zh_CN: 2.38.0 round 3
  l10n: tr: v2.38.0 3rd round
  l10n: bg.po: Updated Bulgarian translation (5484t)
  l10n: po-id for 2.38 (round 3)
  l10n: es: update translation
  l10n: sv.po: Update Swedish translation (5484t0f0u)
  l10n: Update Catalan translation
  l10n: fr: don't say that merge is "the default strategy"
  l10n: zh_CN v2.38.0 rounds 1 & 2
  l10n: po-id for 2.38 (round 2)
  l10n: tr: v2.38.0 round 2
  l10n: bg.po: Updated Bulgarian translation (5484t)
  l10n: fr: v2.38.0 round 2
  l10n: fr: v2.38 round 1
  l10n: fr: The word 'branche' is only feminine
  l10n: Update Catalan translation
  ...

2 years agol10n: zh_TW.po: Git 2.38.0, round 3
Yi-Jyun Pan [Sat, 1 Oct 2022 11:04:42 +0000 (19:04 +0800)] 
l10n: zh_TW.po: Git 2.38.0, round 3

Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
2 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sat, 1 Oct 2022 02:02:03 +0000 (10:02 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

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

2 years agotest-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK
Ævar Arnfjörð Bjarmason [Wed, 28 Sep 2022 10:01:54 +0000 (12:01 +0200)] 
test-lib: have SANITIZE=leak imply TEST_NO_MALLOC_CHECK

Since 131b94a10a7 (test-lib.sh: Use GLIBC_TUNABLES instead of
MALLOC_CHECK_ on glibc >= 2.34, 2022-03-04) compiling with
SANITIZE=leak has missed reporting some leaks. The old MALLOC_CHECK
method used before glibc 2.34 seems to have been (mostly?) compatible
with it, but after 131b94a10a7 e.g. running:

TEST_NO_MALLOC_CHECK=1 make SANITIZE=leak test T=t6437-submodule-merge.sh

Would report a leak in builtin/commit.c, but this would not:

TEST_NO_MALLOC_CHECK= make SANITIZE=leak test T=t6437-submodule-merge.sh

Since the interaction is clearly breaking the SANITIZE=leak mode,
let's mark them as explicitly incompatible.

A related regression for SANITIZE=address was fixed in
067109a5e7d (tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECK,
2022-04-09).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'l10n-de-2.38-rnd3' of github.com:ralfth/git
Jiang Xin [Thu, 29 Sep 2022 10:54:12 +0000 (18:54 +0800)] 
Merge branch 'l10n-de-2.38-rnd3' of github.com:ralfth/git

* 'l10n-de-2.38-rnd3' of github.com:ralfth/git:
  l10n: de.po: update German translation

2 years agopush: improve grammar of branch.autoSetupMerge advice
Alex Henrie [Wed, 28 Sep 2022 05:58:11 +0000 (23:58 -0600)] 
push: improve grammar of branch.autoSetupMerge advice

"upstream branches" is plural but "name" and "local branch" are
singular. Make them all singular. And because we're talking about a
hypothetical branch that doesn't exist yet, use the future tense.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'fr_2.38_rnd3' of github.com:jnavila/git
Jiang Xin [Thu, 29 Sep 2022 00:00:30 +0000 (08:00 +0800)] 
Merge branch 'fr_2.38_rnd3' of github.com:jnavila/git

* 'fr_2.38_rnd3' of github.com:jnavila/git:
  l10n: fr: v2.38.0 round 3

2 years agoMerge branch 'catalan' of github.com:Softcatala/git-po
Jiang Xin [Wed, 28 Sep 2022 23:59:44 +0000 (07:59 +0800)] 
Merge branch 'catalan' of github.com:Softcatala/git-po

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

2 years agol10n: fr: v2.38.0 round 3
Jean-Noël Avila [Wed, 28 Sep 2022 19:46:22 +0000 (21:46 +0200)] 
l10n: fr: v2.38.0 round 3

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
2 years agoread-cache: avoid misaligned reads in index v4
Victoria Dye [Wed, 28 Sep 2022 17:19:00 +0000 (17:19 +0000)] 
read-cache: avoid misaligned reads in index v4

The process for reading the index into memory from disk is to first read its
contents into a single memory-mapped file buffer (type 'char *'), then
sequentially convert each on-disk index entry into a corresponding incore
'cache_entry'. To access the contents of the on-disk entry for processing, a
moving pointer within the memory-mapped file is cast to type 'struct
ondisk_cache_entry *'.

In index v4, the entries in the on-disk index file are written *without*
aligning their first byte to a 4-byte boundary; entries are a variable
length (depending on the entry name and whether or not extended flags are
used). As a result, casting the 'char *' buffer pointer to 'struct
ondisk_cache_entry *' then accessing its contents in a 'SANITIZE=undefined'
build can trigger the following error:

  read-cache.c:1886:46: runtime error: member access within misaligned
  address <address> for type 'struct ondisk_cache_entry', which requires 4
  byte alignment

Avoid this error by reading fields directly from the 'char *' buffer, using
the 'offsetof' individual fields in 'struct ondisk_cache_entry'.
Additionally, add documentation describing why the new approach avoids the
misaligned address error, as well as advice on how to improve the
implementation in the future.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Victoria Dye <vdye@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agol10n: Update Catalan translation
Jordi Mas [Wed, 28 Sep 2022 17:05:55 +0000 (19:05 +0200)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
2 years agomerge-ort: return early when failing to write a blob
Johannes Schindelin [Wed, 28 Sep 2022 07:29:22 +0000 (07:29 +0000)] 
merge-ort: return early when failing to write a blob

In the previous commit, we fixed a segmentation fault when a tree object
could not be written.

However, before the tree object is written, `merge-ort` wants to write
out a blob object (except in cases where the merge results in a blob
that already exists in the database). And this can fail, too, but we
ignore that write failure so far.

Let's pay close attention and error out early if the blob could not be
written. This reduces the error output of t4301.25 ("merge-ort fails
gracefully in a read-only repository") from:

error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add numbers to database
error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add greeting to database
error: insufficient permission for adding an object to repository database ./objects
fatal: failure to merge

to:

error: insufficient permission for adding an object to repository database ./objects
error: error: Unable to add numbers to database
fatal: failure to merge

This is _not_ just a cosmetic change: Even though one might assume that
the operation would have failed anyway at the point when the new tree
object is written (and the corresponding tree object _will_ be new if it
contains a blob that is new), but that is not so: As pointed out by
Elijah Newren, when Git has previously been allowed to add loose objects
via `sudo` calls, it is very possible that the blob object cannot be
written (because the corresponding `.git/objects/??/` directory may be
owned by `root`) but the tree object can be written (because the
corresponding objects directory is owned by the current user). This
would result in a corrupt repository because it is missing the blob
object, and with this here patch we prevent that.

Note: This patch adjusts two variable declarations from `unsigned` to
`int` because their purpose is to hold the return value of
`handle_content_merge()`, which is of type `int`. The existing users of
those variables are only interested whether that variable is zero or
non-zero, therefore this type change does not affect the existing code.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agomerge-ort: fix segmentation fault in read-only repositories
Johannes Schindelin [Wed, 28 Sep 2022 07:29:21 +0000 (07:29 +0000)] 
merge-ort: fix segmentation fault in read-only repositories

If the blob/tree objects cannot be written, we really need the merge
operations to fail, and not to continue (and then try to access the tree
object which is however still set to `NULL`).

Let's stop ignoring the return value of `write_object_file()` and
`write_tree()` and set `clean = -1` in the error case.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agol10n: de.po: update German translation
Ralf Thielow [Wed, 28 Sep 2022 15:15:53 +0000 (17:15 +0200)] 
l10n: de.po: update German translation

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
2 years agol10n: zh_CN: 2.38.0 round 3
Fangyi Zhou [Wed, 28 Sep 2022 14:50:49 +0000 (15:50 +0100)] 
l10n: zh_CN: 2.38.0 round 3

Signed-off-by: Fangyi Zhou <me@fangyi.io>
2 years agoMerge branch 'turkish' of github.com:bitigchi/git-po
Jiang Xin [Wed, 28 Sep 2022 12:54:29 +0000 (20:54 +0800)] 
Merge branch 'turkish' of github.com:bitigchi/git-po

* 'turkish' of github.com:bitigchi/git-po:
  l10n: tr: v2.38.0 3rd round

2 years agoMerge branch 'master' of github.com:alshopov/git-po
Jiang Xin [Wed, 28 Sep 2022 12:52:34 +0000 (20:52 +0800)] 
Merge branch 'master' of github.com:alshopov/git-po

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

2 years agol10n: tr: v2.38.0 3rd round
Emir SARI [Wed, 28 Sep 2022 09:32:13 +0000 (12:32 +0300)] 
l10n: tr: v2.38.0 3rd round

Signed-off-by: Emir SARI <emir_sari@icloud.com>
2 years agol10n: bg.po: Updated Bulgarian translation (5484t)
Alexander Shopov [Wed, 28 Sep 2022 09:00:59 +0000 (11:00 +0200)] 
l10n: bg.po: Updated Bulgarian translation (5484t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2 years agol10n: po-id for 2.38 (round 3)
Bagas Sanjaya [Sun, 25 Sep 2022 07:53:53 +0000 (14:53 +0700)] 
l10n: po-id for 2.38 (round 3)

Update following components:

  * sequencer.c
  * wt-status.c

Translate following new components:

  * compat/compiler.h
  * compat/disk.h
  * compat/fsmonitor/fsm-health-win32.c
  * compat/fsmonitor/fsm-listen-darwin.c
  * compat/fsmonitor/fsm-listen-win32.c
  * compat/fsmonitor/fsm-settings-win32.c
  * compat/mingw.c
  * compat/obstack.c
  * compat/regex/regcomp.c
  * compat/simple-ipc/ipc-unix-socket.c
  * compat/simple-ipc/ipc-win32.c
  * compat/terminal.c
  * convert.c
  * entry.c
  * environment.c
  * exec-cmd.c
  * git-merge-octopus.sh
  * git-sh-setup.sh
  * list-objects-filter-options.c
  * list-objects-filter-options.h
  * list-objects.c
  * lockfile.c
  * ls-refs.c
  * mailinfo.c
  * name-hash.c
  * notes-merge.c
  * notes-utils.c
  * pkt-line.c
  * preload-index.c
  * pretty.c
  * promisor-remote.c
  * protocol-caps.c
  * read-cache.c
  * scalar.c
  * transport-helper.c
  * transport.c
  * tree-walk.c
  * urlmatch.c
  * walker.c
  * wrapper.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
2 years agol10n: es: update translation
Alex Henrie [Wed, 28 Sep 2022 04:56:55 +0000 (22:56 -0600)] 
l10n: es: update translation

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
2 years agoMerge branch 'main' of github.com:git/git
Jiang Xin [Wed, 28 Sep 2022 00:03:38 +0000 (08:03 +0800)] 
Merge branch 'main' of github.com:git/git

* 'main' of github.com:git/git:
  Git 2.38-rc2
  pack-bitmap: remove trace2 region from hot path

2 years agoGit 2.38-rc2 v2.38.0-rc2
Junio C Hamano [Tue, 27 Sep 2022 18:25:52 +0000 (11:25 -0700)] 
Git 2.38-rc2

We have small updates since -rc1 but none of them is about a new
thing and there is no updates to the release notes.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agostring-list: document iterator behavior on NULL input
Derrick Stolee [Tue, 27 Sep 2022 13:57:01 +0000 (13:57 +0000)] 
string-list: document iterator behavior on NULL input

The for_each_string_list_item() macro takes a string_list and
automatically constructs a for loop to iterate over its contents. This
macro will segfault if the list is non-NULL.

We cannot change the macro to be careful around NULL values because
there are many callers that use the address of a local variable, which
will never be NULL and will cause compile errors with -Werror=address.

For now, leave a documentation comment to try to avoid mistakes in the
future where a caller does not check for a NULL list.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agogc: replace config subprocesses with API calls
Derrick Stolee [Tue, 27 Sep 2022 13:57:00 +0000 (13:57 +0000)] 
gc: replace config subprocesses with API calls

The 'git maintenance [un]register' commands set or unset the multi-
valued maintenance.repo config key with the absolute path of the current
repository. These are set in the global config file.

Instead of calling a subcommand and creating a new process, create the
proper API calls to git_config_set_multivar_in_file_gently(). It
requires loading the filename for the global config file (and erroring
out if now $HOME value is set). We also need to be careful about using
CONFIG_REGEX_NONE when adding the value and using
CONFIG_FLAGS_FIXED_VALUE when removing the value. In both cases, we
check that the value already exists (this check already existed for
'unregister').

Also, remove the transparent translation of the error code from the
config API to the exit code of 'git maintenance'. Instead, use die() to
recover from failures at that level. In the case of 'unregister
--force', allow the CONFIG_NOTHING_SET error code to be a success. This
allows a possible race where another process removes the config value.
The end result is that the config value is not set anymore, so we can
treat this as a success.

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoscalar: make 'unregister' idempotent
Derrick Stolee [Tue, 27 Sep 2022 13:56:59 +0000 (13:56 +0000)] 
scalar: make 'unregister' idempotent

The 'scalar unregister' command removes a repository from the list of
registered Scalar repositories and removes it from the list of
repositories registered for background maintenance. If the repository
was not already registered for background maintenance, then the command
fails, even if the repository was still registered as a Scalar
repository.

After using 'scalar clone' or 'scalar register', the repository would be
enrolled in background maintenance since those commands run 'git
maintenance start'. If the user runs 'git maintenance unregister' on
that repository, then it is still in the list of repositories which get
new config updates from 'scalar reconfigure'. The 'scalar unregister'
command would fail since 'git maintenance unregister' would fail.

Further, the add_or_remove_enlistment() method in scalar.c already has
this idempotent nature built in as an expectation since it returns zero
when the scalar.repo list already has the proper containment of the
repository.

The previous change added the 'git maintenance unregister --force'
option, so use it within 'scalar unregister' to make it idempotent.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agomaintenance: add 'unregister --force'
Derrick Stolee [Tue, 27 Sep 2022 13:56:58 +0000 (13:56 +0000)] 
maintenance: add 'unregister --force'

The 'git maintenance unregister' subcommand has a step that removes the
current repository from the multi-valued maitenance.repo config key.
This fails if the repository is not listed in that key. This makes
running 'git maintenance unregister' twice result in a failure in the
second instance.

This failure exit code is helpful, but its message is not. Add a new
die() message that explicitly calls out the failure due to the
repository not being registered.

In some cases, users may want to run 'git maintenance unregister' just
to make sure that background jobs will not start on this repository, but
they do not want to check to see if it is registered first. Add a new
'--force' option that will siltently succeed if the repository is not
already registered.

Also add an extra test of 'git maintenance unregister' at a point where
there are no registered repositories. This should fail without --force.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'ds/bitmap-lookup-remove-tracing'
Junio C Hamano [Tue, 27 Sep 2022 04:46:51 +0000 (21:46 -0700)] 
Merge branch 'ds/bitmap-lookup-remove-tracing'

Perf-fix.

* ds/bitmap-lookup-remove-tracing:
  pack-bitmap: remove trace2 region from hot path

2 years agopack-bitmap: remove trace2 region from hot path
Derrick Stolee [Mon, 26 Sep 2022 13:17:57 +0000 (13:17 +0000)] 
pack-bitmap: remove trace2 region from hot path

The trace2 region around the call to lazy_bitmap_for_commit() in
bitmap_for_commit() was added in 28cd730680d (pack-bitmap: prepare to
read lookup table extension, 2022-08-14). While adding trace2 regions is
typically helpful for tracking performance, this method is called
possibly thousands of times as a commit walk explores commit history
looking for a matching bitmap. When trace2 output is enabled, this
region is emitted many times and performance is throttled by that
output.

For now, remove these regions entirely.

This is a critical path, and it would be valuable to measure that the
time spent in bitmap_for_commit() does not increase when using the
commit lookup table. The best way to do that would be to use a mechanism
that sums the time spent in a region and reports a single value at the
end of the process. This technique was introduced but not merged by [1]
so maybe this example presents some justification to revisit that
approach.

[1] https://lore.kernel.org/git/pull.1099.v2.git.1640720202.gitgitgadget@gmail.com/

To help with the 'git blame' output in this region, add a comment that
warns against adding a trace2 region. Delete a test from t5310 that used
that trace output to check that this lookup optimization was activated.
To create this kind of test again in the future, the stopwatch traces
mentioned earlier could be used as a signal that we activated this code
path.

Helpedy-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoref-filter.c: fix a leak in get_head_description
Rubén Justo [Sat, 24 Sep 2022 22:53:18 +0000 (00:53 +0200)] 
ref-filter.c: fix a leak in get_head_description

In 2708ce62d2 (branch: sort detached HEAD based on a flag, 2021-01-07) a
call to wt_status_state_free_buffers, responsible of freeing the
resources that could be allocated in the local struct wt_status_state
state, was eliminated.

The call to wt_status_state_free_buffers was introduced in 962dd7ebc3
(wt-status: introduce wt_status_state_free_buffers(), 2020-09-27).  This
commit brings back that call in get_head_description.

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Reviewed-by: Martin Ågren <martin.agren@gmail.com>
Acked-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agosequencer: avoid dropping fixup commit that targets self via commit-ish
Johannes Altmanninger [Sat, 24 Sep 2022 22:29:04 +0000 (17:29 -0500)] 
sequencer: avoid dropping fixup commit that targets self via commit-ish

Commit 68d5d03bc4 (rebase: teach --autosquash to match on sha1 in
addition to message, 2010-11-04) taught autosquash to recognize
subjects like "fixup! 7a235b" where 7a235b is an OID-prefix. It
actually did more than advertised: 7a235b can be an arbitrary
commit-ish (as long as it's not trailed by spaces).

Accidental(?) use of this secret feature revealed a bug where we
would silently drop a fixup commit. The bug can also be triggered
when using an OID-prefix but that's unlikely in practice.

Let the commit with subject "fixup! main" be the tip of the "main"
branch. When computing the fixup target for this commit, we find
the commit itself. This is wrong because, by definition, a fixup
target must be an earlier commit in the todo list. We wrongly find
the current commit because we added it to the todo list prematurely.
Avoid these fixup-cycles by only adding the current commit to the
todo list after we have finished looking for the fixup target.

Reported-by: Erik Cervin Edin <erik@cervined.in>
Signed-off-by: Johannes Altmanninger <aclopte@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agol10n: sv.po: Update Swedish translation (5484t0f0u)
Peter Krefting [Mon, 26 Sep 2022 05:36:23 +0000 (06:36 +0100)] 
l10n: sv.po: Update Swedish translation (5484t0f0u)

Also fix a couple of typos.

Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2 years agol10n: Update Catalan translation
Jordi Mas [Sun, 25 Sep 2022 19:04:22 +0000 (21:04 +0200)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
2 years agoMerge branch 'main' of github.com:git/git
Jiang Xin [Sat, 24 Sep 2022 13:51:06 +0000 (21:51 +0800)] 
Merge branch 'main' of github.com:git/git

* 'main' of github.com:git/git:
  cmd-list.perl: fix identifying man sections
  pack-bitmap: improve grammar of "xor chain" error message

2 years agoMerge branch 'fr_quickfix' of github.com:jnavila/git
Jiang Xin [Sat, 24 Sep 2022 13:12:37 +0000 (21:12 +0800)] 
Merge branch 'fr_quickfix' of github.com:jnavila/git

* 'fr_quickfix' of github.com:jnavila/git:
  l10n: fr: don't say that merge is "the default strategy"

2 years agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sat, 24 Sep 2022 13:09:22 +0000 (21:09 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

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

2 years agoMerge branch 'turkish' of github.com:bitigchi/git-po
Jiang Xin [Sat, 24 Sep 2022 13:08:11 +0000 (21:08 +0800)] 
Merge branch 'turkish' of github.com:bitigchi/git-po

* 'turkish' of github.com:bitigchi/git-po:
  l10n: tr: v2.38.0 round 2

2 years agol10n: fr: don't say that merge is "the default strategy"
Alex Henrie [Mon, 27 Jun 2022 04:17:24 +0000 (22:17 -0600)] 
l10n: fr: don't say that merge is "the default strategy"

The text of this message was changed in commit
71076d0edde43a7672a9a0f555753ff078602a64 to avoid making any
suggestion about which strategy is better for the situation at hand.
Update the Franch translation to match.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
2 years agoMerge branch 'ac/bitmap-lookup-table'
Junio C Hamano [Fri, 23 Sep 2022 18:07:49 +0000 (11:07 -0700)] 
Merge branch 'ac/bitmap-lookup-table'

Grammofix.

* ac/bitmap-lookup-table:
  pack-bitmap: improve grammar of "xor chain" error message

2 years agoMerge branch 'ma/scalar-to-main-fix'
Junio C Hamano [Fri, 23 Sep 2022 18:07:48 +0000 (11:07 -0700)] 
Merge branch 'ma/scalar-to-main-fix'

Fix manpage generation.

* ma/scalar-to-main-fix:
  cmd-list.perl: fix identifying man sections

2 years agocmd-list.perl: fix identifying man sections
Martin Ågren [Fri, 23 Sep 2022 08:07:33 +0000 (10:07 +0200)] 
cmd-list.perl: fix identifying man sections

We attribute each documentation text file to a man section by finding a
line in the file that looks like "gitfoo(<digit>)". Commit cc75e556a9
("scalar: add to 'git help -a' command list", 2022-09-02) updated this
logic to look not only for "gitfoo" but also "scalarfoo". In doing so,
it forgot to account for the fact that after the updated regex has found
a match, the man section is no longer to be found in `$1` but now lives
in `$2`.

This makes our git(1) manpage look as follows:

  Main porcelain commands
       git-add(git)
           Add file contents to the index.

  [...]

       gitk(git)
           The Git repository browser.

       scalar(scalar)
           A tool for managing large Git repositories.

Restore the man sections by not capturing the (git|scalar) part of the
match into `$1`.

As noted by Ævar [1], we could even match any "foo" rather than just
"gitfoo" and "scalarfoo", but that's a larger change. For now, just fix
the regression in cc75e556a9.

[1] https://lore.kernel.org/git/220923.86wn9u4joo.gmgdl@evledraar.gmail.com/#t

Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agobuiltin/grep.c: integrate with sparse index
Shaoxuan Yuan [Fri, 23 Sep 2022 04:18:42 +0000 (21:18 -0700)] 
builtin/grep.c: integrate with sparse index

Turn on sparse index and remove ensure_full_index().

Before this patch, `git-grep` utilizes the ensure_full_index() method to
expand the index and search all the entries. Because this method
requires walking all the trees and constructing the index, it is the
slow part within the whole command.

To achieve better performance, this patch uses grep_tree() to search the
sparse directory entries and get rid of the ensure_full_index() method.

Why grep_tree() is a better choice over ensure_full_index()?

1) grep_tree() is as correct as ensure_full_index(). grep_tree() looks
   into every sparse-directory entry (represented by a tree) recursively
   when looping over the index, and the result of doing so matches the
   result of expanding the index.

2) grep_tree() utilizes pathspecs to limit the scope of searching.
   ensure_full_index() always expands the index, which means it will
   always walk all the trees and blobs in the repo without caring if
   the user only wants a subset of the content, i.e. using a pathspec.
   On the other hand, grep_tree() will only search the contents that
   match the pathspec, and thus possibly walking fewer trees.

3) grep_tree() does not construct and copy back a new index, while
   ensure_full_index() does. This also saves some time.

----------------
Performance test

- Summary:

p2000 tests demonstrate a ~71% execution time reduction for
`git grep --cached bogus -- "f2/f1/f1/*"` using tree-walking logic.
However, notice that this result varies depending on the pathspec
given. See below "Command used for testing" for more details.

Test                              HEAD~   HEAD
-------------------------------------------------------
2000.78: git grep ... (full-v3)   0.35    0.39 (≈)
2000.79: git grep ... (full-v4)   0.36    0.30 (≈)
2000.80: git grep ... (sparse-v3) 0.88    0.23 (-73.8%)
2000.81: git grep ... (sparse-v4) 0.83    0.26 (-68.6%)

- Command used for testing:

git grep --cached bogus -- "f2/f1/f1/*"

The reason for specifying a pathspec is that, if we don't specify a
pathspec, then grep_tree() will walk all the trees and blobs to find the
pattern, and the time consumed doing so is not too different from using
the original ensure_full_index() method, which also spends most of the
time walking trees. However, when a pathspec is specified, this latest
logic will only walk the area of trees enclosed by the pathspec, and the
time consumed is reasonably a lot less.

Generally speaking, because the performance gain is acheived by walking
less trees, which are specified by the pathspec, the HEAD time v.s.
HEAD~ time in sparse-v[3|4], should be proportional to
"pathspec enclosed area" v.s. "all area", respectively. Namely, the
wider the <pathspec> is encompassing, the less the performance
difference between HEAD~ and HEAD, and vice versa.

That is, if we don't specify a pathspec, the performance difference [1]
is indistinguishable: both methods walk all the trees and take generally
same amount of time (even with the index construction time included for
ensure_full_index()).

[1] Performance test result without pathspec (hence walking all trees):

Command used:

git grep --cached bogus

Test                                HEAD~  HEAD
---------------------------------------------------
2000.78: git grep ... (full-v3)     6.17   5.19 (≈)
2000.79: git grep ... (full-v4)     6.19   5.46 (≈)
2000.80: git grep ... (sparse-v3)   6.57   6.44 (≈)
2000.81: git grep ... (sparse-v4)   6.65   6.28 (≈)

--------------------------
NEEDSWORK about submodules

There are a few NEEDSWORKs that belong to improvements beyond this
topic. See the NEEDSWORK in builtin/grep.c::grep_submodule() for
more context. The other two NEEDSWORKs in t1092 are also relative.

Suggested-by: Derrick Stolee <derrickstolee@github.com>
Helped-by: Derrick Stolee <derrickstolee@github.com>
Helped-by: Victoria Dye <vdye@github.com>
Helped-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Shaoxuan Yuan <shaoxuan.yuan02@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agopack-bitmap: improve grammar of "xor chain" error message
Alex Henrie [Thu, 22 Sep 2022 02:51:58 +0000 (20:51 -0600)] 
pack-bitmap: improve grammar of "xor chain" error message

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agocheck-non-portable-shell: detect obsolescent egrep/fgrep
Eric Sunshine [Thu, 22 Sep 2022 00:18:25 +0000 (00:18 +0000)] 
check-non-portable-shell: detect obsolescent egrep/fgrep

GNU grep deprecated `egrep` and `fgrep` with release 2.5.3 in 2007.
As of release 3.8 in 2022, those commands warn[1] that they are
obsolescent. Now that all the Git test scripts have been scrubbed of
uses of `egrep` and `fgrep`, make `check-non-portable-shell` complain
about them to prevent new instances from creeping back into the project.

[1]: https://lists.gnu.org/archive/html/info-gnu/2022-09/msg00001.html

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 years agoMerge branch 'dd/retire-efgrep' into es/retire-efgrep
Junio C Hamano [Fri, 23 Sep 2022 15:31:04 +0000 (08:31 -0700)] 
Merge branch 'dd/retire-efgrep' into es/retire-efgrep

* dd/retire-efgrep:
  t: convert fgrep usage to "grep -F"
  t: convert egrep usage to "grep -E"
  t: remove \{m,n\} from BRE grep usage
  CodingGuidelines: allow grep -E

2 years agol10n: zh_CN v2.38.0 rounds 1 & 2
Fangyi Zhou [Fri, 16 Sep 2022 10:31:26 +0000 (11:31 +0100)] 
l10n: zh_CN v2.38.0 rounds 1 & 2

Reviewed-by: Jiang Xin <worldhello.net@gmail.com>
Reviewed-by: Li Linchao <lilinchao@oschina.cn>
Reviewed-by: 依云 <lilydjwg@gmail.com>
Signed-off-by: Fangyi Zhou <me@fangyi.io>
2 years agol10n: po-id for 2.38 (round 2)
Bagas Sanjaya [Thu, 22 Sep 2022 07:54:56 +0000 (14:54 +0700)] 
l10n: po-id for 2.38 (round 2)

Update following components:

  * branch.c
  * builtin/log.c
  * builtin/rebase.c
  * builtin/remote.c
  * builtin/reset.c
  * builtin/rev-list.c
  * builtin/rev-parse.c
  * builtin/revert.c
  * builtin/sparse-checkout.c
  * builtin/submodule--helper.c
  * command-list.h
  * help.c
  * merge.c

Translate following new components:

  * builtin/check-attr.c
  * builtin/check-ignore.c
  * builtin/check-mailmap.c
  * builtin/column.c
  * builtin/credential-cache--daemon.c
  * builtin/credential-cache.c
  * builtin/credential-store.c
  * builtin/diagnose.c
  * builtin/env--helper.c
  * builtin/fsmonitor--daemon.c
  * builtin/interpret-trailers.c
  * builtin/mailinfo.c
  * builtin/mailsplit.c
  * builtin/mktag.c
  * builtin/mktree.c
  * builtin/pack-redundant.c
  * builtin/replace.c
  * builtin/rerere.c
  * builtin/stripspace.c
  * bulk-checkin.c
  * commit.c
  * credential.c
  * fsmonitor-ipc.c
  * fsmonitor-settings.c
  * http-fetch.c
  * http.c

Also remove unused strings.

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
2 years agol10n: tr: v2.38.0 round 2
Emir SARI [Thu, 22 Sep 2022 13:40:33 +0000 (16:40 +0300)] 
l10n: tr: v2.38.0 round 2

Signed-off-by: Emir SARI <emir_sari@icloud.com>
2 years agol10n: bg.po: Updated Bulgarian translation (5484t)
Alexander Shopov [Fri, 23 Sep 2022 09:18:57 +0000 (11:18 +0200)] 
l10n: bg.po: Updated Bulgarian translation (5484t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2 years agoMerge branch 'fr_v2.38_rnd2' of github.com:jnavila/git
Jiang Xin [Fri, 23 Sep 2022 09:06:12 +0000 (17:06 +0800)] 
Merge branch 'fr_v2.38_rnd2' of github.com:jnavila/git

* 'fr_v2.38_rnd2' of github.com:jnavila/git:
  l10n: fr: v2.38.0 round 2
  l10n: fr: v2.38 round 1
  l10n: fr: The word 'branche' is only feminine

2 years agoMerge branch 'catalan' of github.com:Softcatala/git-po
Jiang Xin [Fri, 23 Sep 2022 08:58:14 +0000 (16:58 +0800)] 
Merge branch 'catalan' of github.com:Softcatala/git-po

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

2 years agoMerge branch 'l10n-de-2.38' of github.com:ralfth/git
Jiang Xin [Fri, 23 Sep 2022 08:51:23 +0000 (16:51 +0800)] 
Merge branch 'l10n-de-2.38' of github.com:ralfth/git

* 'l10n-de-2.38' of github.com:ralfth/git:
  l10n: de.po: update German translation

2 years agoMerge branch 'main' of github.com:git/git
Jiang Xin [Fri, 23 Sep 2022 08:50:32 +0000 (16:50 +0800)] 
Merge branch 'main' of github.com:git/git

* 'main' of github.com:git/git:
  list-objects-filter: initialize sub-filter structs
  Git 2.38-rc1
  Final batch before -rc1
  builtin/diagnose.c: don't translate the two mode values
  t/Makefile: remove 'test-results' on 'make clean'
  gc: don't translate literal commands
  Documentation: clean up various typos in technical docs
  Documentation: clean up a few misspelled word typos
  version: fix builtin linking & documentation
  diagnose: add to command-list.txt
  Documentation: add ReviewingGuidelines
  commit-graph: Fix missing closedir in expire_commit_graphs
  diagnose.c: refactor to safely use 'd_type'
  help: fix doubled words in explanation for developer interfaces
  api docs: link to html version of api-trace2
  docs: fix a few recently broken links
  reftable: use a pointer for pq_entry param