Merge branch 'rs/diff-parseopts-cleanup'
[git/gitster.git] / Documentation / RelNotes / 2.42.0.txt
blob0f1897ad5f52a49f7fa24127f67a30a00c6da7a3
1 Git v2.42 Release Notes
2 =======================
4 UI, Workflows & Features
6  * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
7    hierarchy to be packed using pattern matching.
9  * 'git worktree add' learned how to create a worktree based on an
10    orphaned branch with `--orphan`.
12  * "git pack-objects" learned to invoke a new hook program that
13    enumerates extra objects to be used as anchoring points to keep
14    otherwise unreachable objects in cruft packs.
16  * Add more "git var" for toolsmiths to learn various locations Git is
17    configured with either via the configuration or hard-coded defaults.
19  * 'git notes append' was taught '--separator' to specify string to insert
20    between paragraphs.
22  * The "git for-each-ref" family of commands learned placeholders
23    related to GPG signature verification.
25  * "git diff --no-index" learned to read from named pipes as if they
26    were regular files, to allow "git diff <(process) <(substitution)"
27    some shells support.
29  * Help newbies by suggesting that there are cases where force-pushing
30    is a valid and sensible thing to update a branch at a remote
31    repository, rather than reconciling with merge/rebase.
33  * "git blame --contents=file" has been taught to work in a bare
34    repository.
36  * "git branch -f X" to repoint the branch X said that X was "checked
37    out" in another worktree, even when branch X was not and instead
38    being bisected or rebased.  The message was reworded to say the
39    branch was "in use".
41  * Tone down the warning on SHA-256 repositories being an experimental
42    curiosity.  We do not have support for them to interoperate with
43    traditional SHA-1 repositories, but at this point, we do not plan
44    to make breaking changes to SHA-256 repositories and there is no
45    longer need for such a strongly phrased warning.
48 Performance, Internal Implementation, Development Support etc.
50  * "git diff-tree" has been taught to take advantage of the
51    sparse-index feature.
53  * Clang's sanitizer implementation seems to work better than GCC's.
54    (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).
56  * The object traversal using reachability bitmap done by
57    "pack-object" has been tweaked to take advantage of the fact that
58    using "boundary" commits as representative of all the uninteresting
59    ones can save quite a lot of object enumeration.
61  * discover_git_directory() no longer touches the_repository.
63  * "git worktree" learned to work better with sparse index feature.
65  * When the external merge driver is killed by a signal, its output
66    should not be trusted as a resolution with conflicts that is
67    proposed by the driver, but the code did.
69  * The set-up code for the get_revision() API now allows feeding
70    options like --all and --not in the --stdin mode.
72  * Move functions that are not about pure string manipulation out of
73    strbuf.[ch]
75  * "imap-send" codepaths got cleaned up to get rid of unused
76    parameters.
78  * Enumerating refs in the packed-refs file, while excluding refs that
79    match certain patterns, has been optimized.
81  * Mark-up unused parameters in the code so that we can eventually
82    enable -Wunused-parameter by default.
84  * Instead of inventing a custom counter variables for debugging,
85    use existing trace2 facility in the fsync customization codepath.
87  * "git branch --list --format=<format>" and friends are taught
88    a new "%(describe)" placeholder.
90  * Clarify how to choose the starting point for a new topic in
91    developer guidance document.
93  * The implementation of "get_sha1_hex()" that reads a hexadecimal
94    string that spells a full object name has been extended to cope
95    with any hash function used in the repository, but the "sha1" in
96    its name survived.  Rename it to get_hash_hex(), a name that is
97    more consistent within its friends like get_hash_hex_algop().
99  * Command line parser fix, and a small parse-options API update.
102 Fixes since v2.41
103 -----------------
105  * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
106    command failed, so that the user can salvage what they typed.
107    (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).
109  * The "-s" (silent, squelch) option of the "diff" family of commands
110    did not interact with other options that specify the output format
111    well.  This has been cleaned up so that it will clear all the
112    formatting options given before.
113    (merge 9d484b92ed jc/diff-s-with-other-options later to maint).
115  * Update documentation regarding Coccinelle patches.
116    (merge 3bd0097cfc gc/doc-cocci-updates later to maint).
118  * Some atoms that can be used in "--format=<format>" for "git ls-tree"
119    were not supported by "git ls-files", even though they were relevant
120    in the context of the latter.
121    (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).
123  * Document more pseudo-refs and teach the command line completion
124    machinery to complete AUTO_MERGE.
125    (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).
127  * "git submodule" code trusted the data coming from the config (and
128    the in-tree .gitmodules file) too much without validating, leading
129    to NULL dereference if the user mucks with a repository (e.g.
130    submodule.<name>.url is removed).  This has been corrected.
131    (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).
133  * The value of config.worktree is per-repository, but has been kept
134    in a singleton global variable per process. This has been OK as
135    most Git operations interacted with a single repository at a time,
136    but not right for operations like recursive "grep" that want to
137    access multiple repositories from a single process without forking.
139    The global variable has been eliminated and made into a member in
140    the per-repository data structure.
141    (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).
143  * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
144    (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).
146  * Introduce a mechanism to disable replace refs globally and per
147    repository.
148    (merge 9c7d1b057f ds/disable-replace-refs later to maint).
150  * "git cat-file --batch" and friends learned "-Z" that uses NUL
151    delimiter for both input and output.
152    (merge f79e18849b ps/cat-file-null-output later to maint).
154  * The reimplemented "git add -i" did not honor color.ui configuration.
155    (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).
157  * Compilation fix for platforms without D_TYPE in struct dirent.
158    (merge 03bf92b9bf as/dtype-compilation-fix later to maint).
160  * Suggest to refrain from using hex literals that are non-portable
161    when writing printf(1) format strings.
162    (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).
164  * Simplify error message when run-command fails to start a command.
165    (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).
167  * Gracefully deal with a stale MIDX file that lists a packfile that
168    no longer exists.
169    (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).
171  * Even when diff.ignoreSubmodules tells us to ignore submodule
172    changes, "git commit" with an index that already records changes to
173    submodules should include the submodule changes in the resulting
174    commit, but it did not.
175    (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).
177  * When "git commit --trailer=..." invokes the interpret-trailers
178    machinery, it knows what it feeds to interpret-trailers is a full
179    log message without any patch, but failed to express that by
180    passing the "--no-divider" option, which has been corrected.
181    (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).
183  * Avoid breakage of "git pack-objects --cruft" due to inconsistency
184    between the way the code enumerates packfiles in the repository.
185    (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).
187  * We create .pack and then .idx, we consider only packfiles that have
188    .idx usable (those with only .pack are not ready yet), so we should
189    remove .idx before removing .pack for consistency.
190    (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).
192  * Partially revert a sanity check that the rest of the config code
193    was not ready, to avoid triggering it in a corner case.
194    (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).
196  * "git apply" punts when it is fed too large a patch input; the error
197    message it gives when it happens has been clarified.
198    (merge 42612e18d2 pw/apply-too-large later to maint).
200  * During a cherry-pick or revert session that works on multiple
201    commits, "git status" did not give correct information, which has
202    been corrected.
203    (merge a096a889f4 jk/cherry-pick-revert-status later to maint).
205  * A few places failed to differentiate the case where the index is
206    truly empty (nothing added) and we haven't yet read from the
207    on-disk index file, which have been corrected.
208    (merge 2ee045eea1 js/empty-index-fixes later to maint).
210  * "git bugreport" tests did not test what it wanted to test, which
211    has been corrected.
212    (merge 1aa92b8500 ma/t0091-fixup later to maint).
214  * Code snippets in a tutorial document no longer compiled after
215    recent header shuffling, which have been corrected.
216    (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).
218  * "git ls-files '(attr:X)D/'" that triggers the common prefix
219    optimization codepath failed to read from "D/.gitattributes",
220    which has been corrected.
221    (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).
223  * "git fsck --no-progress" still spewed noise from the commit-graph
224    subsystem, which has been corrected.
225    (merge 9281cd07f0 tb/fsck-no-progress later to maint).
227  * Various offset computation in the code that accesses the packfiles
228    and other data in the object layer has been hardened against
229    arithmetic overflow, especially on 32-bit systems.
230    (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).
232  * Names of MinGW header files are spelled in mixed case in some
233    source files, but the build host can be using case sensitive
234    filesystem with header files with their name spelled in all
235    lowercase.
236    (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).
238  * Update message mark-up for i18n in "git bundle".
239    (merge bbb6acd998 dk/bundle-i18n-more later to maint).
241  * "git tag --list --points-at X" showed tags that directly refers to
242    object X, but did not list a tag that points at such a tag, which
243    has been corrected.
245  * "./configure --with-expat=no" did not work as a way to refuse use
246    of the expat library on a system with the library installed, which
247    has been corrected.
248    (merge fb8f7269c2 ah/autoconf-fixes later to maint).
250  * When the user edits "rebase -i" todo file so that it starts with a
251    "fixup", which would make it invalid, the command truncated the
252    rest of the file before giving an error and returning the control
253    back to the user.  Stop truncating to make it easier to correct
254    such a malformed todo file.
255    (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).
257  * Rewrite the description of giving a custom command to the
258    submodule.<name>.update configuration variable.
259    (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).
261  * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
262    its traditional API, by using its EVP API instead.
263    (merge bda9c12073 ew/hash-with-openssl-evp later to maint).
265  * Exclude "." from the set of characters to be removed from the
266    beginning and the end of the human-readable name.
267    (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint).
269  * "git bisect visualize" stopped running "gitk" on Git for Windows
270    when the command was reimplemented in C around Git 2.34 timeframe.
271    This has been corrected.
272    (merge fff1594fa7 ma/locate-in-path-for-windows later to maint).
274  * "git rebase -i" with a series of squash/fixup, when one of the
275    steps stopped in conflicts and ended up getting skipped, did not
276    handle the accumulated commit log messages, which has been
277    corrected.
278    (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint).
280  * Adjust to newer Term::ReadLine to prevent it from breaking
281    the interactive prompt code in send-email.
282    (merge c016726c2d jk/send-email-with-new-readline later to maint).
284  * Windows updates.
285    (merge 0050f8e401 ds/maintenance-on-windows-fix later to maint).
287  * Correct use of lstat() that assumed a failing call would not
288    clobber the statbuf.
289    (merge 72695d8214 st/mv-lstat-fix later to maint).
291  * Other code cleanup, docfix, build fix, etc.
292    (merge 51f9d2e563 sa/doc-ls-remote later to maint).
293    (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
294    (merge f7e063f326 ps/fetch-cleanups later to maint).
295    (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
296    (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
297    (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
298    (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
299    (merge aeee1408ce kh/use-default-notes-doc later to maint).
300    (merge 3b8724bce6 jc/test-modernization later to maint).
301    (merge 447a3b7331 jc/test-modernization-2 later to maint).
302    (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
303    (merge 548afb0d9a la/docs-typofixes later to maint).
304    (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
305    (merge 6c26da8404 mh/credential-erase-improvements later to maint).
306    (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
307    (merge 80d32e84b5 rj/leakfixes later to maint).
308    (merge 0a868031ed pb/complete-diff-options later to maint).
309    (merge d4f28279ad jc/doc-hash-object-types later to maint).
310    (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
311    (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
312    (merge 3e81b896f7 rs/packet-length-simplify later to maint).
313    (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
314    (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
315    (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
316    (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
317    (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
318    (merge a2dad4868b jc/transport-parseopt-fix later to maint).
319    (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
320    (merge 3821eb6c3d jc/parse-options-reset later to maint).
321    (merge c48af99a3e bb/trace2-comment-fix later to maint).
322    (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
323    (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
324    (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).
325    (merge d089a06421 rs/bundle-parseopt-cleanup later to maint).
326    (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint).
327    (merge a5c01603b3 bc/ignore-clangd-cache later to maint).
328    (merge 12009a182b js/allow-t4000-to-be-indented-with-spaces later to maint).
329    (merge b3dcd24b8a jc/send-email-pre-process-fix later to maint).