Autogenerated HTML docs for v2.49.0-366-gc152a
diff --git a/RelNotes/2.50.0.adoc b/RelNotes/2.50.0.adoc
index 1023e61..38df46f 100644
--- a/RelNotes/2.50.0.adoc
+++ b/RelNotes/2.50.0.adoc
@@ -28,6 +28,26 @@
this message has been turned into an advice message that can be
turned off.
+ * "git rev-list" learns machine-parsable output format that delimits
+ each field with NUL.
+
+ * "git maintenance" learns a new task to expire reflog entries.
+
+ * Auth-related (and unrelated) error handling in send-email has been
+ made more robust.
+
+ * Updating multiple references have only been possible in all-or-none
+ fashion with transactions, but it can be more efficient to batch
+ multiple updates even when some of them are allowed to fail in a
+ best-effort manner. A new "best effort batches of updates" mode
+ has been introduced.
+
+ * "git help --build-options" reports SHA-1 and SHA-256 backends used
+ in the build.
+
+ * "git cat-file --batch" and friends learned to allow "--filter=" to
+ omit certain objects, just like the transport layer does.
+
Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
@@ -71,6 +91,19 @@
* The object layer has been updated to take an explicit repository
instance as a parameter in more code paths.
+ * Some warnings from "-Wsign-compare" for builtin/rm.c have been
+ squelched.
+
+ * A few traditional unit tests have been rewritten to use the clar
+ framework.
+
+ * Some warnings from "-Wsign-compare" for pathspec.c have been
+ squelched.
+
+ * "make test" used to have a hard dependency on (basic) Perl; tests
+ have been rewritten help environment with NO_PERL test the build as
+ much as possible.
+
Fixes since v2.49
-----------------
@@ -134,6 +167,21 @@
which has been corrected..
(merge d3b5832381 pw/custom-conflict-marker-size-for-merge-related-docs later to maint).
+ * Squelch false-positive from sparse.
+ (merge da87b58014 dd/sparse-glibc-workaround later to maint).
+
+ * Adjust to the deprecation of use of Ubuntu 20.04 GitHub Actions CI.
+ (merge 832d9f6d0b js/ci-github-update-ubuntu later to maint).
+
+ * Work around CI breakage due to fedora base image getting updated.
+ (merge 8a471a663b js/ci-fedora-gawk later to maint).
+
+ * A ref transaction corner case fix.
+ (merge b9fadeead7 jt/ref-transaction-abort-fix later to maint).
+
+ * Random build fixes.
+ (merge 85e1d6819f ps/misc-build-fixes later to maint).
+
* Other code cleanup, docfix, build fix, etc.
(merge 227c4f33a0 ja/doc-block-delimiter-markup-fix later to maint).
(merge 2bfd3b3685 ab/decorate-code-cleanup later to maint).
diff --git a/git-cat-file.adoc b/git-cat-file.adoc
index 30359f5..fc4b92f 100644
--- a/git-cat-file.adoc
+++ b/git-cat-file.adoc
@@ -81,6 +81,25 @@
end-of-line conversion, etc). In this case, `<object>` has to be of
the form `<tree-ish>:<path>`, or `:<path>`.
+--filter=<filter-spec>::
+--no-filter::
+ Omit objects from the list of printed objects. This can only be used in
+ combination with one of the batched modes. Excluded objects that have
+ been explicitly requested via any of the batch modes that read objects
+ via standard input (`--batch`, `--batch-check`) will be reported as
+ "filtered". Excluded objects in `--batch-all-objects` mode will not be
+ printed at all. The '<filter-spec>' may be one of the following:
++
+The form '--filter=blob:none' omits all blobs.
++
+The form '--filter=blob:limit=<n>[kmg]' omits blobs of size at least n
+bytes or units. n may be zero. The suffixes k, m, and g can be used to name
+units in KiB, MiB, or GiB. For example, 'blob:limit=1k' is the same as
+'blob:limit=1024'.
++
+The form '--filter=object:type=(tag|commit|tree|blob)' omits all objects which
+are not of the requested type.
+
--path=<path>::
For use with `--textconv` or `--filters`, to allow specifying an object
name and a path separately, e.g. when it is difficult to figure out
@@ -340,6 +359,13 @@
<object> SP missing LF
------------
+If a name is specified on stdin that is filtered out via `--filter=`,
+then `cat-file` will ignore any custom format and print:
+
+------------
+<object> SP excluded LF
+------------
+
If a name is specified that might refer to more than one object (an ambiguous short sha), then `cat-file` will ignore any custom format and print:
------------
diff --git a/git-cat-file.html b/git-cat-file.html
index 2f7d4a9..582dd4e 100644
--- a/git-cat-file.html
+++ b/git-cat-file.html
@@ -546,6 +546,29 @@
end-of-line conversion, etc). In this case, <em><object></em> has to be of
the form <em><tree-ish></em><code>:</code><em><path></em>, or <code>:</code><em><path></em>.</p>
</dd>
+<dt class="hdlist1">--filter=<filter-spec></dt>
+<dt class="hdlist1">--no-filter</dt>
+<dd>
+<p>Omit objects from the list of printed objects. This can only be used in
+combination with one of the batched modes. Excluded objects that have
+been explicitly requested via any of the batch modes that read objects
+via standard input (<code>--batch</code>, <code>--batch-check</code>) will be reported as
+"filtered". Excluded objects in <code>--batch-all-objects</code> mode will not be
+printed at all. The <em><filter-spec></em> may be one of the following:</p>
+<div class="paragraph">
+<p>The form <em>--filter=blob:none</em> omits all blobs.</p>
+</div>
+<div class="paragraph">
+<p>The form <em>--filter=blob:limit=<n>[kmg]</em> omits blobs of size at least n
+bytes or units. n may be zero. The suffixes k, m, and g can be used to name
+units in KiB, MiB, or GiB. For example, <em>blob:limit=1k</em> is the same as
+<em>blob:limit=1024</em>.</p>
+</div>
+<div class="paragraph">
+<p>The form <em>--filter=object:type=(tag|commit|tree|blob)</em> omits all objects which
+are not of the requested type.</p>
+</div>
+</dd>
<dt class="hdlist1">--path=<path></dt>
<dd>
<p>For use with <code>--textconv</code> or <code>--filters</code>, to allow specifying an object
@@ -912,6 +935,15 @@
</div>
</div>
<div class="paragraph">
+<p>If a name is specified on stdin that is filtered out via <code>--filter=</code>,
+then <code>cat-file</code> will ignore any custom format and print:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre><object> SP excluded LF</pre>
+</div>
+</div>
+<div class="paragraph">
<p>If a name is specified that might refer to more than one object (an ambiguous short sha), then <code>cat-file</code> will ignore any custom format and print:</p>
</div>
<div class="listingblock">
@@ -1014,7 +1046,7 @@
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-02-14 21:38:14 -0800
+Last updated 2025-04-16 14:42:40 -0700
</div>
</div>
</body>
diff --git a/git-config.html b/git-config.html
index 39dc4e2..72094a4 100644
--- a/git-config.html
+++ b/git-config.html
@@ -6662,6 +6662,16 @@
number of pack-files not in the multi-pack-index is at least the value
of <code>maintenance.incremental-repack.auto</code>. The default value is 10.</p>
</dd>
+<dt class="hdlist1">maintenance.reflog-expire.auto</dt>
+<dd>
+<p>This integer config option controls how often the <code>reflog-expire</code> task
+should be run as part of <code>git</code> <code>maintenance</code> <code>run</code> <code>--auto</code>. If zero, then
+the <code>reflog-expire</code> task will not run with the <code>--auto</code> option. A
+negative value will force the task to run every time. Otherwise, a
+positive value implies the command should run when the number of
+expired reflog entries in the "HEAD" reflog is at least the value of
+<code>maintenance.loose-objects.auto</code>. The default value is 100.</p>
+</dd>
<dt class="hdlist1">man.viewer</dt>
<dd>
<p>Specify the programs that may be used to display help in the
diff --git a/git-maintenance.adoc b/git-maintenance.adoc
index c90b370..3a1e2a6 100644
--- a/git-maintenance.adoc
+++ b/git-maintenance.adoc
@@ -162,6 +162,10 @@
need to iterate across many references. See linkgit:git-pack-refs[1]
for more information.
+reflog-expire::
+ The `reflog-expire` task deletes any entries in the reflog older than the
+ expiry threshold. See linkgit:git-reflog[1] for more information.
+
OPTIONS
-------
--auto::
diff --git a/git-maintenance.html b/git-maintenance.html
index d0b8d38..4674a47 100644
--- a/git-maintenance.html
+++ b/git-maintenance.html
@@ -653,6 +653,11 @@
need to iterate across many references. See <a href="git-pack-refs.html">git-pack-refs(1)</a>
for more information.</p>
</dd>
+<dt class="hdlist1">reflog-expire</dt>
+<dd>
+<p>The <code>reflog-expire</code> task deletes any entries in the reflog older than the
+expiry threshold. See <a href="git-reflog.html">git-reflog(1)</a> for more information.</p>
+</dd>
</dl>
</div>
</div>
@@ -1060,6 +1065,16 @@
number of pack-files not in the multi-pack-index is at least the value
of <code>maintenance.incremental-repack.auto</code>. The default value is 10.</p>
</dd>
+<dt class="hdlist1">maintenance.reflog-expire.auto</dt>
+<dd>
+<p>This integer config option controls how often the <code>reflog-expire</code> task
+should be run as part of <code>git</code> <code>maintenance</code> <code>run</code> <code>--auto</code>. If zero, then
+the <code>reflog-expire</code> task will not run with the <code>--auto</code> option. A
+negative value will force the task to run every time. Otherwise, a
+positive value implies the command should run when the number of
+expired reflog entries in the "HEAD" reflog is at least the value of
+<code>maintenance.loose-objects.auto</code>. The default value is 100.</p>
+</dd>
</dl>
</div>
</div>
@@ -1075,7 +1090,7 @@
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-04-15 14:25:08 -0700
+Last updated 2025-04-16 14:42:40 -0700
</div>
</div>
</body>
diff --git a/git-rev-list.html b/git-rev-list.html
index 1b56a3c..eae633c 100644
--- a/git-rev-list.html
+++ b/git-rev-list.html
@@ -926,6 +926,35 @@
<p>Show progress reports on stderr as objects are considered. The
<em><header></em> text will be printed with each progress update.</p>
</dd>
+<dt class="hdlist1">-z</dt>
+<dd>
+<p>Instead of being newline-delimited, each outputted object and its
+accompanying metadata is delimited using NUL bytes. Output is printed
+in the following form:</p>
+<div class="listingblock">
+<div class="content">
+<pre><OID> NUL [<token>=<value> NUL]...</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Additional object metadata, such as object paths or boundary objects, is
+printed using the <em><token></em><code>=</code><em><value></em> form. Token values are printed as-is
+without any encoding/truncation. An OID entry never contains a <em>=</em> character
+and thus is used to signal the start of a new object record. Examples:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre><OID> NUL
+<OID> NUL path=<path> NUL
+<OID> NUL boundary=yes NUL
+<OID> NUL missing=yes NUL [<token>=<value> NUL]...</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This mode is only compatible with the <code>--objects</code>, <code>--boundary</code>, and
+<code>--missing</code> output options.</p>
+</div>
+</dd>
</dl>
</div>
</div>
@@ -2989,7 +3018,7 @@
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-02-15 14:38:14 +0900
+Last updated 2025-02-14 21:38:14 -0800
</div>
</div>
</body>
diff --git a/git-update-ref.adoc b/git-update-ref.adoc
index 9e6935d..9310ce9 100644
--- a/git-update-ref.adoc
+++ b/git-update-ref.adoc
@@ -7,8 +7,10 @@
SYNOPSIS
--------
-[verse]
-'git update-ref' [-m <reason>] [--no-deref] (-d <ref> [<old-oid>] | [--create-reflog] <ref> <new-oid> [<old-oid>] | --stdin [-z])
+[synopsis]
+git update-ref [-m <reason>] [--no-deref] -d <ref> [<old-oid>]
+git update-ref [-m <reason>] [--no-deref] [--create-reflog] <ref> <new-oid> [<old-oid>]
+git update-ref [-m <reason>] [--no-deref] --stdin [-z] [--batch-updates]
DESCRIPTION
-----------
@@ -57,6 +59,14 @@
With `--create-reflog`, update-ref will create a reflog for each ref
even if one would not ordinarily be created.
+With `--batch-updates`, update-ref executes the updates in a batch but allows
+individual updates to fail due to invalid or incorrect user input, applying only
+the successful updates. However, system-related errors—such as I/O failures or
+memory issues—will result in a full failure of all batched updates. Any failed
+updates will be reported in the following format:
+
+ rejected SP (<old-oid> | <old-target>) SP (<new-oid> | <new-target>) SP <rejection-reason> LF
+
Quote fields containing whitespace as if they were strings in C source
code; i.e., surrounded by double-quotes and with backslash escapes.
Use 40 "0" characters or the empty string to specify a zero value. To
diff --git a/git-update-ref.html b/git-update-ref.html
index 28553bf..5de8825 100644
--- a/git-update-ref.html
+++ b/git-update-ref.html
@@ -452,7 +452,9 @@
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
-<pre class="content"><em>git update-ref</em> [-m <reason>] [--no-deref] (-d <ref> [<old-oid>] | [--create-reflog] <ref> <new-oid> [<old-oid>] | --stdin [-z])</pre>
+<pre class="content"><code>git</code> <code>update-ref</code> [<code>-m</code> <em><reason></em>] [<code>--no-deref</code>] <code>-d</code> <em><ref></em> [<em><old-oid></em>]
+<code>git</code> <code>update-ref</code> [<code>-m</code> <em><reason></em>] [<code>--no-deref</code>] [<code>--create-reflog</code>] <em><ref></em> <em><new-oid></em> [<em><old-oid></em>]
+<code>git</code> <code>update-ref</code> [<code>-m</code> <em><reason></em>] [<code>--no-deref</code>] <code>--stdin</code> [<code>-z</code>] [<code>--batch-updates</code>]</pre>
</div>
</div>
</div>
@@ -515,6 +517,18 @@
even if one would not ordinarily be created.</p>
</div>
<div class="paragraph">
+<p>With <code>--batch-updates</code>, update-ref executes the updates in a batch but allows
+individual updates to fail due to invalid or incorrect user input, applying only
+the successful updates. However, system-related errors—such as I/O failures or
+memory issues—will result in a full failure of all batched updates. Any failed
+updates will be reported in the following format:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>rejected SP (<old-oid> | <old-target>) SP (<new-oid> | <new-target>) SP <rejection-reason> LF</pre>
+</div>
+</div>
+<div class="paragraph">
<p>Quote fields containing whitespace as if they were strings in C source
code; i.e., surrounded by double-quotes and with backslash escapes.
Use 40 "0" characters or the empty string to specify a zero value. To
@@ -715,7 +729,7 @@
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-02-14 21:38:14 -0800
+Last updated 2025-04-16 14:42:40 -0700
</div>
</div>
</body>
diff --git a/git-version.adoc b/git-version.adoc
index 80fa775..9462043 100644
--- a/git-version.adoc
+++ b/git-version.adoc
@@ -22,6 +22,14 @@
--build-options::
Include additional information about how git was built for diagnostic
purposes.
++
+The libraries used to implement the SHA-1 and SHA-256 algorithms are displayed
+in the form `SHA-1: <option>` and `SHA-256: <option>`. Note that the SHA-1
+options `SHA1_APPLE`, `SHA1_OPENSSL`, and `SHA1_BLK` do not use a collision
+detection algorithm and thus may be vulnerable to known SHA-1 collision
+attacks. When a faster SHA-1 implementation without collision detection is used
+for only non-cryptographic purposes, the algorithm is displayed in the form
+`non-collision-detecting-SHA-1: <option>`.
GIT
---
diff --git a/git-version.html b/git-version.html
index b8d6aaa..fe862a6 100644
--- a/git-version.html
+++ b/git-version.html
@@ -477,6 +477,15 @@
<dd>
<p>Include additional information about how git was built for diagnostic
purposes.</p>
+<div class="paragraph">
+<p>The libraries used to implement the SHA-1 and SHA-256 algorithms are displayed
+in the form <code>SHA-1:</code> <em><option></em> and <code>SHA-256:</code> <em><option></em>. Note that the SHA-1
+options <code>SHA1_APPLE</code>, <code>SHA1_OPENSSL</code>, and <code>SHA1_BLK</code> do not use a collision
+detection algorithm and thus may be vulnerable to known SHA-1 collision
+attacks. When a faster SHA-1 implementation without collision detection is used
+for only non-cryptographic purposes, the algorithm is displayed in the form
+<code>non-collision-detecting-SHA-1:</code> <em><option></em>.</p>
+</div>
</dd>
</dl>
</div>
@@ -493,7 +502,7 @@
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2025-02-14 21:38:14 -0800
+Last updated 2025-04-16 14:42:40 -0700
</div>
</div>
</body>
diff --git a/rev-list-options.adoc b/rev-list-options.adoc
index 1c403c1..d38875e 100644
--- a/rev-list-options.adoc
+++ b/rev-list-options.adoc
@@ -361,6 +361,30 @@
--progress=<header>::
Show progress reports on stderr as objects are considered. The
`<header>` text will be printed with each progress update.
+
+-z::
+ Instead of being newline-delimited, each outputted object and its
+ accompanying metadata is delimited using NUL bytes. Output is printed
+ in the following form:
++
+-----------------------------------------------------------------------
+<OID> NUL [<token>=<value> NUL]...
+-----------------------------------------------------------------------
++
+Additional object metadata, such as object paths or boundary objects, is
+printed using the `<token>=<value>` form. Token values are printed as-is
+without any encoding/truncation. An OID entry never contains a '=' character
+and thus is used to signal the start of a new object record. Examples:
++
+-----------------------------------------------------------------------
+<OID> NUL
+<OID> NUL path=<path> NUL
+<OID> NUL boundary=yes NUL
+<OID> NUL missing=yes NUL [<token>=<value> NUL]...
+-----------------------------------------------------------------------
++
+This mode is only compatible with the `--objects`, `--boundary`, and
+`--missing` output options.
endif::git-rev-list[]
History Simplification