git: Update to version 2.54.0

Message ID 20260426114418.122889-12-adolf.belka@ipfire.org
State Staged
Commit 389610b3a1f995c221ddbbb616f34f1ad9ba6231
Headers
Series git: Update to version 2.54.0 |

Commit Message

Adolf Belka 26 Apr 2026, 11:44 a.m. UTC
- Update from version 2.53.0 to 2.54.0
- Update of rootfile
- Changelog
    2.54.0
UI, Workflows & Features
	"git add -p" and friends note what the current status of the hunk
	 being shown is.
	"git history" history rewriting (experimental) command has been
	 added.
	"git replay" is taught to drop commits that become empty (not the
	 ones that are empty in the original).
	The help text and the documentation for the "--expire" option of
	 "git worktree [list|prune]" have been improved.
	When "git show-index" is run outside a repository, it silently
	 defaults to SHA-1; the tool now warns when this happens.
	"git merge-file" can be run outside a repository, but it ignored
	 all configuration, even the per-user ones.  The command now uses
	 available configuration files to find its customization.
	"auto filter" logic for large-object promisor remote.
	"git rev-list" and friends learn "--maximal-only" to show only the
	 commits that are not reachable by other commits.
	Command line completion (in contrib/) update for
	 "stash import/export".
	"git repo info" learns "--keys" action to list known keys.
	Extend the alias configuration syntax to allow aliases using
	 characters outside ASCII alphanumeric (plus -).
	A signature on a commit that was GPG signed a long time ago ought to
	 be still valid after the key that was used to sign it has expired,
	 but we showed them in alarming red.
	"git subtree split --prefix=P <commit>" now checks the prefix P
	 against the tree of the (potentially quite different from the
	 current working tree) given commit.
	"git add -p" learned a new mode that allows the user to revisit a
	 file that was already dealt with.
	Allow the directory in which reference backends store their data to
	 be specified.
	"gitweb" has been taught to be mobile friendly.
	"git apply --directory=./un/../normalized/path" now normalizes the
	 given path before using it.
	"git maintenance" starts using the "geometric" strategy by default.
	"git config list" is taught to show the values interpreted for
	 specific type with "--type=<X>" option.
	"git add <submodule>" has been taught to honor
	 submodule.<name>.ignore that is set to "all" (and requires "git add
	 -f" to override it).
	Hook commands are now allowed to be defined (possibly centrally)
	 in the configuration files, and run multiple of them for the same
	 hook event.
	The way end-users can add their own "git <cmd>" subcommand by
	 storing "git-<cmd>" in a directory on their $PATH has not been
	 documented clearly, which has been corrected.
	"git send-email" learns to pass hostname/port to Authen::SASL
	 module.
	"git send-email" learns to support use of client-side certificates.
	"git send-email" has learned to be a bit more careful when it
	 accepts charset to use from the end-user, to avoid y (mistaken
	 yes when expecting a charset like UTF-8) and other nonsense.
	"git status" learned to show comparison between the current branch
	 and various other branches listed on status.compareBranches
	 configuration.
	"git repo structure" command learns to report maximum values on
	 various aspects of objects it inspects.
	"git rebase" learns "--trailer" option to drive the
	 interpret-trailers machinery.
	"git fast-import" learned to optionally replace signature on
	 commits whose signatures get invalidated due to replaying by
	 signing afresh.
	"git history" learned the "split" subcommand.
	The reference-transaction hook was taught to be triggered before
	 taking locks on references in the "preparing" phase.
	"git apply" now reports the name of the input file along with the
	 line number when it encounters a corrupt patch, and correctly
	 resets the line counter when processing multiple patch files.
	The HTTP transport learned to react to "429 Too Many Requests".
	"git repo info -h" and "git repo structure -h" limit their help output
	 to the part that is specific to the subcommand.
	"git format-patch --cover-letter" learns to use a simpler format
	 instead of the traditional shortlog format to list its commits with
	 a new --commit-list-format option and format.commitListFormat
	 configuration variable.
	git backfill learned to accept revision and pathspec arguments.
	"git replay" (experimental) learns, in addition to "pick" and
	 "replay", a new operating mode "revert".
	"git replay" now supports replaying down to the root commit.
	Handling of signed commits and tags in fast-import has been made more
	 configurable.
	"git config list" is the official way to spell "git config -l" and
	 "git config --list".  Use it to update the documentation.
Performance, Internal Implementation, Development Support etc.
	Avoid local submodule repository directory paths overlapping with
	 each other by encoding submodule names before using them as path
	 components.
	The string_list API gains a new helper, string_list_sort_u(), and
	 new unit tests to extend coverage.
	Improve set-up time of a perf test.
	ISO C23 redefines strchr and friends that traditionally took
	 a const pointer and returned a non-const pointer derived from it to
	 preserve constness (i.e., if you ask for a substring in a const
	 string, you get a const pointer to the substring).  Update code
	 paths that used non-const pointer to receive their results that did
	 not have to be non-const to adjust.
	Rename three functions around the commit_list data structure.
	Transaction to create objects (or not) is currently tied to the
	 repository, but in the future a repository can have multiple object
	 sources, which may have different transaction mechanisms.  Make the
	 odb transaction API per object source.
	"git merge-ours" is taught to work better in a sparse checkout.
	Allow recording process ID of the process that holds the lock next
	 to a lockfile for diagnosis.
	Reduce dependency on the_repository of xdiff-interface layer.
	Code clean-up to use the commit_stack API.
	"git diff --anchored=<text>" has been optimized.
	A CodingGuidelines update.
	Add process ancestry data to trace2 on macOS to match what we
	 already do on Linux and Windows.  Also adjust the way Windows
	 implementation reports this information to match the other two.
	A handful of places used refs_for_each_ref_in() API incorrectly,
	 which has been corrected.
	Some tests assumed "iconv" is available without honoring ICONV
	 prerequisite, which has been corrected.
	Revamp object enumeration API around odb.
	Additional tests were introduced to see the interaction with netrc
	 auth with auth failure on the http transport.
	A couple of bugs in use of flag bits around odb API has been
	 corrected, and the flag bits reordered.
	Plumb gitk/git-gui build and install procedure in meson based
	 builds.
	The code to accept shallow "git push" has been optimized.
	Simplify build procedure for oxskeychain (in contrib/).
	Fix dependency screw-up in meson-based builds.
	Wean the mailmap code off of the_repository dependency.
	API clean-up for the worktree subsystem.
	The last uses of the_repository in "tree-diff.c" have been
	 eradicated.
	Clean-up the code around "git repo info" command.
	Mark the merge-ort codebase to prevent more uses of the_repository
	 from getting added.
	The core.attributesfile is intended to be set per repository, but
	 was kept track of by a single global variable in-core, which has
	 been corrected by moving it to per-repository data structure.
	Use the hook API to replace ad-hoc invocation of hook scripts via
	 the run_command() API.
	Code refactoring around refs-for-each-* API functions.
	The parse-options API learned to notice an options[] array with
	 duplicated long options.
	 (merge 237e520d81 rs/parse-options-duplicated-long-options later to maint).
	The code to maintain mapping between object names in multiple hash
	 functions is being added, written in Rust.
	A bit of OIDmap API enhancement and cleanup.
	Move gitlab CI from macOS 14 images that are being deprecated.
	The object source API is getting restructured to allow plugging new
	 backends.
	Reduce dependence on the global the_hash_algo and the_repository
	 variables of wt-status code path.
	The way combined list-object filter options are parsed has been
	 revamped.
	Editorconfig filename patterns were specified incorrectly, making
	 many source files inside subdirectories unaffected, which has been
	 corrected.
	The run_command() API lost its implicit dependency on the singleton
	 the_repository instance.
	The unit test helper function was taught to use backslash
	 mnemonic notation for certain control characters like "\t", instead
	 of octal notation like "\011".
	Adjust test-lint to allow "sed -E" to use ERE in the patterns.
	Clar (unit testing framework) update from the upstream.
	Reduce system overhead "git upload-pack" spends on relaying "git
	 pack-objects" output to the "git fetch" running on the other end of
	 the connection.
	Add a coccinelle rule to break the build when "struct strbuf" gets
	 passed by value.
	Further work on incremental repacking using MIDX/bitmap
	The logic to count objects has been cleaned up.
	Tweak the build infrastructure by moving tools around.
	Uses of prio_queue as a LIFO stack of commits have been written
	 with commit_stack.
	The cleanup of remaining bitmaps in "ahead_behind()" has been
	 simplified.
	split-index.c has been updated to not use the global the_repository
	 and the_hash_algo variables.
	The unsigned integer that is used as a bitset to specify the kind
	 of branches interpret_branch_name() function has been changed to
	 use a dedicated enum type.
	Various updates to contrib/diff-highlight, including documentation
	 updates, test improvements, and color configuration handling.
	Code paths that loop over another array to push each element into a
	 strvec have been rewritten to use strvec_pushv() instead.
	In case homebrew breaks REG_ENHANCED again, leave an in-code comment
	 to suggest use of our replacement regex as a workaround.
	MinGW build updates.
	The way dash 0.5.13 handles non-ASCII contents in here-doc
	 is buggy and breaks our existing tests, which unfortunately
	 have been rewritten to avoid triggering the bug.
	Object name handling (disambiguation and abbreviation) has been
	 refactored to be backend-generic, moving logic into the respective
	 object database backends.
	pack-objects’s --stdin-packs=follow mode learns to handle
	 excluded-but-open packs.
	A few code paths that spawned child processes for network
	 connection weren’t wait(2)ing for their children and letting "init"
	 reap them instead; they have been tightened.
	Adjust the codebase for C23 that changes functions like strchr()
	 that discarded constness when they return a pointer into a const
	 string to preserve constness.
	A handful of inappropriate uses of the_repository have been
	 rewritten to use the right repository structure instance in the
	 read-cache.c codepath.
	Internals of "git fsck" have been refactored to not depend on the
	 global the_repository variable.
	Reduce dependency on the_repository in add-patch.c file.
	The way the "git log -L<range>:<file>" feature is bolted onto the
	 log/diff machinery is being reworked a bit to make the feature
	 compatible with more diff options, like -S/G.
	Further work to adjust the codebase for C23 that changes functions
	 like strchr() that discarded constness when they return a pointer into
	 a const string to preserve constness.
	"git rev-list --maximal-only" has been optimized by borrowing the
	 logic used by "git show-branch --independent", which computes the
	 same kind of information much more efficiently.
Fixes since v2.53
	HTTP transport failed to authenticate in some code paths, which has
	 been corrected.
	 (merge ed0f7a62f7 ap/http-probe-rpc-use-auth later to maint).
	The computation of column width made by "git diff --stat" was
	 confused when pathnames contain non-ASCII characters.
	 (merge 04f5d95ef7 lp/diff-stat-utf8-display-width-fix later to maint).
	The "-z" and "--max-depth" documentation (and implementation of
	 "-z") in the "git last-modified" command have been updated.
	 (merge 9dcc09bed1 tc/last-modified-options-cleanup later to maint).
	A handful of code paths that started using batched ref update API
	 (after Git 2.51 or so) lost detailed error output, which have been
	 corrected.
	 (merge eff9299eac kn/ref-batch-output-error-reporting-fix later to maint).
	"git blame --ignore-revs=…​ --color-lines" did not account for
	 ignored revisions passing blame to the same commit an adjacent line
	 gets blamed for.
	 (merge d519082d4e rs/blame-ignore-colors-fix later to maint).
	Coccinelle rules update.
	 (merge 60614838a4 tc/memzero-array later to maint).
	Giving "git last-modified" a tree (not a commit-ish) died an
	 uncontrolled death, which has been corrected.
	 (merge 525ef52301 tc/last-modified-not-a-tree later to maint).
	Test contrib/ things in CI to catch breakages before they enter the
	 "next" branch.
	 (merge c591c3ceff jc/ci-test-contrib-too later to maint).
	A handful of documentation pages have been modernized to use the
	 "synopsis" style.
	 (merge a34d1d53a6 ja/doc-synopsis-style-even-more later to maint).
	Small clean-up of xdiff library to remove unnecessary data
	 duplication.
	 (merge 5086213bd2 pw/xdiff-cleanups later to maint).
	Update sample commit-msg hook to complain when a log message has
	 material mailinfo considers the end of log message in the middle.
	 (merge 83804c361b pw/commit-msg-sample-hook later to maint).
	"git pack-objects --stdin-packs" with "--exclude-promisor-objects"
	 fetched objects that are promised, which was not wanted.  This has
	 been fixed.
	 (merge f4eff7116d ps/pack-concat-wo-backfill later to maint).
	"git switch <name>", in an attempt to create a local branch <name>
	 after a remote tracking branch of the same name gave an advice
	 message to disambiguate using "git checkout", which has been
	 updated to use "git switch".
	 (merge 12fee11f21 jc/checkout-switch-restore later to maint).
	It does not make much sense to apply the "incomplete-line"
	 whitespace rule to symbolic links, whose contents almost always
	 lack the final newline.  "git apply" and "git diff" are now taught
	 to exclude them for a change to symbolic links.
	 (merge 6a41481c6d jc/whitespace-incomplete-line later to maint).
	"git format-patch --from=<me>" did not honor the command line
	 option when writing out the cover letter, which has been corrected.
	Update build procedure for mergetool documentation in meson-based builds.
	 (merge 58e4eeeeb5 pw/meson-doc-mergetool later to maint).
	An earlier attempt to optimize "git subtree" discarded too much
	 relevant histories, which has been corrected.
	A prefetch call can be triggered to access a stale diff_queue entry
	 after diffcore-break breaks a filepair into two and freed the
	 original entry that is no longer used, leading to a segfault, which
	 has been corrected.
	 (merge 2d88ab078d hy/diff-lazy-fetch-with-break-fix later to maint).
	"git fetch --deepen" that tries to go beyond merged branch used to
	 get confused where the updated shallow points are, which has been
	 corrected.
	 (merge 3ef68ff40e sp/shallow-deepen-relative-fix later to maint).
	"fsck" iterates over packfiles and its access to pack data caused
	 the list to be permuted, which caused it to loop forever; the code
	 to access pack data by "fsck" has been updated to avoid this.
	 (merge 13eb65d366 ps/fsck-stream-from-the-right-object-instance later to maint).
	"git log --graph --stat" did not count the display width of colored
	 graph part of its own output correctly, which has been corrected.
	 (merge 064b869efc lp/diff-stat-utf8-display-width-fix later to maint).
	The configuration variable format.noprefix did not behave as a
	 proper boolean variable, which has now been fixed and documented.
	 (merge ea3a62c40e kh/format-patch-noprefix-is-boolean later to maint).
	CI fix.
	 (merge eb35167dd4 ps/ci-reduce-gitlab-envsize later to maint).
	"git diff --no-index --find-object=<object-name>" outside a
	 repository of course wouldn’t be able to find the object and died
	 while parsing the command line.  The command is made to die in a
	 bit more user-friendly way.
	 (merge b0ddc7947c mm/diff-no-index-find-object later to maint).
	Fix typo-induced breakages in fsmonitor-watchman sample hook.
	 (merge 41366e4677 pt/fsmonitor-watchman-sample-fix later to maint).
	"git for-each-repo" started from a secondary worktree did not work
	 as expected, which has been corrected.
	 (merge e87493b9b4 ds/for-each-repo-w-worktree later to maint).
	The construct test "$(command)" = expectation loses the exit
	 status from the command, which has been fixed by breaking up the
	 statement into pieces.
	 (merge d3edca979a fp/t3310-unhide-git-failures later to maint).
	While discovering a ".git" directory, the code treats any stat()
	 failure as a sign that a filesystem entity .git does not exist
	 there, and ignores ".git" that is not a "gitdir" file or a
	 directory.  The code has been tightened to notice and report
	 filesystem corruption better.
	 (merge 1dd27bfbfd ty/setup-error-tightening later to maint).
	Plug a few leaks where mmap’ed memory regions are not unmapped.
	 (merge a8a69bbb64 jk/unleak-mmap later to maint).
	A test now uses the symbolic constant $ZERO_OID instead of 40 "0" to
	 work better with SHA-256 as well as SHA-1.
	 (merge 30310f3cc4 ss/t3200-test-zero-oid later to maint).
	Instead of hardcoded origin, use the configured default remote
	 when fetching from submodules.
	 (merge 3b5fb32da8 ng/submodule-default-remote later to maint).
	The code in "git help" that shows configuration items in sorted
	 order was awkwardly organized and prone to bugs.
	"imap-send" used to use functions whose use is going to be removed
	 with OpenSSL 4.0; rewrite them using public API that has been
	 available since OpenSSL 1.1 since 2016 or so.
	 (merge 6392a0b75d bb/imap-send-openssl-4.0-prep later to maint).
	Fix an example in the user-manual.
	 (merge 5514f14617 gj/user-manual-fix-grep-example later to maint).
	The final clean-up phase of the diff output could turn the result of
	 histogram diff algorithm suboptimal, which has been corrected.
	 (merge e417277ae9 yc/histogram-hunk-shift-fix later to maint).
	"git diff -U<num>" was too lenient in its command line parsing and
	 took an empty string as a valid <num>.
	 (merge 4f6a803aba ty/doc-diff-u-wo-number later to maint).
	The handling of the incomplete lines at the end by "git
	 diff-highlight" has been fixed.
	merge-file --object-id used to trigger a BUG when run in a linked
	 worktree, which has been fixed.
	 (merge 57246b7c62 mr/merge-file-object-id-worktree-fix later to maint).
	"git apply -p<n>" parses <n> more carefully now.
	 (merge d05d84c5f5 mf/apply-p-no-atoi later to maint).
	A test to run a .bat file with whitespaces in the name with arguments
	 with whitespaces in them was flaky in that sometimes it got killed
	 before it produced expected side effects, which has been rewritten to
	 make it more robust.
	 (merge 3ad4921838 jk/t0061-bat-test-update later to maint).
	"git ls-remote +refs/tags/:refs/tags/ https://…​" run outside a
	 repository would dereference a NULL while trying to see if the given
	 refspec is a single-object refspec, which has been corrected.
	 (merge 4e5dc601dd kj/refspec-parsing-outside-repository later to maint).
	Fix a regression in writing the commit-graph where commits with dates
	 exceeding 34 bits (beyond year 2514) could cause an underflow and
	 crash Git during the generation data overflow chunk writing.
	The value of a wrong pointer variable was referenced in an error
	 message that reported that it shouldn’t be NULL.
	 (merge 753ecf4205 yc/path-walk-fix-error-reporting later to maint).
	The check in "receive-pack" to prevent a checked out branch from
	 getting updated via updateInstead mechanism has been corrected.
	"git backfill" is capable of auto-detecting a sparsely checked out
	 working tree, which was broken.
	 (merge 339eba65a7 th/backfill-auto-detect-sparseness-fix later to maint).
	add_files_to_cache() used diff_files() to detect only the paths that
	 are different between the index and the working tree and add them,
	 which does not need rename detection, which interfered with unnecessary
	 conflicts.
	 (merge c0ce43376b ng/add-files-to-cache-wo-rename later to maint).
	Doc mark-up update for entries in the glossary with bulleted lists.
	 (merge a65cbd87ea jk/doc-markup-sub-list-indentation later to maint).
	CI dependency updates.
	 (merge 4bdb17e3a8 jc/ci-github-actions-use-checkout-v5 later to maint).
	Other code cleanup, docfix, build fix, etc.

Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
---
 config/rootfiles/packages/git | 1 +
 lfs/git                       | 6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)
  

Patch

diff --git a/config/rootfiles/packages/git b/config/rootfiles/packages/git
index 3fb9dba6c..e39c7b1eb 100644
--- a/config/rootfiles/packages/git
+++ b/config/rootfiles/packages/git
@@ -76,6 +76,7 @@  usr/libexec/git-core/git-grep
 #usr/libexec/git-core/git-gui--askyesno
 usr/libexec/git-core/git-hash-object
 usr/libexec/git-core/git-help
+usr/libexec/git-core/git-history
 usr/libexec/git-core/git-hook
 usr/libexec/git-core/git-http-backend
 usr/libexec/git-core/git-http-fetch
diff --git a/lfs/git b/lfs/git
index 4822189ad..74a23d38a 100644
--- a/lfs/git
+++ b/lfs/git
@@ -24,7 +24,7 @@ 
 
 include Config
 
-VER        = 2.53.0
+VER        = 2.54.0
 SUMMARY    = Fast, scalable, distributed revision control system
 
 THISAPP    = git-$(VER)
@@ -33,7 +33,7 @@  DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = git
-PAK_VER    = 41
+PAK_VER    = 42
 
 DEPS       = perl-Authen-SASL perl-Net-SMTP-SSL
 
@@ -47,7 +47,7 @@  objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = a23ccb2f793d37347e892f6094ad589510c93011a53fb2c14cdcbfbe6d87413edb4585a98253e4ca5124217f66ad783f4fa584f38dc25ffa34772da01dc45f02
+$(DL_FILE)_BLAKE2 = 68ee0623ff5a695a35dae2f31e3f410ebd4b6a8296c7c9fd03f53668878e9164b78ca82869c8a0719b3fae981f514f2022c45b39df7174b5e883348bdd269a82
 
 install : $(TARGET)