summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debian/changelog12
-rw-r--r--debian/changelog.upstream1881
-rw-r--r--debian/copyright7
-rw-r--r--debian/patches/0001-hook-plug-a-new-memory-leak.diff34
-rw-r--r--debian/patches/0002-Revert-core.hooksPath-add-some-protection-while-cloni.diff82
-rw-r--r--debian/patches/0003-tests-verify-that-clone-c-core.hooksPath-dev-null-wor.diff48
-rw-r--r--debian/patches/0004-hook-clone-protections-add-escape-hatch.diff182
-rw-r--r--debian/patches/0005-hooks-clone-protections-special-case-current-Git-LFS-.diff82
-rw-r--r--debian/patches/0006-hooks-clone-protections-simplify-templates-hooks-vali.diff198
-rw-r--r--debian/patches/0007-Revert-Add-a-helper-function-to-compare-file-contents.diff185
-rw-r--r--debian/patches/series7
-rw-r--r--debian/versions.upstream17
12 files changed, 2716 insertions, 19 deletions
diff --git a/debian/changelog b/debian/changelog
index 16c199d..0c60561 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+git (1:2.45.1-1) unstable; urgency=medium
+
+ * new upstream release (see RelNotes/2.44.0.txt, RelNotes/2.45.0.txt).
+ * new upstream point release (see RelNotes/2.45.1.txt; addresses
+ CVE-2024-32002, CVE-2024-32004, CVE-2024-32020, CVE-2024-32021 and
+ CVE-2024-32465; closes: #1071160).
+ * debian/patches/0001..0007: new from upstream: followups intended
+ for v2.45.2 to avoid regressions from the fixes included in
+ v2.45.1 (thx Johannes Schindelin).
+
+ -- Jonathan Nieder <jrnieder@gmail.com> Mon, 20 May 2024 03:36:58 +0000
+
git (1:2.43.0-1~progress7.99u1) graograman-backports; urgency=low
* Initial reupload to graograman-backports.
diff --git a/debian/changelog.upstream b/debian/changelog.upstream
index 69e5ac8..2342f06 100644
--- a/debian/changelog.upstream
+++ b/debian/changelog.upstream
@@ -1,3 +1,1627 @@
+Version v2.45.1; changes since v2.45.0:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (6):
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (26):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+ Git 2.41.1
+ Git 2.42.2
+ Git 2.43.4
+ Git 2.44.1
+ Git 2.45.1
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
+Version v2.45.0; changes since v2.45.0-rc1:
+-------------------------------------------
+
+Alexander Shopov (1):
+ l10n: bg.po: Updated Bulgarian translation (5652t)
+
+Arkadii Yakovets (1):
+ l10n: uk: v2.45 update
+
+Bagas Sanjaya (1):
+ l10n: po-id for 2.45
+
+Emir SARI (1):
+ l10n: tr: Update Turkish translations
+
+Jean-Noël Avila (1):
+ l10n: fr: v2.45.0
+
+Jiang Xin (1):
+ l10n: TEAMS: retire l10n teams no update in 1 year
+
+Junio C Hamano (1):
+ Git 2.45
+
+Peter Krefting (1):
+ l10n: sv.po: Update Swedish translation
+
+Ralf Thielow (1):
+ l10n: Update German translation
+
+René Scharfe (1):
+ don't report vsnprintf(3) error as bug
+
+Rubén Justo (4):
+ apply: plug a leak in apply_data
+ add-interactive: plug a leak in get_untracked_files
+ add-patch: plug a leak handling the '/' command
+ add: plug a leak on interactive_add
+
+Taylor Blau (1):
+ Documentation/RelNotes/2.45.0.txt: fix typo
+
+Teng Long (1):
+ l10n: zh_CN: for git 2.45 rounds
+
+Vũ Tiến Hưng (2):
+ l10n: Update Vietnamese team contact
+ l10n: vi: Updated translation for 2.45
+
+Yi-Jyun Pan (1):
+ l10n: zh-TW: Git 2.45
+
+
+Version v2.45.0-rc1; changes since v2.45.0-rc0:
+-----------------------------------------------
+
+Junio C Hamano (2):
+ A bit more topics before -rc1
+ Git 2.45-rc1
+
+Linus Arver (5):
+ format_trailer_info(): use trailer_item objects
+ format_trailer_info(): drop redundant unfold_value()
+ format_trailer_info(): append newline for non-trailer lines
+ trailer: begin formatting unification
+ trailer: finish formatting unification
+
+Marcel Röthke (1):
+ rerere: fix crashes due to unmatched opening conflict markers
+
+Orgad Shaneh (1):
+ docs: remove duplicate entry and fix typo in 2.45 changelog
+
+Patrick Steinhardt (15):
+ reftable/block: rename `block_reader_start()`
+ reftable/block: merge `block_iter_seek()` and `block_reader_seek()`
+ reftable/block: better grouping of functions
+ reftable/block: introduce `block_reader_release()`
+ reftable/block: move ownership of block reader into `struct table_iter`
+ reftable/reader: iterate to next block in place
+ reftable/block: reuse uncompressed blocks
+ reftable/block: open-code call to `uncompress2()`
+ reftable/block: reuse `zstream` state on inflation
+ reftable/block: avoid copying block iterators on seek
+ pack-bitmap: gracefully handle missing BTMP chunks
+ run-command: introduce function to prepare auto-maintenance process
+ builtin/receive-pack: convert to use git-maintenance(1)
+ docs: improve changelog entry for `git pack-refs --auto`
+ docs: address typos in Git v2.45 changelog
+
+Peter Krefting (1):
+ bisect: report the found commit with "show"
+
+René Scharfe (3):
+ git-compat-util: fix NO_OPENSSL on current macOS
+ imap-send: increase command size limit
+ apply: avoid using fixed-size buffer in write_out_one_reject()
+
+Rubén Justo (1):
+ launch_editor: waiting message on error
+
+Thalia Archibald (8):
+ fast-import: tighten path unquoting
+ fast-import: directly use strbufs for paths
+ fast-import: allow unquoted empty path for root
+ fast-import: remove dead strbuf
+ fast-import: improve documentation for path quoting
+ fast-import: document C-style escapes for paths
+ fast-import: forbid escaped NUL in paths
+ fast-import: make comments more precise
+
+Xing Xin (1):
+ Documentation: fix typos describing date format
+
+Yehezkel Bernat (1):
+ Documentation: fix linkgit reference
+
+Đoàn Trần Công Danh (1):
+ t9604: Fix test for musl libc and new Debian
+
+
+Version v2.45.0-rc0; changes since v2.44.1:
+-------------------------------------------
+
+Ahelenia Ziemiańska (1):
+ grep: improve errors for unmatched ( and )
+
+Alexander Shopov (4):
+ transport-helper.c: trivial fix of error message
+ builtin/remote.c: trivial fix of error message
+ builtin/clone.c: trivial fix of message
+ revision.c: trivial fix to message
+
+Aryan Gupta (1):
+ tests: modernize the test script t0010-racy-git.sh
+
+Beat Bolli (25):
+ completion: use awk for filtering the config entries
+ date: make "iso-strict" conforming for the UTC timezone
+ t0006: add more tests with a negative TZ offset
+ doc: avoid redundant use of cat
+ contrib/subtree/t: avoid redundant use of cat
+ t/lib-cvs.sh: avoid redundant use of cat
+ t/annotate-tests.sh: avoid redundant use of cat
+ t/perf: avoid redundant use of cat
+ t/t0*: avoid redundant uses of cat
+ t/t1*: avoid redundant uses of cat
+ t/t3*: avoid redundant uses of cat
+ t/t4*: avoid redundant uses of cat
+ t/t5*: avoid redundant uses of cat
+ t/t6*: avoid redundant uses of cat
+ t/t7*: avoid redundant use of cat
+ t/t8*: avoid redundant use of cat
+ t/t9*: avoid redundant uses of cat
+ t/t1*: merge a "grep | sed" pipeline
+ t/t3*: merge a "grep | awk" pipeline
+ t/t4*: merge a "grep | sed" pipeline
+ t/t5*: merge a "grep | sed" pipeline
+ t/t8*: merge "grep | sed" pipelines
+ t/t9*: merge "grep | sed" pipelines
+ contrib/coverage-diff: avoid redundant pipelines
+ git-quiltimport: avoid an unnecessary subshell
+
+Bo Anderson (5):
+ t/lib-credential: clean additional credential
+ osxkeychain: replace deprecated SecKeychain API
+ osxkeychain: erase all matching credentials
+ osxkeychain: erase matching passwords only
+ osxkeychain: store new attributes
+
+Brian C Tracy (1):
+ fuzz: add fuzzer for config parsing
+
+Brian Lyles (13):
+ docs: clarify file options in git-config `--edit`
+ docs: fix typo in git-config `--default`
+ docs: correct trailer `key_value_separator` description
+ docs: adjust trailer `separator` and `key_value_separator` language
+ pretty: update tests to use `test_config`
+ pretty: find pretty formats case-insensitively
+ docs: address inaccurate `--empty` default with `--exec`
+ docs: clean up `--empty` formatting in git-rebase(1) and git-am(1)
+ rebase: update `--empty=ask` to `--empty=stop`
+ sequencer: handle unborn branch with `--allow-empty`
+ sequencer: do not require `allow_empty` for redundant commit options
+ cherry-pick: enforce `--keep-redundant-commits` incompatibility
+ cherry-pick: add `--empty` for more robust redundant commit handling
+
+Chandra Pratap (2):
+ apply: ignore working tree filemode when !core.filemode
+ t9146: replace test -d/-e/-f with appropriate test_path_is_* function
+
+Christian Couder (5):
+ revision: clarify a 'return NULL' in get_reference()
+ oidset: refactor oidset_insert_from_set()
+ t6022: fix 'test' style and 'even though' typo
+ rev-list: allow missing tips with --missing=[print|allow*]
+ revision: fix --missing=[print|allow*] for annotated tags
+
+Derrick Stolee (1):
+ fetch: return when parsing submodule.recurse
+
+Dirk Gouders (6):
+ Documentation/user-manual.txt: example for generating object hashes
+ MyFirstObjectWalk: use additional arg in config_fn_t
+ MyFirstObjectWalk: fix misspelled "builtins/"
+ MyFirstObjectWalk: fix filtered object walk
+ MyFirstObjectWalk: fix description for counting omitted objects
+ MyFirstObjectWalk: add stderr to pipe processing
+
+Dragan Simic (8):
+ documentation: send-email: use camel case consistently
+ config: minor addition of whitespace
+ config: really keep value-internal whitespace verbatim
+ t1300: add more tests for whitespace and inline comments
+ config.txt: describe handling of whitespace further
+ grep docs: describe --recurse-submodules further and improve formatting a bit
+ grep docs: describe --no-index further and improve formatting a bit
+ config: fix some small capitalization issues, as spotted
+
+Eric Sunshine (2):
+ docs: sort configuration variable groupings alphabetically
+ test-lib: fix non-functioning GIT_TEST_MAINT_SCHEDULER fallback
+
+Eric W. Biederman (23):
+ object-file-convert: stubs for converting from one object format to another
+ oid-array: teach oid-array to handle multiple kinds of oids
+ object-names: support input of oids in any supported hash
+ repository: add a compatibility hash algorithm
+ loose: compatibilty short name support
+ object-file: update the loose object map when writing loose objects
+ object-file: add a compat_oid_in parameter to write_object_file_flags
+ commit: convert mergetag before computing the signature of a commit
+ commit: export add_header_signature to support handling signatures on tags
+ tag: sign both hashes
+ object: factor out parse_mode out of fast-import and tree-walk into in object.h
+ object-file-convert: don't leak when converting tag objects
+ object-file-convert: convert commits that embed signed tags
+ object-file: update object_info_extended to reencode objects
+ rev-parse: add an --output-object-format parameter
+ builtin/cat-file: let the oid determine the output algorithm
+ tree-walk: init_tree_desc take an oid to get the hash algorithm
+ object-file: handle compat objects in check_object_signature
+ builtin/ls-tree: let the oid determine the output algorithm
+ test-lib: compute the compatibility hash so tests may use it
+ t1006: rename sha1 to oid
+ t1006: test oid compatibility with cat-file
+ t1016-compatObjectFormat: add tests to verify the conversion between objects
+
+Eugenio Gigante (1):
+ add: use unsigned type for collection of bits
+
+Florian Schmidt (1):
+ wt-status: don't find scissors line beyond buf len
+
+Ghanshyam Thakkar (5):
+ add-patch: classify '@' as a synonym for 'HEAD'
+ add -p tests: remove PERL prerequisites
+ setup: remove unnecessary variable
+ builtin/commit: error out when passing untracked path with -i
+ builtin/add: error out when passing untracked path with -u
+
+Haritha D (1):
+ build: support z/OS (OS/390).
+
+Harmen Stoppels (1):
+ rebase: make warning less passive aggressive
+
+Jakub Wilk (1):
+ git-remote.txt: fix typo
+
+Jean-Noël Avila (17):
+ doc: git-rev-parse: enforce command-line description syntax
+ doc: close unclosed angle-bracket of a placeholder in git-clone doc
+ doc: end sentences with full-stop
+ doc: clarify the format of placeholders
+ doc: git-init: format verbatim parts
+ doc: git-init: format placeholders
+ doc: git-init: rework definition lists
+ doc: git-init: rework config item init.templateDir
+ doc: git-clone: format verbatim words
+ doc: git-clone: format placeholders
+ doc: format alternatives in synopsis
+ doc: fix some placeholders formating
+ doc: rework CodingGuidelines with new formatting rules
+ doc: allow literal and emphasis format in doc vs help tests
+ doc: git-init: apply new documentation formatting guidelines
+ doc: git-clone: apply new documentation formatting guidelines
+ doc: git-clone: do not autoreference the manpage in itself
+
+Jeff Hostetler (17):
+ name-hash: add index_dir_find()
+ t7527: add case-insensitve test for FSMonitor
+ fsmonitor: refactor refresh callback on directory events
+ fsmonitor: clarify handling of directory events in callback helper
+ fsmonitor: refactor refresh callback for non-directory events
+ dir: create untracked_cache_invalidate_trimmed_path()
+ fsmonitor: refactor untracked-cache invalidation
+ fsmonitor: move untracked-cache invalidation into helper functions
+ fsmonitor: return invalidated cache-entry count on directory event
+ fsmonitor: remove custom loop from non-directory path handler
+ fsmonitor: return invalidated cache-entry count on non-directory event
+ fsmonitor: trace the new invalidated cache-entry count
+ fsmonitor: refactor bit invalidation in refresh callback
+ fsmonitor: support case-insensitive events
+ t0211: demonstrate missing 'def_param' events for certain commands
+ trace2: avoid emitting 'def_param' set more than once
+ trace2: emit 'def_param' set with 'cmd_name' event
+
+Jeff King (51):
+ t0303: check that helper_test_clean removes all credentials
+ userdiff: skip textconv caching when not in a repository
+ Revert "refs: allow @{n} to work with n-sized reflog"
+ get_oid_basic(): special-case ref@{n} for oldest reflog entry
+ read_ref_at(): special-case ref@{0} for an empty reflog
+ upload-pack: drop separate v2 "haves" array
+ upload-pack: switch deepen-not list to an oid_array
+ upload-pack: use oidset for deepen_not list
+ upload-pack: use a strmap for want-ref lines
+ upload-pack: accept only a single packfile-uri line
+ upload-pack: always turn off save_commit_buffer
+ upload-pack: use PARSE_OBJECT_SKIP_HASH_CHECK in more places
+ upload-pack: free tree buffers after parsing
+ upload-pack: use repository struct to get config
+ upload-pack: centralize setup of sideband-all config
+ upload-pack: use existing config mechanism for advertisement
+ upload-pack: only accept packfile-uris if we advertised it
+ doc/gitremote-helpers: fix missing single-quote
+ config: forbid newline as core.commentChar
+ strbuf: simplify comment-handling in add_lines() helper
+ strbuf: avoid static variables in strbuf_add_commented_lines()
+ commit: refactor base-case of adjust_comment_line_char()
+ strbuf: avoid shadowing global comment_line_char name
+ environment: store comment_line_char as a string
+ strbuf: accept a comment string for strbuf_stripspace()
+ strbuf: accept a comment string for strbuf_commented_addf()
+ strbuf: accept a comment string for strbuf_add_commented_lines()
+ prefer comment_line_str to comment_line_char for printing
+ find multi-byte comment chars in NUL-terminated strings
+ find multi-byte comment chars in unterminated buffers
+ sequencer: handle multi-byte comment characters when writing todo list
+ wt-status: drop custom comment-char stringification
+ environment: drop comment_line_char compatibility macro
+ config: allow multi-byte core.commentChar
+ shortlog: stop setting pp.print_email_subject
+ pretty: split oneline and email subject printing
+ pretty: drop print_email_subject flag
+ log: do not set up extra_headers for non-email formats
+ format-patch: return an allocated string from log_write_email_headers()
+ format-patch: simplify after-subject MIME header handling
+ doc/gitremote-helpers: fix more missing single-quotes
+ transport-helper: use write helpers more consistently
+ transport-helper: drop "object-format <algo>" option
+ transport-helper: send "true" value for object-format option
+ contrib: drop hg-to-git script
+ format-patch: fix leak of empty header string
+ rebase: use child_process_clear() to clean
+ config: add core.commentString
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+
+Jiamu Sun (1):
+ bugreport.c: fix a crash in `git bugreport` with `--no-suffix` option
+
+Johannes Schindelin (22):
+ merge-tree: accept 3 trees as arguments
+ merge-tree: fail with a non-zero exit code on missing tree objects
+ merge-ort: do check `parse_tree()`'s return value
+ t4301: verify that merge-tree fails on missing blob objects
+ Always check `parse_tree*()`'s return value
+ cache-tree: avoid an unnecessary check
+ fill_tree_descriptor(): mark error message for translation
+ neue: remove a bogus empty file
+ commit-reach(paint_down_to_common): plug two memory leaks
+ commit-reach(repo_in_merge_bases_many): optionally expect missing commits
+ commit-reach(repo_in_merge_bases_many): report missing commits
+ commit-reach(paint_down_to_common): prepare for handling shallow commits
+ commit-reach(paint_down_to_common): start reporting errors
+ commit-reach(merge_bases_many): pass on "missing commits" errors
+ commit-reach(get_merge_bases_many_0): pass on "missing commits" errors
+ commit-reach(repo_get_merge_bases): pass on "missing commits" errors
+ commit-reach(get_octopus_merge_bases): pass on "missing commits" errors
+ commit-reach(repo_get_merge_bases_many): pass on "missing commits" errors
+ commit-reach(repo_get_merge_bases_many_dirty): pass on errors
+ merge-recursive: prepare for `merge_submodule()` to report errors
+ merge-ort/merge-recursive: do report errors in `merge_submodule()`
+ merge-tree: fix argument type of the `--merge-base` option
+
+John Cai (1):
+ t5300: fix test_with_bad_commit()
+
+Jonas Wunderlich (1):
+ doc: status.showUntrackedFiles does not take "false"
+
+Josh Triplett (2):
+ commit: avoid redundant scissor line with --cleanup=scissors -v
+ commit: unify logic to avoid multiple scissors lines when merging
+
+Julio Bacellari (1):
+ doc: remove outdated information about interactive.singleKey
+
+Junio C Hamano (61):
+ apply: correctly reverse patch's pre- and post-image mode bits
+ apply: code simplification
+ t9210: do not rely on lazy fetching to fail
+ git: --no-lazy-fetch option
+ doc: add shortcut to "am --whitespace=<action>"
+ doc: apply the new placeholder rules to git-add documentation
+ compat: drop inclusion of <git-compat-util.h>
+ Start the 2.45 cycle
+ git: document GIT_NO_REPLACE_OBJECTS environment variable
+ doc: clarify the wording on <git-compat-util.h> requirement
+ git: extend --no-lazy-fetch to work across subprocesses
+ The second batch
+ The third batch
+ test_i18ngrep: hard deprecate and forbid its use
+ unpack: replace xwrite() loop with write_in_full()
+ sideband: avoid short write(2)
+ repack: check error writing to pack-objects subprocess
+ clean: further clean-up of implementation around "--force"
+ The fourth batch
+ The fifth batch
+ setup: notice more types of implicit bare repositories
+ The sixth batch
+ status: unify parsing of --untracked= and status.showUntrackedFiles
+ status: allow --untracked=false and friends
+ The seventh batch
+ The eighth batch
+ config: fix --comment formatting
+ config: allow tweaking whitespace between value and comment
+ diff.*Prefix: use camelCase in the doc and test titles
+ The ninth batch
+ apply: parse names out of "diff --git" more carefully
+ The tenth batch
+ The eleventh batch
+ SubmittingPatches: release-notes entry experiment
+ The twelfth batch
+ t4126: make sure a directory with SP at the end is usable
+ t4126: fix "funny directory name" test on Windows (again)
+ advice: omit trailing whitespace
+ checkout: omit "tracking" information on a detached HEAD
+ The thirteenth batch
+ t2104: style fixes
+ The fourteenth batch
+ revision: optionally record matches with pathspec elements
+ The fifteenth batch
+ CodingGuidelines: describe "export VAR=VAL" rule
+ CodingGuidelines: quote assigned value in 'local var=$val'
+ t: local VAR="VAL" (quote positional parameters)
+ t: local VAR="VAL" (quote command substitution)
+ t: local VAR="VAL" (quote ${magic-reference})
+ t: teach lint that RHS of 'local VAR=VAL' needs to be quoted
+ t0610: local VAR="VAL" fix
+ t1016: local VAR="VAL" fix
+ config: do not leak excludes_file
+ Makefile(s): do not enforce "all indents must be done with tab"
+ The sixteenth batch
+ t2104: style fixes
+ The seventeenth batch
+ The eighteenth batch
+ The ninteenth batch
+ The twentieth batch
+ Git 2.45-rc0
+
+Justin Tobler (3):
+ reftable/stack: expose option to disable auto-compaction
+ reftable/stack: add env to disable autocompaction
+ reftable/stack: use geometric table compaction
+
+Karthik Nayak (7):
+ refs: introduce `is_pseudoref()` and `is_headref()`
+ refs: extract out `loose_fill_ref_dir_regular_file()`
+ refs: introduce `refs_for_each_include_root_refs()`
+ ref-filter: rename 'FILTER_REFS_ALL' to 'FILTER_REFS_REGULAR'
+ for-each-ref: add new option to include root refs
+ update-ref: use {old,new}-oid instead of {old,new}value
+ githooks: use {old,new}-oid instead of {old,new}-value
+
+Kipras Melnikovas (1):
+ mergetools: vimdiff: use correct tool's name when reading mergetool config
+
+Kristoffer Haugsbakk (9):
+ column: disallow negative padding
+ column: guard against negative padding
+ gitcli: drop mention of “non-dashed form”
+ config: document `core.commentChar` as ASCII-only
+ t3200: improve test style
+ advice: make all entries stylistically consistent
+ advice: use backticks for verbatim
+ advice: use double quotes for regular quoting
+ branch: advise about ref syntax rules
+
+Linus Arver (10):
+ trailer: free trailer_info _after_ all related usage
+ shortlog: add test for de-duplicating folded trailers
+ trailer: rename functions to use 'trailer'
+ trailer: reorder format_trailers_from_commit() parameters
+ trailer: move interpret_trailers() to interpret-trailers.c
+ trailer_info_get(): reorder parameters
+ format_trailers(): use strbuf instead of FILE
+ format_trailer_info(): move "fast path" to caller
+ format_trailers_from_commit(): indirectly call trailer_info_get()
+ mailmap: change primary address for Linus Arver
+
+M Hickford (1):
+ libsecret: retrieve empty password
+
+Matthias Aßhauer (1):
+ Win32: detect unix socket support at runtime
+
+Max Gautier (1):
+ editorconfig: add Makefiles to "text files"
+
+Michael Lohmann (2):
+ revision: ensure MERGE_HEAD is a ref in prepare_show_merge
+ revision: implement `git log --merge` also for rebase/cherry-pick/revert
+
+Patrick Steinhardt (84):
+ refs: introduce reftable backend
+ ci: add jobs to test with the reftable backend
+ refs/reftable: fix leak when copying reflog fails
+ reftable/record: introduce function to compare records by key
+ reftable/merged: allocation-less dropping of shadowed records
+ reftable/merged: skip comparison for records of the same subiter
+ reftable/pq: allocation-less comparison of entry keys
+ reftable/block: swap buffers instead of copying
+ reftable/record: don't try to reallocate ref record name
+ reftable/reader: add comments to `table_iter_next()`
+ t: move tests exercising the "files" backend
+ t0410: convert tests to use DEFAULT_REPO_FORMAT prereq
+ t1400: exercise reflog with gaps with reftable backend
+ t1404: make D/F conflict tests compatible with reftable backend
+ t1405: remove unneeded cleanup step
+ t2011: exercise D/F conflicts with HEAD with the reftable backend
+ t7003: ensure filter-branch prunes reflogs with the reftable backend
+ git-difftool--helper: honor `--trust-exit-code` with `--dir-diff`
+ dir-iterator: pass name to `prepare_next_entry_data()` directly
+ dir-iterator: support iteration in sorted order
+ refs/files: sort reflogs returned by the reflog iterator
+ refs/files: sort merged worktree and common reflogs
+ refs: always treat iterators as ordered
+ refs: drop unused params from the reflog iterator callback
+ refs: stop resolving ref corresponding to reflogs
+ builtin/reflog: introduce subcommand to list reflogs
+ builtin/clone: allow remote helpers to detect repo
+ refs/reftable: don't fail empty transactions in repo without HEAD
+ reftable/pq: use `size_t` to track iterator index
+ reftable/merged: make `merged_iter` structure private
+ reftable/merged: advance subiter on subsequent iteration
+ reftable/merged: make subiters own their records
+ reftable/merged: remove unnecessary null check for subiters
+ reftable/merged: handle subiter cleanup on close only
+ reftable/merged: circumvent pqueue with single subiter
+ reftable/merged: avoid duplicate pqueue emptiness check
+ reftable/record: reuse refname when decoding
+ reftable/record: reuse refname when copying
+ reftable/record: decode keys in place
+ reftable: allow inlining of a few functions
+ refs/reftable: precompute prefix length
+ refs/reftable: reload correct stack when creating reflog iter
+ reftable/record: convert old and new object IDs to arrays
+ reftable/record: avoid copying author info
+ reftable/record: reuse refnames when decoding log records
+ reftable/record: reuse message when decoding log records
+ reftable/record: use scratch buffer when decoding records
+ refs/reftable: track last log record name via strbuf
+ t0610: remove unused variable assignment
+ lockfile: report when rollback fails
+ reftable/stack: register new tables as tempfiles
+ reftable/stack: register lockfiles during compaction
+ reftable/stack: register compacted tables as tempfiles
+ reftable/record: fix memory leak when decoding object records
+ reftable/block: fix binary search over restart counter
+ t5601: exercise clones with "includeIf.*.onbranch"
+ reftable: fix tests being broken by NFS' delete-after-close semantics
+ t7800: improve test descriptions with empty arguments
+ t7800: use single quotes for test bodies
+ t/README: document how to loop around test cases
+ reftable/stack: fix error handling in `reftable_stack_init_addition()`
+ reftable/error: discern locked/outdated errors
+ reftable/stack: use error codes when locking fails during compaction
+ reftable/stack: gracefully handle failed auto-compaction due to locks
+ refs/reftable: print errors on compaction failure
+ t/helper: drop pack-refs wrapper
+ refs: move `struct pack_refs_opts` to where it's used
+ refs: remove `PACK_REFS_ALL` flag
+ refs/reftable: expose auto compaction via new flag
+ builtin/pack-refs: release allocated memory
+ builtin/pack-refs: introduce new "--auto" flag
+ builtin/gc: move `struct maintenance_run_opts`
+ t6500: extract objects with "17" prefix
+ builtin/gc: forward git-gc(1)'s `--auto` flag when packing refs
+ builtin/gc: pack refs when using `git maintenance run --auto`
+ reftable/basics: fix return type of `binsearch()` to be `size_t`
+ reftable/basics: improve `binsearch()` test
+ reftable/refname: refactor binary search over refnames
+ reftable/block: refactor binary search over restart points
+ reftable/block: fix error handling when searching restart points
+ reftable/record: extract function to decode key lengths
+ reftable/block: avoid decoding keys when searching restart points
+ t0610: make `--shared=` tests reusable
+ t0610: execute git-pack-refs(1) with specified umask
+
+Peter Hutterer (1):
+ diff: add diff.srcPrefix and diff.dstPrefix configuration variables
+
+Philippe Blain (5):
+ merge-ort: turn submodule conflict suggestions into an advice
+ ci(github): make Windows test artifacts name unique
+ sequencer: allow disabling conflict advice
+ builtin/am: allow disabling conflict advice
+ t/README: mention test files are make targets
+
+Phillip Wood (9):
+ rebase -i: stop setting GIT_CHERRY_PICK_HELP
+ xdiff-interface: refactor parsing of merge.conflictstyle
+ merge-ll: introduce LL_MERGE_OPTIONS_INIT
+ merge options: add a conflict style member
+ checkout: cleanup --conflict=<style> parsing
+ checkout: fix interaction between --conflict and --merge
+ t3428: modernize test setup
+ t3428: use test_commit_message
+ t3428: restore coverage for "apply" backend
+
+Pi Fisher (1):
+ typo: replace 'commitish' with 'committish'
+
+Ralph Seichter (1):
+ config: add --comment option to add a comment
+
+René Scharfe (28):
+ use xstrncmpz()
+ fetch: convert strncmp() with strlen() to starts_with()
+ mem-pool: add mem_pool_strfmt()
+ name-rev: use mem_pool_strfmt()
+ submodule: use strvec_pushf() for --submodule-prefix
+ t-ctype: allow NUL anywhere in the specification string
+ t-ctype: simplify EOF check
+ t-ctype: align output of i
+ t-ctype: avoid duplicating class names
+ parse-options: recognize abbreviated negated option with arg
+ parse-options: set arg of abbreviated option lazily
+ parse-options: factor out register_abbrev() and struct parsed_option
+ parse-options: detect ambiguous self-negation
+ parse-options: normalize arg and long_name before comparison
+ parse-options: rearrange long_name matching code
+ t-prio-queue: shorten array index message
+ t-prio-queue: check result array bounds
+ factor out strbuf_expand_bad_format()
+ cat-file: use strbuf_expand_bad_format()
+ midx: use strvec_pushf() for pack-objects base name
+ mem-pool: use st_add() in mem_pool_strvfmt()
+ imap-send: use xsnprintf to format command
+ t-prio-queue: simplify using compound literals
+ apply: avoid fixed-size buffer in create_one_file()
+ path: remove mksnpath()
+ apply: don't leak fd on fdopen() error
+ usage: report vsnprintf(3) failure
+ date: make DATE_MODE thread-safe
+
+Richard Macklin (1):
+ rebase: fix typo in autosquash documentation
+
+Rubén Justo (13):
+ tag: error when git-column fails
+ completion: fix __git_complete_worktree_paths
+ completion: reflog with implicit "show"
+ completion: reflog show <log-options>
+ completion: introduce __git_find_subcommand
+ completion: factor out __git_resolve_builtins
+ completion: reflog subcommands and options
+ checkout: plug some leaks in git-restore
+ add-patch: introduce 'p' in interactive-patch
+ add-patch: do not print hunks repeatedly
+ add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE
+ add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC
+ add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO
+
+SZEDER Gábor (1):
+ upload-pack: don't send null character in abort message to the client
+
+Sergey Organov (1):
+ clean: improve -n and -f implementation and documentation
+
+Steven Jeuris (1):
+ userdiff: better method/property matching for C#
+
+Taylor Blau (8):
+ Documentation/config/pack.txt: fix broken AsciiDoc mark-up
+ upload-pack: disallow object-info capability by default
+ midx-write: move writing-related functions from midx.c
+ midx-write.c: factor out common want_included_pack() routine
+ midx-write.c: check count of packs to repack after grouping
+ midx-write.c: use `--stdin-packs` when repacking
+ t/t7700-repack.sh: fix test breakages with `GIT_TEST_MULTI_PACK_INDEX=1 `
+ Makefile(s): avoid recipe prefix in conditional statements
+
+Ville Skyttä (2):
+ completion: fix prompt with unset SHOWCONFLICTSTATE in nounset mode
+ completion: protect prompt against unset SHOWUPSTREAM in nounset mode
+
+Vincenzo Mezzela (1):
+ t7301: use test_path_is_(missing|file)
+
+brian m. carlson (7):
+ loose: add a mapping between SHA-1 and SHA-256 for loose objects
+ commit: write commits for both hashes
+ cache: add a function to read an OID of a specific algorithm
+ object-file-convert: add a function to convert trees between algorithms
+ object-file-convert: convert tag objects when writing
+ object-file-convert: convert commit objects when writing
+ repository: implement extensions.compatObjectFormat
+
+shejialuo (1):
+ t9117: prefer test_path_* helper functions
+
+
+Version v2.44.1; changes since v2.44.0:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (6):
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (25):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+ Git 2.41.1
+ Git 2.42.2
+ Git 2.43.4
+ Git 2.44.1
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
+Version v2.44.0; changes since v2.44.0-rc2:
+-------------------------------------------
+
+Junio C Hamano (1):
+ Git 2.43.3
+
+
+Version v2.44.0-rc2; changes since v2.44.0-rc1:
+-----------------------------------------------
+
+Alexander Shopov (1):
+ l10n: bg.po: Updated Bulgarian translation (5610t)
+
+Arkadii Yakovets (3):
+ l10n: uk: v2.44 localization update
+ l10n: uk: v2.44 update (round 2)
+ l10n: uk: v2.44 update (round 3)
+
+Bagas Sanjaya (1):
+ l10n: po-id for 2.44 (round 1)
+
+Emir SARI (1):
+ l10n: tr: Update Turkish translations for 2.44
+
+Jean-Noël Avila (1):
+ l10n: fr.po: v2.44.0 round 3
+
+Jeff King (1):
+ trailer: fix comment/cut-line regression with opts->no_divider
+
+Jiang Xin (3):
+ diff: mark param1 and param2 as placeholders
+ l10n: ci: remove unused param for add-pr-comment@v2
+ l10n: ci: disable cache for setup-go to suppress warnings
+
+Johannes Schindelin (2):
+ Always check the return value of `repo_read_object_file()`
+ l10n: bump Actions versions in l10n.yml
+
+Jordi Mas (1):
+ l10n: Update Catalan translation
+
+Junio C Hamano (2):
+ Hopefully the last batch of fixes before 2.44 final
+ Git 2.44-rc2
+
+Peter Krefting (1):
+ l10n: sv.po: Update Swedish translation
+
+Philippe Blain (4):
+ completion: add space after config variable names also in Bash 3
+ completion: complete 'submodule.*' config variables
+ completion: add and use __git_compute_first_level_config_vars_for_section
+ completion: add and use __git_compute_second_level_config_vars_for_section
+
+Phillip Wood (1):
+ prune: mark rebase autostash and orig-head as reachable
+
+Ralf Thielow (1):
+ l10n: Update German translation
+
+René Scharfe (2):
+ receive-pack: use find_commit_header() in check_cert_push_options()
+ receive-pack: use find_commit_header() in check_nonce()
+
+Teng Long (1):
+ l10n: zh_CN: for git 2.44 rounds
+
+Todd Zullinger (1):
+ RelNotes: minor typo fixes in 2.44.0 draft
+
+Vegard Nossum (1):
+ sequencer: unset GIT_CHERRY_PICK_HELP for 'exec' commands
+
+Yi-Jyun Pan (1):
+ l10n: zh_TW: Git 2.44
+
+
+Version v2.44.0-rc1; changes since v2.44.0-rc0:
+-----------------------------------------------
+
+Britton Leo Kerin (7):
+ completion: tests: always use 'master' for default initial branch name
+ completion: bisect: complete bad, new, old, and help subcommands
+ completion: bisect: complete custom terms and related options
+ completion: bisect: complete missing --first-parent and - -no-checkout options
+ completion: new function __git_complete_log_opts
+ completion: bisect: complete log opts for visualize subcommand
+ completion: bisect: recognize but do not complete view subcommand
+
+Johannes Schindelin (2):
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+
+Junio C Hamano (11):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+ tag: fix sign_buffer() call to create a signed tag
+ bisect: document "terms" subcommand more fully
+ bisect: document command line arguments for "bisect start"
+ ssh signing: signal an error with a negative return value
+ unit-tests: do show relative file paths on non-Windows, too
+ A few more topics before -rc1
+ write-or-die: fix the polarity of GIT_FLUSH environment variable
+ A few more fixes before -rc1
+ Git 2.43.2
+
+Patrick Steinhardt (15):
+ reftable/reader: be more careful about errors in indexed seeks
+ reftable/writer: use correct type to iterate through index entries
+ reftable/writer: simplify writing index records
+ reftable/writer: fix writing multi-level indices
+ reftable: document reading and writing indices
+ builtin/stash: report failure to write to index
+ reftable: introduce macros to grow arrays
+ reftable: introduce macros to allocate arrays
+ reftable/stack: fix parameter validation when compacting range
+ reftable/stack: index segments with `size_t`
+ reftable/stack: use `size_t` to track stack slices during compaction
+ reftable/stack: use `size_t` to track stack length
+ reftable/merged: refactor seeking of records
+ reftable/merged: refactor initialization of iterators
+ reftable/record: improve semantics when initializing records
+
+Philippe Blain (1):
+ .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs
+
+Phillip Wood (2):
+ show-ref --verify: accept pseudorefs
+ t1400: use show-ref to check pseudorefs
+
+Taylor Blau (2):
+ t5332-multi-pack-reuse.sh: extract pack-objects helper functions
+ pack-objects: enable multi-pack reuse via `feature.experimental`
+
+Victoria Dye (1):
+ ref-filter.c: sort formatted dates by byte value
+
+
+Version v2.44.0-rc0; changes since v2.43.4:
+-------------------------------------------
+
+Achu Luma (2):
+ unit-tests: rewrite t/helper/test-ctype.c as a unit test
+ t2400: avoid losing exit status to pipes
+
+Andy Koppe (3):
+ rebase: fully ignore rebase.autoSquash without -i
+ rebase: support --autosquash without -i
+ rebase: rewrite --(no-)autosquash documentation
+
+Antonin Delpeuch (2):
+ merge-file: add --diff-algorithm option
+ merge-ll: expose revision names to custom drivers
+
+Arthur Chan (1):
+ fuzz: add new oss-fuzz fuzzer for date.c / date.h
+
+Britton Leo Kerin (2):
+ doc: use singular form of repeatable path arg
+ doc: refer to pathspec instead of path
+
+Carlo Marcelo Arenas Belón (1):
+ ci: update FreeBSD cirrus job
+
+Chandra Pratap (2):
+ t4129: prevent loss of exit code due to the use of pipes
+ tests: move t0009-prio-queue.sh to the new unit testing framework
+
+Elijah Newren (19):
+ t6429: remove switching aspects of fast-rebase
+ replay: introduce new builtin
+ replay: start using parse_options API
+ replay: die() instead of failing assert()
+ replay: introduce pick_regular_commit()
+ replay: change rev walking options
+ replay: add an important FIXME comment about gpg signing
+ replay: remove progress and info output
+ replay: remove HEAD related sanity check
+ replay: make it a minimal server side command
+ replay: use standard revision ranges
+ replay: add --advance or 'cherry-pick' mode
+ replay: add --contained to rebase contained branches
+ replay: stop assuming replayed branches do not diverge
+ completion: squelch stray errors in sparse-checkout completion
+ completion: fix logic for determining whether cone mode is active
+ completion: avoid misleading completions in cone mode
+ completion: avoid user confusion in non-cone mode
+ sparse-checkout: be consistent with end of options markers
+
+Ghanshyam Thakkar (4):
+ t7501: add tests for --include and --only
+ t7501: add tests for --amend --signoff
+ t0024: avoid losing exit status to pipes
+ t0024: style fix
+
+Jean-Noël Avila (2):
+ doc: enforce dashes in placeholders
+ doc: enforce placeholders in documentation
+
+Jeff Hostetler (1):
+ sparse-index: pass string length to index_file_exists()
+
+Jeff King (13):
+ commit-graph: handle overflow in chunk_size checks
+ midx: check consistency of fanout table
+ commit-graph: drop redundant call to "lite" verification
+ commit-graph: clarify missing-chunk error messages
+ commit-graph: abort as soon as we see a bogus chunk
+ commit-graph: use fanout value for graph size
+ commit-graph: check order while reading fanout chunk
+ commit-graph: drop verify_commit_graph_lite()
+ commit-graph: mark chunk error messages for translation
+ transport-helper: re-examine object dir after fetching
+ Makefile: use mkdir_p_parent_template for UNIT_TEST_BIN
+ Makefile: remove UNIT_TEST_BIN directory with "make clean"
+ t/Makefile: get UNIT_TESTS list from C sources
+
+Jiang Xin (6):
+ transport-helper: no connection restriction in connect_helper
+ remote-curl: supports git-upload-archive service
+ transport-helper: protocol v2 supports upload-archive
+ http-backend: new rpc-service for git-upload-archive
+ transport-helper: call do_take_over() in connect_helper
+ transport-helper: call do_take_over() in process_connect
+
+Joanna Wang (2):
+ attr: enable attr pathspec magic for git-add and git-stash
+ attr: add builtin objectmode values support
+
+Johannes Schindelin (7):
+ cmake: also build unit tests
+ unit-tests: do not mistake `.pdb` files for being executable
+ unit-tests: do show relative file paths
+ artifacts-tar: when including `.dll` files, don't forget the unit-tests
+ cmake: fix typo in variable name
+ cmake: use test names instead of full paths
+ cmake: handle also unit tests
+
+John Cai (15):
+ t3210: move to t0601
+ remove REFFILES prerequisite for some tests in t1405 and t2017
+ t1414: convert test to use Git commands instead of writing refs manually
+ t1404: move reffiles specific tests to t0600
+ t1405: move reffiles specific tests to t0601
+ t1406: move reffiles specific tests to t0600
+ t1410: move reffiles specific tests to t0600
+ t1415: move reffiles specific tests to t0601
+ t1503: move reffiles specific tests to t0600
+ t3903: make drop stash test ref backend agnostic
+ t4202: move reffiles specific tests to t0600
+ t5312: move reffiles specific tests to t0601
+ reftable: honor core.fsync
+ index-pack: test and document --strict=<msg-id>=<severity>...
+ index-pack: --fsck-objects to take an optional argument for fsck msgs
+
+Josh Steadmon (4):
+ unit tests: add a project plan document
+ ci: run unit tests in CI
+ fuzz: fix fuzz test build rules
+ ci: build and run minimal fuzzers in GitHub CI
+
+Junio C Hamano (26):
+ cache: add fake_lstat()
+ diff-lib: fix check_removed() when fsmonitor is active
+ checkout: refactor die_if_checked_out() caller
+ Start the 2.44 cycle
+ checkout: forbid "-B <branch>" from touching a branch used elsewhere
+ The second batch
+ The third batch
+ The fourth batch
+ The fifth batch
+ The sixth batch
+ messages: mark some strings with "up-to-date" not to touch
+ The seventh batch
+ The eighth batch
+ The ninth batch
+ ls-files: avoid the verb "deprecate" for individual options
+ The tenth batch
+ The eleventh batch
+ t0091: allow test in a repository without tags
+ The twelfth batch
+ Makefile: reduce repetitive library paths
+ Makefile: simplify output of the libpath_template
+ The thirteenth batch
+ t/Makefile: say the default target upfront
+ The fourteenth batch
+ The fifteenth batch
+ Git 2.44-rc0
+
+Justin Tobler (2):
+ t1401: remove lockfile creation
+ t5541: remove lockfile creation
+
+Kristoffer Haugsbakk (5):
+ config: format newlines
+ config: rename global config function
+ config: factor out global config file retrieval
+ maintenance: use XDG config if it exists
+ config: add back code comment
+
+Kyle Lippincott (1):
+ setup: allow cwd=.git w/ bareRepository=explicit
+
+M Hickford (1):
+ credential/wincred: store oauth_refresh_token
+
+Marcelo Roberto Jimenez (1):
+ gitweb: die when a configuration file cannot be read
+
+Patrick Steinhardt (93):
+ t: allow skipping expected object ID in `ref-store update-ref`
+ t: convert tests to not write references via the filesystem
+ t: convert tests to not access symrefs via the filesystem
+ t: convert tests to not access reflog via the filesystem
+ t1450: convert tests to remove worktrees via git-worktree(1)
+ t4207: delete replace references via git-update-ref(1)
+ t7300: assert exact states of repo
+ t7900: assert the absence of refs via git-for-each-ref(1)
+ t: mark several tests that assume the files backend with REFFILES
+ t/lib-httpd: dynamically detect httpd and modules path
+ t/lib-httpd: stop using legacy crypt(3) for authentication
+ t9164: fix inability to find basename(1) in Subversion hooks
+ global: convert trivial usages of `test <expr> -a/-o <expr>`
+ contrib/subtree: stop using `-o` to test for number of args
+ contrib/subtree: convert subtree type check to use case statement
+ Makefile: stop using `test -o` when unlinking duplicate executables
+ t5510: ensure that the packed-refs file needs locking
+ refs/files: use transactions to delete references
+ refs: deduplicate code to delete references
+ refs: remove `delete_refs` callback from backends
+ setup: extract function to create the refdb
+ setup: allow skipping creation of the refdb
+ remote-curl: rediscover repository when fetching refs
+ builtin/clone: fix bundle URIs with mismatching object formats
+ builtin/clone: set up sparse checkout later
+ builtin/clone: skip reading HEAD when retrieving remote
+ builtin/clone: create the refdb with the correct object format
+ wt-status: read HEAD and ORIG_HEAD via the refdb
+ refs: propagate errno when reading special refs fails
+ refs: complete list of special refs
+ bisect: consistently write BISECT_EXPECTED_REV via the refdb
+ t: introduce DEFAULT_REPO_FORMAT prereq
+ worktree: skip reading HEAD when repairing worktrees
+ refs: refactor logic to look up storage backends
+ setup: start tracking ref storage format
+ setup: set repository's formats on init
+ setup: introduce "extensions.refStorage" extension
+ setup: introduce GIT_DEFAULT_REF_FORMAT envvar
+ t: introduce GIT_TEST_DEFAULT_REF_FORMAT envvar
+ builtin/rev-parse: introduce `--show-ref-format` flag
+ builtin/init: introduce `--ref-format=` value flag
+ builtin/clone: introduce `--ref-format=` value flag
+ t9500: write "extensions.refstorage" into config
+ reftable/stack: do not overwrite errors when compacting
+ reftable/stack: do not auto-compact twice in `reftable_stack_add()`
+ reftable/writer: fix index corruption when writing multiple indices
+ reftable/record: constify some parts of the interface
+ reftable/record: store "val1" hashes as static arrays
+ reftable/record: store "val2" hashes as static arrays
+ reftable/merged: really reuse buffers to compute record keys
+ reftable/merged: transfer ownership of records when iterating
+ git-prompt: stop manually parsing HEAD with unknown ref formats
+ ci: add job performing static analysis on GitLab CI
+ refs: prepare `refs_init_db()` for initializing worktree refs
+ setup: move creation of "refs/" into the files backend
+ refs/files: skip creation of "refs/{heads,tags}" for worktrees
+ builtin/worktree: move setup of commondir file earlier
+ worktree: expose interface to look up worktree by name
+ builtin/worktree: create refdb via ref backend
+ reftable/stack: refactor stack reloading to have common exit path
+ reftable/stack: refactor reloading to use file descriptor
+ reftable/stack: use stat info to avoid re-reading stack list
+ reftable/blocksource: refactor code to match our coding style
+ reftable/blocksource: use mmap to read tables
+ git-p4: stop reaching into the refdb
+ commit-graph: fix memory leak when not writing graph
+ completion: discover repo path in `__git_pseudoref_exists ()`
+ t9902: verify that completion does not print anything
+ completion: improve existence check for pseudo-refs
+ completion: silence pseudoref existence check
+ completion: treat dangling symrefs as existing pseudorefs
+ t7527: decrease likelihood of racing with fsmonitor daemon
+ Makefile: detect new Homebrew location for ARM-based Macs
+ ci: handle TEST_OUTPUT_DIRECTORY when printing test failures
+ ci: make p4 setup on macOS more robust
+ ci: add macOS jobs to GitLab CI
+ reftable/stack: unconditionally reload stack after commit
+ reftable/stack: fix race in up-to-date check
+ sequencer: clean up pseudo refs with REF_NO_DEREF
+ sequencer: delete REBASE_HEAD in correct repo when picking commits
+ refs: convert AUTO_MERGE to become a normal pseudo-ref
+ sequencer: introduce functions to handle autostashes via refs
+ refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref
+ refs: redefine special refs
+ Documentation: add "special refs" to the glossary
+ reftable/stack: adjust permissions of compacted tables
+ t1300: make tests more robust with non-default ref backends
+ t1301: mark test for `core.sharedRepository` as reffiles specific
+ t1302: make tests more robust with new extensions
+ t1419: mark test suite as files-backend specific
+ t5526: break test submodule differently
+ t: mark tests regarding git-pack-refs(1) to be backend specific
+ reftable/stack: fsync "tables.list" during compaction
+
+Philippe Blain (5):
+ completion: complete missing rev-list options
+ completion: complete --patch-with-raw
+ completion: complete --encoding
+ completion: complete missing 'git log' options
+ ci(github): also skip logs of broken test cases
+
+Phillip Wood (1):
+ unit tests: add TAP unit test framework
+
+René Scharfe (3):
+ git-compat-util: convert skip_{prefix,suffix}{,_mem} to bool
+ mem-pool: fix big allocations
+ mem-pool: simplify alignment calculation
+
+Rubén Justo (9):
+ branch: clarify <oldbranch> term
+ advice: sort the advice related lists
+ advice: fix an unexpected leading space
+ branch: make the advice to force-deleting a conditional one
+ advice: allow disabling the automatic hint in advise_if_enabled()
+ t5332: mark as leak-free
+ t6113: mark as leak-free
+ test-lib: check for TEST_PASSES_SANITIZE_LEAK
+ t0080: mark as leak-free
+
+Simon Ser (1):
+ format-patch: fix ignored encode_email_headers for cover letter
+
+Sören Krecker (1):
+ mingw: give more details about unsafe directory's ownership
+
+Tamino Bauknecht (1):
+ fetch: add new config option fetch.all
+
+Taylor Blau (26):
+ pack-objects: free packing_data in more places
+ pack-bitmap-write: deep-clear the `bb_commit` slab
+ pack-bitmap: plug leak in find_objects()
+ midx: factor out `fill_pack_info()`
+ midx: implement `BTMP` chunk
+ midx: implement `midx_locate_pack()`
+ pack-bitmap: pass `bitmapped_pack` struct to pack-reuse functions
+ ewah: implement `bitmap_is_empty()`
+ pack-bitmap: simplify `reuse_partial_packfile_from_bitmap()` signature
+ pack-bitmap: return multiple packs via `reuse_partial_packfile_from_bitmap()`
+ pack-objects: parameterize pack-reuse routines over a single pack
+ pack-objects: keep track of `pack_start` for each reuse pack
+ pack-objects: pass `bitmapped_pack`'s to pack-reuse functions
+ pack-objects: prepare `write_reused_pack()` for multi-pack reuse
+ pack-objects: prepare `write_reused_pack_verbatim()` for multi-pack reuse
+ pack-objects: include number of packs reused in output
+ git-compat-util.h: implement checked size_t to uint32_t conversion
+ midx: implement `midx_preferred_pack()`
+ pack-revindex: factor out `midx_key_to_pack_pos()` helper
+ pack-revindex: implement `midx_pair_to_pack_pos()`
+ pack-bitmap: prepare to mark objects from multiple packs for reuse
+ pack-objects: add tracing for various packfile metrics
+ t/test-lib-functions.sh: implement `test_trace2_data` helper
+ pack-objects: allow setting `pack.allowPackReuse` to "single"
+ pack-bitmap: enable reuse from all bitmapped packs
+ t/perf: add performance tests for multi-pack reuse
+
+Victoria Dye (14):
+ ref-filter.c: really don't sort when using --no-sort
+ ref-filter.h: add max_count and omit_empty to ref_format
+ ref-filter.h: move contains caches into filter
+ ref-filter.h: add functions for filter/format & format-only
+ ref-filter.c: rename 'ref_filter_handler()' to 'filter_one()'
+ ref-filter.c: refactor to create common helper functions
+ ref-filter.c: filter & format refs in the same callback
+ for-each-ref: clean up documentation of --format
+ ref-filter.c: use peeled tag for '*' format fields
+ t/perf: add perf tests for for-each-ref
+ submodule-config.h: move check_submodule_url
+ test-submodule: remove command line handling for check-name
+ t7450: test submodule urls
+ submodule-config.c: strengthen URL fsck check
+
+Zach FettersMoore (1):
+ subtree: fix split processing with multiple subtrees present
+
+
+Version v2.43.4; changes since v2.43.3:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (6):
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (24):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+ Git 2.41.1
+ Git 2.42.2
+ Git 2.43.4
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
+Version v2.43.3; changes since v2.43.2:
+---------------------------------------
+
+Jeff King (1):
+ trailer: fix comment/cut-line regression with opts->no_divider
+
+Junio C Hamano (1):
+ Git 2.43.3
+
+
+Version v2.43.2; changes since v2.43.1:
+---------------------------------------
+
+Elijah Newren (1):
+ diffcore-delta: avoid ignoring final 'line' of file
+
+James Touton (1):
+ git-p4: use raw string literals for regular expressions
+
+Jeff King (1):
+ diff: handle NULL meta-info when spawning external diff
+
+Johannes Schindelin (1):
+ win32: special-case `ENOSPC` when writing to a pipe
+
+Junio C Hamano (11):
+ Docs: majordomo@vger.kernel.org has been decomissioned
+ CoC: whitespace fix
+ builtin/worktree: comment style fixes
+ merge-ort.c: comment style fix
+ reftable/pq_test: comment style fix
+ tag: fix sign_buffer() call to create a signed tag
+ bisect: document "terms" subcommand more fully
+ bisect: document command line arguments for "bisect start"
+ ssh signing: signal an error with a negative return value
+ write-or-die: fix the polarity of GIT_FLUSH environment variable
+ Git 2.43.2
+
+Linus Arver (1):
+ strvec: use correct member name in comments
+
+Nikolay Borisov (1):
+ rebase: fix documentation about used shell in -x
+
+Nikolay Edigaryev (1):
+ rev-list-options: fix off-by-one in '--filter=blob:limit=<n>' explainer
+
+Patrick Steinhardt (1):
+ builtin/stash: report failure to write to index
+
+Philippe Blain (2):
+ imap-send: add missing "strbuf.h" include under NO_CURL
+ .github/PULL_REQUEST_TEMPLATE.md: add a note about single-commit PRs
+
+René Scharfe (2):
+ parse-options: fully disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN
+ parse-options: simplify positivation handling
+
+Sam Delmerico (1):
+ push: region_leave trace for negotiate_using_fetch
+
+Taylor Blau (1):
+ pack-bitmap: drop unused `reuse_objects`
+
+Toon Claes (1):
+ builtin/show-ref: treat directory as non-existing in --exists
+
+
+Version v2.43.1; changes since v2.43.0:
+---------------------------------------
+
+Chandra Pratap (2):
+ sideband.c: remove redundant 'NEEDSWORK' tag
+ write-or-die: make GIT_FLUSH a Boolean environment variable
+
+Elijah Newren (12):
+ treewide: remove unnecessary includes from header files
+ treewide: remove unnecessary includes in source files
+ archive.h: remove unnecessary include
+ blame.h: remove unnecessary includes
+ fsmonitor--daemon.h: remove unnecessary includes
+ http.h: remove unnecessary include
+ line-log.h: remove unnecessary include
+ pkt-line.h: remove unnecessary include
+ submodule-config.h: remove unnecessary include
+ trace2/tr2_tls.h: remove unnecessary include
+ treewide: add direct includes currently only pulled in transitively
+ treewide: remove unnecessary includes in source files
+
+Eric Sunshine (1):
+ git-add.txt: add missing short option -A to synopsis
+
+Illia Bobyr (1):
+ rebase: clarify --reschedule-failed-exec default
+
+Jeff Hostetler (3):
+ trace2: fix signature of trace2_def_param() macro
+ t0211: test URL redacting in PERF format
+ t0212: test URL redacting in EVENT format
+
+Jeff King (24):
+ parse-options: decouple "--end-of-options" and "--"
+ bisect: always clean on reset
+ config: handle NULL value when parsing non-bools
+ setup: handle NULL value when parsing extensions
+ trace2: handle NULL values in tr2_sysenv config callback
+ help: handle NULL value for alias.* config
+ submodule: handle NULL value when parsing submodule.*.branch
+ trailer: handle NULL value when parsing trailer-specific config
+ fsck: handle NULL value when parsing message config
+ config: reject bogus values for core.checkstat
+ git_xmerge_config(): prefer error() to die()
+ imap-send: don't use git_die_config() inside callback
+ config: use config_error_nonbool() instead of custom messages
+ diff: give more detailed messages for bogus diff.* config
+ config: use git_config_string() for core.checkRoundTripEncoding
+ push: drop confusing configset/callback redundancy
+ gpg-interface: drop pointless config_error_nonbool() checks
+ sequencer: simplify away extra git_config_string() call
+ mailinfo: fix out-of-bounds memory reads in unquote_quoted_pair()
+ t5100: make rfc822 comment test more careful
+ mailinfo: avoid recursion when unquoting From headers
+ t1006: add tests for %(objectsize:disk)
+ commit-graph: retain commit slab when closing NULL commit_graph
+ index-pack: spawn threads atomically
+
+Jiang Xin (5):
+ t5574: test porcelain output of atomic fetch
+ fetch: no redundant error message for atomic fetch
+ test-pkt-line: add option parser for unpack-sideband
+ pkt-line: memorize sideband fragment in reader
+ pkt-line: do not chomp newlines for sideband messages
+
+Johannes Schindelin (3):
+ ci: avoid running the test suite _twice_
+ packfile.c: fix a typo in `each_file_in_pack_dir_fn()`'s declaration
+ trace2: redact passwords from https:// URLs by default
+
+Josh Brobst (1):
+ builtin/reflog.c: fix dry-run option short name
+
+Josh Soref (13):
+ doc: update links to current pages
+ doc: switch links to https
+ doc: update links for andre-simon.de
+ doc: refer to internet archive
+ CodingGuidelines: move period inside parentheses
+ CodingGuidelines: write punctuation marks
+ SubmittingPatches: drop ref to "What's in git.git"
+ SubmittingPatches: discourage new trailers
+ SubmittingPatches: update extra tags list
+ SubmittingPatches: provide tag naming advice
+ SubmittingPatches: clarify GitHub visual
+ SubmittingPatches: clarify GitHub artifact format
+ SubmittingPatches: hyphenate non-ASCII
+
+Julian Prein (1):
+ hooks--pre-commit: detect non-ASCII when renaming
+
+Junio C Hamano (13):
+ orphan/unborn: add to the glossary and use them consistently
+ orphan/unborn: fix use of 'orphan' in end-user facing messages
+ revision: parse integer arguments to --max-count, --skip, etc., more carefully
+ git.txt: HEAD is not that special
+ git-bisect.txt: BISECT_HEAD is not that special
+ refs.h: HEAD is not that special
+ docs: AUTO_MERGE is not that special
+ docs: MERGE_AUTOSTASH is not that special
+ doc: format.notes specify a ref under refs/notes/ hierarchy
+ remote.h: retire CAS_OPT_NAME
+ archive: "--list" does not take further options
+ sparse-checkout: use default patterns for 'set' only !stdin
+ Git 2.43.1
+
+Linus Arver (3):
+ commit: ignore_non_trailer computes number of bytes to ignore
+ trailer: find the end of the log message
+ trailer: use offsets for trailer_start/trailer_end
+
+Maarten van der Schrieck (1):
+ Documentation: fix statement about rebase.instructionFormat
+
+Marcel Krause (1):
+ doc: make the gitfile syntax easier to discover
+
+Michael Lohmann (2):
+ Documentation/git-merge.txt: fix reference to synopsis
+ Documentation/git-merge.txt: use backticks for command wrapping
+
+Patrick Steinhardt (31):
+ ci: reorder definitions for grouping functions
+ ci: make grouping setup more generic
+ ci: group installation of Docker dependencies
+ ci: split out logic to set up failed test artifacts
+ ci: unify setup of some environment variables
+ ci: squelch warnings when testing with unusable Git repo
+ ci: install test dependencies for linux-musl
+ ci: add support for GitLab CI
+ commit-graph: disable GIT_COMMIT_GRAPH_PARANOIA by default
+ t0410: mark tests to require the reffiles backend
+ t1400: split up generic reflog tests from the reffile-specific ones
+ t1401: stop treating FETCH_HEAD as real reference
+ t1410: use test-tool to create empty reflog
+ t1417: make `reflog --updateref` tests backend agnostic
+ t3310: stop checking for reference existence via `test -f`
+ t4013: simplify magic parsing and drop "failure"
+ t5401: speed up creation of many branches
+ t5551: stop writing packed-refs directly
+ t6301: write invalid object ID via `test-tool ref-store`
+ reftable: wrap EXPECT macros in do/while
+ reftable: handle interrupted reads
+ reftable: handle interrupted writes
+ reftable/stack: verify that `reftable_stack_add()` uses auto-compaction
+ reftable/stack: perform auto-compaction with transactional interface
+ reftable/stack: reuse buffers when reloading stack
+ reftable/stack: fix stale lock when dying
+ reftable/stack: fix use of unseeded randomness
+ reftable/merged: reuse buffer to compute record keys
+ reftable/block: introduce macro to initialize `struct block_iter`
+ reftable/block: reuse buffer to compute record keys
+ tests: adjust whitespace in chainlint expectations
+
+René Scharfe (14):
+ column: release strbuf and string_list after use
+ i18n: factorize even more 'incompatible options' messages
+ push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror
+ repack: use die_for_incompatible_opt3() for -A/-k/--cruft
+ revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
+ revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
+ clean: factorize incompatibility message
+ worktree: standardize incompatibility messages
+ worktree: simplify incompatibility message for --orphan and commit-ish
+ show-ref: use die_for_incompatible_opt3()
+ t6300: avoid hard-coding object sizes
+ rebase: use strvec_pushf() for format-patch revisions
+ fast-import: use mem_pool_calloc()
+ t1006: prefer shell loop to awk for packed object sizes
+
+Rubén Justo (1):
+ status: fix branch shown when not only bisecting
+
+Shreyansh Paliwal (1):
+ test-lib-functions.sh: fix test_grep fail message wording
+
+Stan Hu (2):
+ completion: refactor existence checks for pseudorefs
+ completion: support pseudoref existence checks for reftables
+
+Todd Zullinger (2):
+ perl: bump the required Perl version to 5.8.1 from 5.8.0
+ send-email: avoid duplicate specification warnings
+
+
Version v2.43.0; changes since v2.43.0-rc2:
-------------------------------------------
@@ -139,7 +1763,7 @@ brian m. carlson (1):
merge-file: add an option to process object IDs
-Version v2.43.0-rc0; changes since v2.42.1:
+Version v2.43.0-rc0; changes since v2.42.2:
-------------------------------------------
Alyssa Ross (1):
@@ -535,6 +2159,59 @@ brian m. carlson (1):
doc: correct the 50 characters soft limit (+)
+Version v2.42.2; changes since v2.42.1:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (6):
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (23):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+ Git 2.41.1
+ Git 2.42.2
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
Version v2.42.1; changes since v2.42.0:
---------------------------------------
@@ -800,7 +2477,7 @@ brian m. carlson (2):
gitignore: ignore clangd .cache directory
-Version v2.42.0-rc0; changes since v2.41.0:
+Version v2.42.0-rc0; changes since v2.41.1:
-------------------------------------------
Alejandro R. Sedeño (1):
@@ -921,7 +2598,7 @@ Jacob Keller (1):
Jan Klötzke (1):
ref-filter: handle nested tags in --points-at option
-Jeff King (36):
+Jeff King (35):
format-patch: free rev.message_id when exiting
format-patch: free elements of rev.ref_message_ids list
pathspec: factor out magic-to-name function
@@ -931,7 +2608,6 @@ Jeff King (36):
ci: run ASan/UBSan in a single job
ci: drop linux-clang job
commit: pass --no-divider to interpret-trailers
- http: handle both "h2" and "h2h3" in curl info lines
var: mark unused parameters in git_var callbacks
imap-send: use server conf argument in setup_curl()
imap-send: drop unused parameter from imap_cmd_cb callback
@@ -1289,6 +2965,61 @@ brian m. carlson (7):
var: add config file locations
+Version v2.41.1; changes since v2.41.0:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (9):
+ http: handle both "h2" and "h2h3" in curl info lines
+ http: factor out matching of curl http/2 trace lines
+ http: update curl http/2 info matching for curl 8.3.0
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (22):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+ Git 2.41.1
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
Version v2.41.0; changes since v2.41.0-rc2:
-------------------------------------------
@@ -1382,7 +3113,7 @@ brian m. carlson (1):
upload-pack: advertise capabilities when cloning empty repos
-Version v2.41.0-rc0; changes since v2.40.1:
+Version v2.41.0-rc0; changes since v2.40.2:
-------------------------------------------
Adam Johnson (1):
@@ -1969,6 +3700,60 @@ ZheNing Hu (2):
branch, for-each-ref, tag: add option to omit empty lines
+Version v2.40.2; changes since v2.40.1:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff King (9):
+ http: handle both "h2" and "h2h3" in curl info lines
+ http: factor out matching of curl http/2 trace lines
+ http: update curl http/2 info matching for curl 8.3.0
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (21):
+ repository: avoid leaking `fsmonitor` data
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+ Git 2.40.2
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
Version v2.40.1; changes since v2.40.0:
---------------------------------------
@@ -2144,7 +3929,7 @@ idriss fekir (1):
trace.c, git.c: remove unnecessary parameter to trace_repo_setup()
-Version v2.40.0-rc0; changes since v2.39.3:
+Version v2.40.0-rc0; changes since v2.39.4:
-------------------------------------------
Adam Szkoda (1):
@@ -2248,11 +4033,10 @@ Harshil-Jani (2):
mingw: remove duplicate `USE_NED_ALLOCATOR` directive
mingw: remove msysGit/MSYS1 support
-Jeff Hostetler (2):
+Jeff Hostetler (1):
fsmonitor: fix race seen in t7527
- fsmonitor: eliminate call to deprecated FSEventStream function
-Jeff King (32):
+Jeff King (28):
git-jump: move valid-mode check earlier
pack-bitmap.c: break out of the bitmap loop early if not tracing
pack-bitmap.c: trace bitmap ignore logs when midx-bitmap is found
@@ -2279,10 +4063,6 @@ Jeff King (32):
hash-object: use fsck for object checks
hash-object: fix descriptor leak with --literally
fsck: do not assume NUL-termination of buffers
- t/lib-httpd: bump required apache version to 2.2
- t/lib-httpd: bump required apache version to 2.4
- t/lib-httpd: drop SSLMutex config
- t/lib-httpd: increase ssl key size to 2048 bits
doc/ls-remote: cosmetic cleanups for examples
doc/ls-remote: clarify pattern format
@@ -2557,6 +4337,81 @@ ZheNing Hu (1):
date.c: allow ISO 8601 reduced precision times
+Version v2.39.4; changes since v2.39.3:
+---------------------------------------
+
+Filip Hejsek (4):
+ t0411: add tests for cloning from partial repo
+ has_dir_name(): do not get confused by characters < '/'
+ t7423: add tests for symlinked submodule directories
+ clone: prevent clashing git dirs when cloning submodule in parallel
+
+Jeff Hostetler (1):
+ fsmonitor: eliminate call to deprecated FSEventStream function
+
+Jeff King (29):
+ t/lib-httpd: bump required apache version to 2.2
+ t/lib-httpd: bump required apache version to 2.4
+ t/lib-httpd: drop SSLMutex config
+ t/lib-httpd: increase ssl key size to 2048 bits
+ t5541: run "used receive-pack service" test earlier
+ t5541: stop marking "used receive-pack service" test as v0 only
+ t5541: simplify and move "no empty path components" test
+ t5551: drop redundant grep for Accept-Language
+ t5551: lower-case headers in expected curl trace
+ t5551: handle HTTP/2 when checking curl trace
+ t5551: stop forcing clone to run with v0 protocol
+ t5551: handle v2 protocol when checking curl trace
+ t5551: handle v2 protocol in upload-pack service test
+ t5551: simplify expected cookie file
+ t5551: handle v2 protocol in cookie test
+ t5551: drop curl trace lines without headers
+ t/lib-httpd: respect $HTTPD_PROTO in expect_askpass()
+ t/lib-httpd: enable HTTP/2 "h2" protocol, not just h2c
+ t5559: fix test failures with LIB_HTTPD_SSL
+ t5559: make SSL/TLS the default
+ http: handle both "h2" and "h2h3" in curl info lines
+ http: factor out matching of curl http/2 trace lines
+ http: update curl http/2 info matching for curl 8.3.0
+ http: reset POSTFIELDSIZE when clearing curl handle
+ INSTALL: bump libcurl version to 7.21.3
+ remote-curl: add Transfer-Encoding header only for older curl
+ test-lib: ignore uninteresting LSan output
+ upload-pack: disable lazy-fetching by default
+ docs: document security issues around untrusted .git dirs
+
+Johannes Schindelin (19):
+ ci: upgrade to using macos-13
+ ci(linux-asan/linux-ubsan): let's save some time
+ ci: bump remaining outdated Actions versions
+ ci(linux32): add a note about Actions that must not be updated
+ fetch/clone: detect dubious ownership of local repositories
+ submodules: submodule paths must not contain symlinks
+ clone_submodule: avoid using `access()` on directories
+ submodule: require the submodule path to contain directories only
+ t5510: verify that D/F confusion cannot lead to an RCE
+ entry: report more colliding paths
+ clone: when symbolic links collide with directories, keep the latter
+ find_hook(): refactor the `STRIP_EXTENSION` logic
+ init: refactor the template directory discovery into its own function
+ Add a helper function to compare file contents
+ clone: prevent hooks from running during a clone
+ init.templateDir: consider this config setting protected
+ core.hooksPath: add some protection while cloning
+ fsck: warn about symlink pointing inside a gitdir
+ Git 2.39.4
+
+Junio C Hamano (2):
+ GitHub Actions: update to checkout@v4
+ GitHub Actions: update to github-script@v7
+
+Patrick Steinhardt (4):
+ builtin/clone: stop resolving symlinks when copying files
+ builtin/clone: abort when hardlinked source and target file differ
+ setup.c: introduce `die_upon_dubious_ownership()`
+ builtin/clone: refuse local clones of unsafe repositories
+
+
Version v2.39.3; changes since v2.39.2:
---------------------------------------
diff --git a/debian/copyright b/debian/copyright
index 02ae6fa..13fb9b9 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -3,7 +3,7 @@ Upstream-Contact: git@vger.kernel.org
Source: https://www.kernel.org/pub/software/scm/git/
Files: *
-Copyright: © 2005-2023, Linus Torvalds and others.
+Copyright: © 2005-2024, Linus Torvalds and others.
License: GPL-2
Files: reftable/* t/t0032-reftable-unittest.sh
@@ -218,11 +218,6 @@ Copyright: © 2011, John Szakmeister <john@szakmeister.net>
© 2012, Philipp A. Hartmann <pah@qo.cx>
License: GPL-2+
-Files: contrib/hg-to-git/hg-to-git.py
-Copyright: © 2007, Stelian Pop <stelian@popies.net>
-Name: hg-to-git.py - A Mercurial to GIT converter
-License: GPL-2+
-
Files: contrib/mw-to-git/git-*.perl contrib/mw-to-git/t/t*
Copyright: © 2011
Jérémie Nikaes <jeremie.nikaes@ensimag.imag.fr>
diff --git a/debian/patches/0001-hook-plug-a-new-memory-leak.diff b/debian/patches/0001-hook-plug-a-new-memory-leak.diff
new file mode 100644
index 0000000..ab74831
--- /dev/null
+++ b/debian/patches/0001-hook-plug-a-new-memory-leak.diff
@@ -0,0 +1,34 @@
+From 94f95a123b10f3837e181ad93b81f1a4f53bb8fc Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:39 +0000
+Subject: hook: plug a new memory leak
+
+commit 2811ce3a79dc8a0105a6defb59718b35f5b397aa upstream.
+
+In 8db1e8743c0 (clone: prevent hooks from running during a clone,
+2024-03-28), I introduced an inadvertent memory leak that was
+unfortunately not caught before v2.45.1 was released. Here is a fix.
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ hook.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/hook.c b/hook.c
+index eebc4d44734..8de469b134a 100644
+--- a/hook.c
++++ b/hook.c
+@@ -26,8 +26,10 @@ static int identical_to_template_hook(const char *name, const char *path)
+ found_template_hook = access(template_path.buf, X_OK) >= 0;
+ }
+ #endif
+- if (!found_template_hook)
++ if (!found_template_hook) {
++ strbuf_release(&template_path);
+ return 0;
++ }
+
+ ret = do_files_match(template_path.buf, path);
+
diff --git a/debian/patches/0002-Revert-core.hooksPath-add-some-protection-while-cloni.diff b/debian/patches/0002-Revert-core.hooksPath-add-some-protection-while-cloni.diff
new file mode 100644
index 0000000..8e1c975
--- /dev/null
+++ b/debian/patches/0002-Revert-core.hooksPath-add-some-protection-while-cloni.diff
@@ -0,0 +1,82 @@
+From 7db946419c29e185f1cc6e544cfb47b442019ac7 Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:41 +0000
+Subject: Revert "core.hooksPath: add some protection while cloning"
+
+commit f13e8e2ea56ceef593311b3cff1ba7ba1a493682 upstream.
+
+This defense-in-depth was intended to protect the clone operation
+against future escalations where bugs in `git clone` would allow
+attackers to write arbitrary files in the `.git/` directory would allow
+for Remote Code Execution attacks via maliciously-placed hooks.
+
+However, it turns out that the `core.hooksPath` protection has
+unintentional side effects so severe that they do not justify the
+benefit of the protections. For example, it has been reported in
+https://lore.kernel.org/git/FAFA34CB-9732-4A0A-87FB-BDB272E6AEE8@alchemists.io/
+that the following invocation, which is intended to make `git clone`
+safer, is itself broken by that protective measure:
+
+ git clone --config core.hooksPath=/dev/null <url>
+
+Since it turns out that the benefit does not justify the cost, let's revert
+20f3588efc6 (core.hooksPath: add some protection while cloning,
+2024-03-30).
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ config.c | 13 +------------
+ t/t1800-hook.sh | 15 ---------------
+ 2 files changed, 1 insertion(+), 27 deletions(-)
+
+diff --git a/config.c b/config.c
+index 77a0fd2d80e..ae3652b08fa 100644
+--- a/config.c
++++ b/config.c
+@@ -1416,19 +1416,8 @@ static int git_default_core_config(const char *var, const char *value,
+ if (!strcmp(var, "core.attributesfile"))
+ return git_config_pathname(&git_attributes_file, var, value);
+
+- if (!strcmp(var, "core.hookspath")) {
+- if (ctx->kvi && ctx->kvi->scope == CONFIG_SCOPE_LOCAL &&
+- git_env_bool("GIT_CLONE_PROTECTION_ACTIVE", 0))
+- die(_("active `core.hooksPath` found in the local "
+- "repository config:\n\t%s\nFor security "
+- "reasons, this is disallowed by default.\nIf "
+- "this is intentional and the hook should "
+- "actually be run, please\nrun the command "
+- "again with "
+- "`GIT_CLONE_PROTECTION_ACTIVE=false`"),
+- value);
++ if (!strcmp(var, "core.hookspath"))
+ return git_config_pathname(&git_hooks_path, var, value);
+- }
+
+ if (!strcmp(var, "core.bare")) {
+ is_bare_repository_cfg = git_config_bool(var, value);
+diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
+index 1894ebeb0e8..8b0234cf2d5 100755
+--- a/t/t1800-hook.sh
++++ b/t/t1800-hook.sh
+@@ -185,19 +185,4 @@ test_expect_success 'stdin to hooks' '
+ test_cmp expect actual
+ '
+
+-test_expect_success 'clone protections' '
+- test_config core.hooksPath "$(pwd)/my-hooks" &&
+- mkdir -p my-hooks &&
+- write_script my-hooks/test-hook <<-\EOF &&
+- echo Hook ran $1
+- EOF
+-
+- git hook run test-hook 2>err &&
+- test_grep "Hook ran" err &&
+- test_must_fail env GIT_CLONE_PROTECTION_ACTIVE=true \
+- git hook run test-hook 2>err &&
+- test_grep "active .core.hooksPath" err &&
+- test_grep ! "Hook ran" err
+-'
+-
+ test_done
diff --git a/debian/patches/0003-tests-verify-that-clone-c-core.hooksPath-dev-null-wor.diff b/debian/patches/0003-tests-verify-that-clone-c-core.hooksPath-dev-null-wor.diff
new file mode 100644
index 0000000..9a494d9
--- /dev/null
+++ b/debian/patches/0003-tests-verify-that-clone-c-core.hooksPath-dev-null-wor.diff
@@ -0,0 +1,48 @@
+From ce34e1b7a072db221190446e79cb373c7f6010a5 Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:42 +0000
+Subject: tests: verify that `clone -c core.hooksPath=/dev/null` works again
+
+commit a25a15726f4d1bf1c8362f1b3146096d6a87f965 upstream.
+
+As part of the protections added in Git v2.45.1 and friends,
+repository-local `core.hooksPath` settings are no longer allowed, as a
+defense-in-depth mechanism to prevent future Git vulnerabilities to
+raise to critical level if those vulnerabilities inadvertently allow the
+repository-local config to be written.
+
+What the added protection did not anticipate is that such a
+repository-local `core.hooksPath` can not only be used to point to
+maliciously-placed scripts in the current worktree, but also to
+_prevent_ hooks from being called altogether.
+
+We just reverted the `core.hooksPath` protections, based on the Git
+maintainer's recommendation in
+https://lore.kernel.org/git/xmqq4jaxvm8z.fsf@gitster.g/ to address this
+concern as well as related ones. Let's make sure that we won't regress
+while trying to protect the clone operation further.
+
+Reported-by: Brooke Kuhlmann <brooke@alchemists.io>
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ t/t1350-config-hooks-path.sh | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/t/t1350-config-hooks-path.sh b/t/t1350-config-hooks-path.sh
+index f6dc83e2aab..45a04929170 100755
+--- a/t/t1350-config-hooks-path.sh
++++ b/t/t1350-config-hooks-path.sh
+@@ -41,4 +41,11 @@ test_expect_success 'git rev-parse --git-path hooks' '
+ test .git/custom-hooks/abc = "$(cat actual)"
+ '
+
++test_expect_success 'core.hooksPath=/dev/null' '
++ git clone -c core.hooksPath=/dev/null . no-templates &&
++ value="$(git -C no-templates config --local core.hooksPath)" &&
++ # The Bash used by Git for Windows rewrites `/dev/null` to `nul`
++ { test /dev/null = "$value" || test nul = "$value"; }
++'
++
+ test_done
diff --git a/debian/patches/0004-hook-clone-protections-add-escape-hatch.diff b/debian/patches/0004-hook-clone-protections-add-escape-hatch.diff
new file mode 100644
index 0000000..b2aa135
--- /dev/null
+++ b/debian/patches/0004-hook-clone-protections-add-escape-hatch.diff
@@ -0,0 +1,182 @@
+From 1f34eea689413fa10a664f4c154b097be7796b0a Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:43 +0000
+Subject: hook(clone protections): add escape hatch
+
+commit 85811d32aca9f0ba324a04bd8709c315d472efbe upstream.
+
+As defense-in-depth measures, v2.39.4 and friends leading up to v2.45.1
+introduced code that detects when hooks have been installed during a
+`git clone`, which is indicative of a common attack vector with critical
+severity that allows Remote Code Execution.
+
+There are legitimate use cases for such behavior, though, for example
+when those hooks stem from Git's own templates, which system
+administrators are at liberty to modify to enforce, say, commit message
+conventions. The git clone protections specifically add exceptions to
+allow for that.
+
+Another legitimate use case that has been identified too late to be
+handled in these security bug-fix versions is Git LFS: It behaves
+somewhat similar to common attack vectors by writing a few hooks while
+running the `smudge` filter during a regular clone, which means that Git
+has no chance to know that the hooks are benign and e.g. the
+`post-checkout` hook can be safely executed as part of the clone
+operation.
+
+To help Git LFS, and other tools behaving similarly (if there are any),
+let's add a new, multi-valued `safe.hook.sha256` config setting. Like
+the already-existing `safe.*` settings, it is ignored in
+repository-local configs, and it is interpreted as a list of SHA-256
+checksums of hooks' contents that are safe to execute during a clone
+operation. Future Git LFS versions will need to write those entries at
+the same time they install the `smudge`/`clean` filters.
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ Documentation/config/safe.txt | 6 +++
+ hook.c | 69 ++++++++++++++++++++++++++++++++---
+ t/t1800-hook.sh | 15 ++++++++
+ 3 files changed, 85 insertions(+), 5 deletions(-)
+
+diff --git a/Documentation/config/safe.txt b/Documentation/config/safe.txt
+index 577df40223a..e2eb4992bef 100644
+--- a/Documentation/config/safe.txt
++++ b/Documentation/config/safe.txt
+@@ -59,3 +59,9 @@ which id the original user has.
+ If that is not what you would prefer and want git to only trust
+ repositories that are owned by root instead, then you can remove
+ the `SUDO_UID` variable from root's environment before invoking git.
++
++safe.hook.sha256::
++ The value is the SHA-256 of hooks that are considered to be safe
++ to run during a clone operation.
+++
++Multiple values can be added via `git config --global --add`.
+diff --git a/hook.c b/hook.c
+index 8de469b134a..9eca6c0103a 100644
+--- a/hook.c
++++ b/hook.c
+@@ -10,6 +10,9 @@
+ #include "environment.h"
+ #include "setup.h"
+ #include "copy.h"
++#include "strmap.h"
++#include "hash-ll.h"
++#include "hex.h"
+
+ static int identical_to_template_hook(const char *name, const char *path)
+ {
+@@ -37,11 +40,66 @@ static int identical_to_template_hook(const char *name, const char *path)
+ return ret;
+ }
+
++static struct strset safe_hook_sha256s = STRSET_INIT;
++static int safe_hook_sha256s_initialized;
++
++static int get_sha256_of_file_contents(const char *path, char *sha256)
++{
++ struct strbuf sb = STRBUF_INIT;
++ int fd;
++ ssize_t res;
++
++ git_hash_ctx ctx;
++ const struct git_hash_algo *algo = &hash_algos[GIT_HASH_SHA256];
++ unsigned char hash[GIT_MAX_RAWSZ];
++
++ if ((fd = open(path, O_RDONLY)) < 0)
++ return -1;
++ res = strbuf_read(&sb, fd, 400);
++ close(fd);
++ if (res < 0)
++ return -1;
++
++ algo->init_fn(&ctx);
++ algo->update_fn(&ctx, sb.buf, sb.len);
++ strbuf_release(&sb);
++ algo->final_fn(hash, &ctx);
++
++ hash_to_hex_algop_r(sha256, hash, algo);
++
++ return 0;
++}
++
++static int safe_hook_cb(const char *key, const char *value,
++ const struct config_context *ctx UNUSED, void *d)
++{
++ struct strset *set = d;
++
++ if (value && !strcmp(key, "safe.hook.sha256"))
++ strset_add(set, value);
++
++ return 0;
++}
++
++static int is_hook_safe_during_clone(const char *name, const char *path, char *sha256)
++{
++ if (get_sha256_of_file_contents(path, sha256) < 0)
++ return 0;
++
++ if (!safe_hook_sha256s_initialized) {
++ safe_hook_sha256s_initialized = 1;
++ git_protected_config(safe_hook_cb, &safe_hook_sha256s);
++ }
++
++ return strset_contains(&safe_hook_sha256s, sha256);
++}
++
+ const char *find_hook(const char *name)
+ {
+ static struct strbuf path = STRBUF_INIT;
+
+ int found_hook;
++ char sha256[GIT_SHA256_HEXSZ + 1] = { '\0' };
+
+ strbuf_reset(&path);
+ strbuf_git_path(&path, "hooks/%s", name);
+@@ -73,13 +131,14 @@ const char *find_hook(const char *name)
+ return NULL;
+ }
+ if (!git_hooks_path && git_env_bool("GIT_CLONE_PROTECTION_ACTIVE", 0) &&
+- !identical_to_template_hook(name, path.buf))
++ !identical_to_template_hook(name, path.buf) &&
++ !is_hook_safe_during_clone(name, path.buf, sha256))
+ die(_("active `%s` hook found during `git clone`:\n\t%s\n"
+ "For security reasons, this is disallowed by default.\n"
+- "If this is intentional and the hook should actually "
+- "be run, please\nrun the command again with "
+- "`GIT_CLONE_PROTECTION_ACTIVE=false`"),
+- name, path.buf);
++ "If this is intentional and the hook is safe to run, "
++ "please run the following command and try again:\n\n"
++ " git config --global --add safe.hook.sha256 %s"),
++ name, path.buf, sha256);
+ return path.buf;
+ }
+
+diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
+index 8b0234cf2d5..cbdf60c451a 100755
+--- a/t/t1800-hook.sh
++++ b/t/t1800-hook.sh
+@@ -185,4 +185,19 @@ test_expect_success 'stdin to hooks' '
+ test_cmp expect actual
+ '
+
++test_expect_success '`safe.hook.sha256` and clone protections' '
++ git init safe-hook &&
++ write_script safe-hook/.git/hooks/pre-push <<-\EOF &&
++ echo "called hook" >safe-hook.log
++ EOF
++
++ test_must_fail env GIT_CLONE_PROTECTION_ACTIVE=true \
++ git -C safe-hook hook run pre-push 2>err &&
++ cmd="$(grep "git config --global --add safe.hook.sha256 [0-9a-f]" err)" &&
++ eval "$cmd" &&
++ GIT_CLONE_PROTECTION_ACTIVE=true \
++ git -C safe-hook hook run pre-push &&
++ test "called hook" = "$(cat safe-hook/safe-hook.log)"
++'
++
+ test_done
diff --git a/debian/patches/0005-hooks-clone-protections-special-case-current-Git-LFS-.diff b/debian/patches/0005-hooks-clone-protections-special-case-current-Git-LFS-.diff
new file mode 100644
index 0000000..bad67cd
--- /dev/null
+++ b/debian/patches/0005-hooks-clone-protections-special-case-current-Git-LFS-.diff
@@ -0,0 +1,82 @@
+From 09595d6984b41cbb6f653643f826fe009c56b493 Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:44 +0000
+Subject: hooks(clone protections): special-case current Git LFS hooks
+
+commit c65d0f9ee6894cdf7feeb51639870bfaf826c905 upstream.
+
+A notable regression in v2.45.1 and friends (all the way down to
+v2.39.4) has been that Git LFS-enabled clones error out with a message
+indicating that the `post-checkout` hook has been tampered with while
+cloning, and as a safety measure it is not executed.
+
+A generic fix for benign third-party applications wishing to write hooks
+during clone operations has been implemented in the parent of this
+commit: said applications are expected to add `safe.hook.sha256` values
+to a protected config.
+
+However, the current version of Git LFS, v3.5.1, cannot be adapted
+retroactively; Therefore, let's just hard-code the SHA-256 values for
+this version. That way, Git LFS usage will no longer be broken, and the
+next Git LFS version can be taught to add those `safe.hook.sha256`
+entries.
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ hook.c | 11 +++++++++++
+ t/t1800-hook.sh | 20 ++++++++++++++++++++
+ 2 files changed, 31 insertions(+)
+
+diff --git a/hook.c b/hook.c
+index 9eca6c0103a..fc0548edb66 100644
+--- a/hook.c
++++ b/hook.c
+@@ -88,6 +88,17 @@ static int is_hook_safe_during_clone(const char *name, const char *path, char *s
+
+ if (!safe_hook_sha256s_initialized) {
+ safe_hook_sha256s_initialized = 1;
++
++ /* Hard-code known-safe values for Git LFS v3.4.0..v3.5.1 */
++ /* pre-push */
++ strset_add(&safe_hook_sha256s, "df5417b2daa3aa144c19681d1e997df7ebfe144fb7e3e05138bd80ae998008e4");
++ /* post-checkout */
++ strset_add(&safe_hook_sha256s, "791471b4ff472aab844a4fceaa48bbb0a12193616f971e8e940625498b4938a6");
++ /* post-commit */
++ strset_add(&safe_hook_sha256s, "21e961572bb3f43a5f2fbafc1cc764d86046cc2e5f0bbecebfe9684a0b73b664");
++ /* post-merge */
++ strset_add(&safe_hook_sha256s, "75da0da66a803b4b030ad50801ba57062c6196105eb1d2251590d100edb9390b");
++
+ git_protected_config(safe_hook_cb, &safe_hook_sha256s);
+ }
+
+diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
+index cbdf60c451a..c51be5f7a06 100755
+--- a/t/t1800-hook.sh
++++ b/t/t1800-hook.sh
+@@ -200,4 +200,24 @@ test_expect_success '`safe.hook.sha256` and clone protections' '
+ test "called hook" = "$(cat safe-hook/safe-hook.log)"
+ '
+
++write_lfs_pre_push_hook () {
++ write_script "$1" <<-\EOF
++ command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting the 'pre-push' file in the hooks directory (set by 'core.hookspath'; usually '.git/hooks').\n"; exit 2; }
++ git lfs pre-push "$@"
++ EOF
++}
++
++test_expect_success 'Git LFS special-handling in clone protections' '
++ git init lfs-hooks &&
++ write_lfs_pre_push_hook lfs-hooks/.git/hooks/pre-push &&
++ write_script git-lfs <<-\EOF &&
++ echo "called $*" >fake-git-lfs.log
++ EOF
++
++ PATH="$PWD:$PATH" GIT_CLONE_PROTECTION_ACTIVE=true \
++ git -C lfs-hooks hook run pre-push &&
++ test_write_lines "called pre-push" >expect &&
++ test_cmp lfs-hooks/fake-git-lfs.log expect
++'
++
+ test_done
diff --git a/debian/patches/0006-hooks-clone-protections-simplify-templates-hooks-vali.diff b/debian/patches/0006-hooks-clone-protections-simplify-templates-hooks-vali.diff
new file mode 100644
index 0000000..a0642e3
--- /dev/null
+++ b/debian/patches/0006-hooks-clone-protections-simplify-templates-hooks-vali.diff
@@ -0,0 +1,198 @@
+From 8813bb5f4109991b88c98584a4abbb2d06cfbc28 Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:45 +0000
+Subject: hooks(clone protections): simplify templates hooks validation
+
+commit eff37e9b1dec25a3e1297eb89a36d8e68fe01b40 upstream.
+
+When an active hook is encountered during a clone operation, to protect
+against Remote Code Execution attack vectors, Git checks whether the
+hook was copied over from the templates directory.
+
+When that logic was introduced, there was no other way to check this
+than to add a function to compare files.
+
+In the meantime, we've added code to compute the SHA-256 checksum of a
+given hook and compare that checksum against a list of known-safe ones.
+
+Let's simplify the logic by adding to said list when copying the
+templates' hooks.
+
+We need to be careful to support multi-process operations such as
+recursive submodule clones: In such a scenario, the list of SHA-256
+checksums that is kept in memory is not enough, we also have to pass the
+information down to child processes via `GIT_CONFIG_PARAMETERS`.
+
+Extend the regression test in t5601 to ensure that recursive clones are
+handled as expected.
+
+Note: Technically there is no way that the checksums computed while
+initializing the submodules' gitdirs can be passed to the process that
+performs the checkout: For historical reasons, these operations are
+performed in processes spawned in separate loops from the
+super-project's `git clone` process. But since the templates from which
+the submodules are initialized are the very same as the ones from which
+the super-project is initialized, we can get away with using the list of
+SHA-256 checksums that is computed when initializing the super-project
+and passing that down to the `submodule--helper` processes that perform
+the recursive checkout.
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ hook.c | 43 ++++++++++++++++---------------------------
+ hook.h | 10 ++++++++++
+ setup.c | 7 +++++++
+ t/t5601-clone.sh | 19 +++++++++++++++++++
+ 4 files changed, 52 insertions(+), 27 deletions(-)
+
+diff --git a/hook.c b/hook.c
+index fc0548edb66..8ac51c9912b 100644
+--- a/hook.c
++++ b/hook.c
+@@ -14,32 +14,6 @@
+ #include "hash-ll.h"
+ #include "hex.h"
+
+-static int identical_to_template_hook(const char *name, const char *path)
+-{
+- const char *env = getenv("GIT_CLONE_TEMPLATE_DIR");
+- const char *template_dir = get_template_dir(env && *env ? env : NULL);
+- struct strbuf template_path = STRBUF_INIT;
+- int found_template_hook, ret;
+-
+- strbuf_addf(&template_path, "%s/hooks/%s", template_dir, name);
+- found_template_hook = access(template_path.buf, X_OK) >= 0;
+-#ifdef STRIP_EXTENSION
+- if (!found_template_hook) {
+- strbuf_addstr(&template_path, STRIP_EXTENSION);
+- found_template_hook = access(template_path.buf, X_OK) >= 0;
+- }
+-#endif
+- if (!found_template_hook) {
+- strbuf_release(&template_path);
+- return 0;
+- }
+-
+- ret = do_files_match(template_path.buf, path);
+-
+- strbuf_release(&template_path);
+- return ret;
+-}
+-
+ static struct strset safe_hook_sha256s = STRSET_INIT;
+ static int safe_hook_sha256s_initialized;
+
+@@ -70,6 +44,22 @@ static int get_sha256_of_file_contents(const char *path, char *sha256)
+ return 0;
+ }
+
++void add_safe_hook(const char *path)
++{
++ char sha256[GIT_SHA256_HEXSZ + 1] = { '\0' };
++
++ if (!get_sha256_of_file_contents(path, sha256)) {
++ char *p;
++
++ strset_add(&safe_hook_sha256s, sha256);
++
++ /* support multi-process operations e.g. recursive clones */
++ p = xstrfmt("safe.hook.sha256=%s", sha256);
++ git_config_push_parameter(p);
++ free(p);
++ }
++}
++
+ static int safe_hook_cb(const char *key, const char *value,
+ const struct config_context *ctx UNUSED, void *d)
+ {
+@@ -142,7 +132,6 @@ const char *find_hook(const char *name)
+ return NULL;
+ }
+ if (!git_hooks_path && git_env_bool("GIT_CLONE_PROTECTION_ACTIVE", 0) &&
+- !identical_to_template_hook(name, path.buf) &&
+ !is_hook_safe_during_clone(name, path.buf, sha256))
+ die(_("active `%s` hook found during `git clone`:\n\t%s\n"
+ "For security reasons, this is disallowed by default.\n"
+diff --git a/hook.h b/hook.h
+index 19ab9a5806e..b4770d9bd88 100644
+--- a/hook.h
++++ b/hook.h
+@@ -87,4 +87,14 @@ int run_hooks(const char *hook_name);
+ * hook. This function behaves like the old run_hook_le() API.
+ */
+ int run_hooks_l(const char *hook_name, ...);
++
++/**
++ * Mark the contents of the provided path as safe to run during a clone
++ * operation.
++ *
++ * This function is mainly used when copying templates to mark the
++ * just-copied hooks as benign.
++ */
++void add_safe_hook(const char *path);
++
+ #endif
+diff --git a/setup.c b/setup.c
+index 30f243fc32d..25828a85ec3 100644
+--- a/setup.c
++++ b/setup.c
+@@ -17,6 +17,8 @@
+ #include "trace2.h"
+ #include "worktree.h"
+ #include "exec-cmd.h"
++#include "run-command.h"
++#include "hook.h"
+
+ static int inside_git_dir = -1;
+ static int inside_work_tree = -1;
+@@ -1868,6 +1870,7 @@ static void copy_templates_1(struct strbuf *path, struct strbuf *template_path,
+ size_t path_baselen = path->len;
+ size_t template_baselen = template_path->len;
+ struct dirent *de;
++ int is_hooks_dir = ends_with(template_path->buf, "/hooks/");
+
+ /* Note: if ".git/hooks" file exists in the repository being
+ * re-initialized, /etc/core-git/templates/hooks/update would
+@@ -1920,6 +1923,10 @@ static void copy_templates_1(struct strbuf *path, struct strbuf *template_path,
+ strbuf_release(&lnk);
+ }
+ else if (S_ISREG(st_template.st_mode)) {
++ if (is_hooks_dir &&
++ is_executable(template_path->buf))
++ add_safe_hook(template_path->buf);
++
+ if (copy_file(path->buf, template_path->buf, st_template.st_mode))
+ die_errno(_("cannot copy '%s' to '%s'"),
+ template_path->buf, path->buf);
+diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh
+index deb1c282c71..ca3a8d1ebed 100755
+--- a/t/t5601-clone.sh
++++ b/t/t5601-clone.sh
+@@ -836,6 +836,25 @@ test_expect_success 'clone with init.templatedir runs hooks' '
+ git config --unset init.templateDir &&
+ test_grep ! "active .* hook found" err &&
+ test_path_is_missing hook-run-local-config/hook.run
++ ) &&
++
++ test_config_global protocol.file.allow always &&
++ git -C tmpl/hooks submodule add "$(pwd)/tmpl/hooks" sub &&
++ test_tick &&
++ git -C tmpl/hooks add .gitmodules sub &&
++ git -C tmpl/hooks commit -m submodule &&
++
++ (
++ sane_unset GIT_TEMPLATE_DIR &&
++ NO_SET_GIT_TEMPLATE_DIR=t &&
++ export NO_SET_GIT_TEMPLATE_DIR &&
++
++ git -c init.templateDir="$(pwd)/tmpl" \
++ clone --recurse-submodules \
++ tmpl/hooks hook-run-submodule 2>err &&
++ test_grep ! "active .* hook found" err &&
++ test_path_is_file hook-run-submodule/hook.run &&
++ test_path_is_file hook-run-submodule/sub/hook.run
+ )
+ '
+
diff --git a/debian/patches/0007-Revert-Add-a-helper-function-to-compare-file-contents.diff b/debian/patches/0007-Revert-Add-a-helper-function-to-compare-file-contents.diff
new file mode 100644
index 0000000..6cf2874
--- /dev/null
+++ b/debian/patches/0007-Revert-Add-a-helper-function-to-compare-file-contents.diff
@@ -0,0 +1,185 @@
+From 13b17dea6c851b21ceb9ce163cdd7338f1ec4ecf Mon Sep 17 00:00:00 2001
+From: Johannes Schindelin <johannes.schindelin@gmx.de>
+Date: Sat, 18 May 2024 10:32:46 +0000
+Subject: Revert "Add a helper function to compare file contents"
+
+commit 851218a8af645b0abd64882d2b88bc984aa762e9 upstream.
+
+Now that during a `git clone`, the hooks' contents are no longer
+compared to the templates' files', the caller for which the
+`do_files_match()` function was introduced is gone, and therefore this
+function can be retired, too.
+
+This reverts commit 584de0b4c23 (Add a helper function to compare file
+contents, 2024-03-30).
+
+Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
+---
+ copy.c | 58 --------------------------------------
+ copy.h | 14 ---------
+ t/helper/test-path-utils.c | 10 -------
+ t/t0060-path-utils.sh | 41 ---------------------------
+ 4 files changed, 123 deletions(-)
+
+diff --git a/copy.c b/copy.c
+index 3df156f6cea..d9d20920126 100644
+--- a/copy.c
++++ b/copy.c
+@@ -70,61 +70,3 @@ int copy_file_with_time(const char *dst, const char *src, int mode)
+ return copy_times(dst, src);
+ return status;
+ }
+-
+-static int do_symlinks_match(const char *path1, const char *path2)
+-{
+- struct strbuf buf1 = STRBUF_INIT, buf2 = STRBUF_INIT;
+- int ret = 0;
+-
+- if (!strbuf_readlink(&buf1, path1, 0) &&
+- !strbuf_readlink(&buf2, path2, 0))
+- ret = !strcmp(buf1.buf, buf2.buf);
+-
+- strbuf_release(&buf1);
+- strbuf_release(&buf2);
+- return ret;
+-}
+-
+-int do_files_match(const char *path1, const char *path2)
+-{
+- struct stat st1, st2;
+- int fd1 = -1, fd2 = -1, ret = 1;
+- char buf1[8192], buf2[8192];
+-
+- if ((fd1 = open_nofollow(path1, O_RDONLY)) < 0 ||
+- fstat(fd1, &st1) || !S_ISREG(st1.st_mode)) {
+- if (fd1 < 0 && errno == ELOOP)
+- /* maybe this is a symbolic link? */
+- return do_symlinks_match(path1, path2);
+- ret = 0;
+- } else if ((fd2 = open_nofollow(path2, O_RDONLY)) < 0 ||
+- fstat(fd2, &st2) || !S_ISREG(st2.st_mode)) {
+- ret = 0;
+- }
+-
+- if (ret)
+- /* to match, neither must be executable, or both */
+- ret = !(st1.st_mode & 0111) == !(st2.st_mode & 0111);
+-
+- if (ret)
+- ret = st1.st_size == st2.st_size;
+-
+- while (ret) {
+- ssize_t len1 = read_in_full(fd1, buf1, sizeof(buf1));
+- ssize_t len2 = read_in_full(fd2, buf2, sizeof(buf2));
+-
+- if (len1 < 0 || len2 < 0 || len1 != len2)
+- ret = 0; /* read error or different file size */
+- else if (!len1) /* len2 is also 0; hit EOF on both */
+- break; /* ret is still true */
+- else
+- ret = !memcmp(buf1, buf2, len1);
+- }
+-
+- if (fd1 >= 0)
+- close(fd1);
+- if (fd2 >= 0)
+- close(fd2);
+-
+- return ret;
+-}
+diff --git a/copy.h b/copy.h
+index 057259a3a7a..2af77cba864 100644
+--- a/copy.h
++++ b/copy.h
+@@ -7,18 +7,4 @@ int copy_fd(int ifd, int ofd);
+ int copy_file(const char *dst, const char *src, int mode);
+ int copy_file_with_time(const char *dst, const char *src, int mode);
+
+-/*
+- * Compare the file mode and contents of two given files.
+- *
+- * If both files are actually symbolic links, the function returns 1 if the link
+- * targets are identical or 0 if they are not.
+- *
+- * If any of the two files cannot be accessed or in case of read failures, this
+- * function returns 0.
+- *
+- * If the file modes and contents are identical, the function returns 1,
+- * otherwise it returns 0.
+- */
+-int do_files_match(const char *path1, const char *path2);
+-
+ #endif /* COPY_H */
+diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c
+index 023ed2e1a78..bf0e23ed505 100644
+--- a/t/helper/test-path-utils.c
++++ b/t/helper/test-path-utils.c
+@@ -501,16 +501,6 @@ int cmd__path_utils(int argc, const char **argv)
+ return !!res;
+ }
+
+- if (argc == 4 && !strcmp(argv[1], "do_files_match")) {
+- int ret = do_files_match(argv[2], argv[3]);
+-
+- if (ret)
+- printf("equal\n");
+- else
+- printf("different\n");
+- return !ret;
+- }
+-
+ fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
+ argv[1] ? argv[1] : "(there was none)");
+ return 1;
+diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
+index 85686ee15da..0afa3d0d312 100755
+--- a/t/t0060-path-utils.sh
++++ b/t/t0060-path-utils.sh
+@@ -610,45 +610,4 @@ test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works'
+ test_cmp expect actual
+ '
+
+-test_expect_success 'do_files_match()' '
+- test_seq 0 10 >0-10.txt &&
+- test_seq -1 10 >-1-10.txt &&
+- test_seq 1 10 >1-10.txt &&
+- test_seq 1 9 >1-9.txt &&
+- test_seq 0 8 >0-8.txt &&
+-
+- test-tool path-utils do_files_match 0-10.txt 0-10.txt >out &&
+-
+- assert_fails() {
+- test_must_fail \
+- test-tool path-utils do_files_match "$1" "$2" >out &&
+- grep different out
+- } &&
+-
+- assert_fails 0-8.txt 1-9.txt &&
+- assert_fails -1-10.txt 0-10.txt &&
+- assert_fails 1-10.txt 1-9.txt &&
+- assert_fails 1-10.txt .git &&
+- assert_fails does-not-exist 1-10.txt &&
+-
+- if test_have_prereq FILEMODE
+- then
+- cp 0-10.txt 0-10.x &&
+- chmod a+x 0-10.x &&
+- assert_fails 0-10.txt 0-10.x
+- fi &&
+-
+- if test_have_prereq SYMLINKS
+- then
+- ln -sf 0-10.txt symlink &&
+- ln -s 0-10.txt another-symlink &&
+- ln -s over-the-ocean yet-another-symlink &&
+- ln -s "$PWD/0-10.txt" absolute-symlink &&
+- assert_fails 0-10.txt symlink &&
+- test-tool path-utils do_files_match symlink another-symlink &&
+- assert_fails symlink yet-another-symlink &&
+- assert_fails symlink absolute-symlink
+- fi
+-'
+-
+ test_done
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..7ff1f37
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,7 @@
+0001-hook-plug-a-new-memory-leak.diff
+0002-Revert-core.hooksPath-add-some-protection-while-cloni.diff
+0003-tests-verify-that-clone-c-core.hooksPath-dev-null-wor.diff
+0004-hook-clone-protections-add-escape-hatch.diff
+0005-hooks-clone-protections-special-case-current-Git-LFS-.diff
+0006-hooks-clone-protections-simplify-templates-hooks-vali.diff
+0007-Revert-Add-a-helper-function-to-compare-file-contents.diff
diff --git a/debian/versions.upstream b/debian/versions.upstream
index 0562272..7af7478 100644
--- a/debian/versions.upstream
+++ b/debian/versions.upstream
@@ -831,21 +831,38 @@ v2.39.0
v2.39.1
v2.39.2
v2.39.3
+v2.39.4
v2.40.0-rc0
v2.40.0-rc1
v2.40.0-rc2
v2.40.0
v2.40.1
+v2.40.2
v2.41.0-rc0
v2.41.0-rc1
v2.41.0-rc2
v2.41.0
+v2.41.1
v2.42.0-rc0
v2.42.0-rc1
v2.42.0-rc2
v2.42.0
v2.42.1
+v2.42.2
v2.43.0-rc0
v2.43.0-rc1
v2.43.0-rc2
v2.43.0
+v2.43.1
+v2.43.2
+v2.43.3
+v2.43.4
+v2.44.0-rc0
+v2.44.0-rc1
+v2.44.0-rc2
+v2.44.0
+v2.44.1
+v2.45.0-rc0
+v2.45.0-rc1
+v2.45.0
+v2.45.1