t3011: demonstrate directory traversal failures
[git] / Documentation / RelNotes / 2.24.0.txt
1 Git 2.24 Release Notes
2 ======================
3
4 Updates since v2.23
5 -------------------
6
7 Backward compatibility note
8
9  * "filter-branch" is showing its age and alternatives are available.
10    From this release, we started to discourage its use and hint
11    people about filter-repo.
12
13 UI, Workflows & Features
14
15  * We now have an active interim maintainer for the Git-Gui part of
16    the system.  Praise and thank Pratyush Yadav for volunteering.
17
18  * The command line parser learned "--end-of-options" notation; the
19    standard convention for scripters to have hardcoded set of options
20    first on the command line, and force the command to treat end-user
21    input as non-options, has been to use "--" as the delimiter, but
22    that would not work for commands that use "--" as a delimiter
23    between revs and pathspec.
24
25  * A mechanism to affect the default setting for a (related) group of
26    configuration variables is introduced.
27
28  * "git fetch" learned "--set-upstream" option to help those who first
29    clone from their private fork they intend to push to, add the true
30    upstream via "git remote add" and then "git fetch" from it.
31
32  * Device-tree files learned their own userdiff patterns.
33    (merge 3c81760bc6 sb/userdiff-dts later to maint).
34
35  * "git rebase --rebase-merges" learned to drive different merge
36    strategies and pass strategy specific options to them.
37
38  * A new "pre-merge-commit" hook has been introduced.
39
40  * Command line completion updates for "git -c var.name=val" have been
41    added.
42
43  * The lazy clone machinery has been taught that there can be more
44    than one promisor remote and consult them in order when downloading
45    missing objects on demand.
46
47  * The list-objects-filter API (used to create a sparse/lazy clone)
48    learned to take a combined filter specification.
49
50  * The documentation and tests for "git format-patch" have been
51    cleaned up.
52
53  * On Windows, the root level of UNC share is now allowed to be used
54    just like any other directory.
55
56  * The command line completion support (in contrib/) learned about the
57    "--skip" option of "git revert" and "git cherry-pick".
58
59  * "git rebase --keep-base <upstream>" tries to find the original base
60    of the topic being rebased and rebase on top of that same base,
61    which is useful when running the "git rebase -i" (and its limited
62    variant "git rebase -x").
63
64    The command also has learned to fast-forward in more cases where it
65    can instead of replaying to recreate identical commits.
66
67  * A configuration variable tells "git fetch" to write the commit
68    graph after finishing.
69
70  * "git add -i" has been taught to show the total number of hunks and
71    the hunks that has been processed so far when showing prompts.
72
73  * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching
74    submodules, but this did not apply to "git fetch --multiple" that
75    fetches from multiple remote repositories.  It now does.
76
77  * The installation instruction for zsh completion script (in
78    contrib/) has been a bit improved.
79
80
81 Performance, Internal Implementation, Development Support etc.
82
83  * The code to write commit-graph over given commit object names has
84    been made a bit more robust.
85
86  * The first line of verbose output from each test piece now carries
87    the test name and number to help scanning with eyeballs.
88
89  * Further clean-up of the initialization code.
90
91  * xmalloc() used to have a mechanism to ditch memory and address
92    space resources as the last resort upon seeing an allocation
93    failure from the underlying malloc(), which made the code complex
94    and thread-unsafe with dubious benefit, as major memory resource
95    users already do limit their uses with various other mechanisms.
96    It has been simplified away.
97
98  * Unnecessary full-tree diff in "git log -L" machinery has been
99    optimized away.
100
101  * The http transport lacked some optimization the native transports
102    learned to avoid unnecessary ref advertisement, which has been
103    corrected.
104
105  * Preparation for SHA-256 upgrade continues in the test department.
106    (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint).
107
108  * The memory ownership model of the "git fast-import" got
109    straightened out.
110
111  * Output from trace2 subsystem is formatted more prettily now.
112
113  * The internal code originally invented for ".gitignore" processing
114    got reshuffled and renamed to make it less tied to "excluding" and
115    stress more that it is about "matching", as it has been reused for
116    things like sparse checkout specification that want to check if a
117    path is "included".
118
119  * "git stash" learned to write refreshed index back to disk.
120
121  * Coccinelle checks are done on more source files than before now.
122
123  * The cache-tree code has been taught to be less aggressive in
124    attempting to see if a tree object it computed already exists in
125    the repository.
126
127  * The code to parse and use the commit-graph file has been made more
128    robust against corrupted input.
129
130  * The hg-to-git script (in contrib/) has been updated to work with
131    Python 3.
132
133  * Update the way build artifacts in t/helper/ directory are ignored.
134
135  * Preparation for SHA-256 upgrade continues.
136
137  * "git log --graph" for an octopus merge is sometimes colored
138    incorrectly, which is demonstrated and documented but not yet
139    fixed.
140
141  * The trace2 output, when sending them to files in a designated
142    directory, can populate the directory with too many files; a
143    mechanism is introduced to set the maximum number of files and
144    discard further logs when the maximum is reached.
145
146  * We have adopted a Code-of-conduct document.
147    (merge 3f9ef874a7 jk/coc later to maint).
148
149
150 Fixes since v2.23
151 -----------------
152
153  * "git grep --recurse-submodules" that looks at the working tree
154    files looked at the contents in the index in submodules, instead of
155    files in the working tree.
156    (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint).
157
158  * Codepaths to walk tree objects have been audited for integer
159    overflows and hardened.
160    (merge 5aa02f9868 jk/tree-walk-overflow later to maint).
161
162  * "git pack-refs" can lose refs that are created while running, which
163    is getting corrected.
164    (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint).
165
166  * "git checkout" and "git restore" to re-populate the index from a
167    tree-ish (typically HEAD) did not work correctly for a path that
168    was removed and then added again with the intent-to-add bit, when
169    the corresponding working tree file was empty.  This has been
170    corrected.
171
172  * Compilation fix.
173    (merge 70597e8386 rs/nedalloc-fixlets later to maint).
174
175  * "git gui" learned to call the clean-up procedure before exiting.
176    (merge 0d88f3d2c5 py/git-gui-do-quit later to maint).
177
178  * We promoted the "indent heuristics" that decides where to split
179    diff hunks from experimental to the default a few years ago, but
180    some stale documentation still marked it as experimental, which has
181    been corrected.
182    (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint).
183
184  * Fix a mismerge that happened in 2.22 timeframe.
185    (merge acb7da05ac en/checkout-mismerge-fix later to maint).
186
187  * "git archive" recorded incorrect length in extended pax header in
188    some corner cases, which has been corrected.
189    (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint).
190
191  * On-demand object fetching in lazy clone incorrectly tried to fetch
192    commits from submodule projects, while still working in the
193    superproject, which has been corrected.
194    (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint).
195
196  * Prepare get_short_oid() codepath to be thread-safe.
197    (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint).
198
199  * "for-each-ref" and friends that show refs did not protect themselves
200    against ancient tags that did not record tagger names when asked to
201    show "%(taggername)", which have been corrected.
202    (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint).
203
204  * The "git am" based backend of "git rebase" ignored the result of
205    updating ".gitattributes" done in one step when replaying
206    subsequent steps.
207    (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint).
208
209  * Tell cURL library to use the same malloc() implementation, with the
210    xmalloc() wrapper, as the rest of the system, for consistency.
211    (merge 93b980e58f cb/curl-use-xmalloc later to maint).
212
213  * Build fix to adjust .gitignore to unignore a path that we started to track.
214    (merge aac6ff7b5b js/visual-studio later to maint).
215
216  * A few implementation fixes in the notes API.
217    (merge 60fe477a0b mh/notes-duplicate-entries later to maint).
218
219  * Fix an earlier regression to "git push --all" which should have
220    been forbidden when the target remote repository is set to be a
221    mirror.
222    (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint).
223
224  * Fix an earlier regression in the test suite, which mistakenly
225    stopped running HTTPD tests.
226    (merge 3960290675 sg/git-test-boolean later to maint).
227
228  * "git rebase --autostash <upstream> <branch>", when <branch> is
229    different from the current branch, incorrectly moved the tip of the
230    current branch, which has been corrected.
231    (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint).
232
233  * Update support for Asciidoctor documentation toolchain.
234    (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint).
235
236  * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0
237    no longer works with the older one.
238    (merge f6461b82b9 bc/doc-use-docbook-5 later to maint).
239
240  * The markup used in user-manual has been updated to work better with
241    asciidoctor.
242    (merge c4d2f6143a ma/user-manual-markup-update later to maint).
243
244  * Make sure the grep machinery does not abort when seeing a payload
245    that is not UTF-8 even when JIT is not in use with PCRE1.
246    (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint).
247
248  * The name of the blob object that stores the filter specification
249    for sparse cloning/fetching was interpreted in a wrong place in the
250    code, causing Git to abort.
251
252  * "git log --decorate-refs-exclude=<pattern>" was incorrectly
253    overruled when the "--simplify-by-decoration" option is used, which
254    has been corrected.
255    (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint).
256
257  * The "upload-pack" (the counterpart of "git fetch") needs to disable
258    commit-graph when responding to a shallow clone/fetch request, but
259    the way this was done made Git panic, which has been corrected.
260
261  * The object traversal machinery has been optimized not to load tree
262    objects when we are only interested in commit history.
263    (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint).
264
265  * The object name parser for "Nth parent" syntax has been made more
266    robust against integer overflows.
267    (merge 59fa5f5a25 rs/nth-parent-parse later to maint).
268
269  * The code used in following tags in "git fetch" has been optimized.
270    (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint).
271
272  * Regression fix for progress output.
273    (merge 2bb74b53a4 sg/progress-fix later to maint).
274
275  * A bug in merge-recursive code that triggers when a branch with a
276    symbolic link is merged with a branch that replaces it with a
277    directory has been fixed.
278    (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint).
279
280  * The rename detection logic sorts a list of rename source candidates
281    by similarity to pick the best candidate, which means that a tie
282    between sources with the same similarity is broken by the original
283    location in the original candidate list (which is sorted by path).
284    Force the sorting by similarity done with a stable sort, which is
285    not promised by system supplied qsort(3), to ensure consistent
286    results across platforms.
287    (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint).
288
289  * The code to skip "UTF" and "UTF-" prefix, when computing an advice
290    message, did not work correctly when the prefix was "UTF", which
291    has been fixed.
292    (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint).
293
294  * The author names taken from SVN repositories may have extra leading
295    or trailing whitespaces, which are now munged away.
296    (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint).
297
298  * "git rebase -i" showed a wrong HEAD while "reword" open the editor.
299    (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint).
300
301  * A few simplification and bugfixes to PCRE interface.
302    (merge c581e4a749 ab/pcre-jit-fixes later to maint).
303
304  * PCRE fixes.
305    (merge ff61681b46 cb/pcre1-cleanup later to maint).
306
307  * "git range-diff" segfaulted when diff.noprefix configuration was
308    used, as it blindly expected the patch it internally generates to
309    have the standard a/ and b/ prefixes.  The command now forces the
310    internal patch to be built without any prefix, not to be affected
311    by any end-user configuration.
312    (merge 937b76ed49 js/range-diff-noprefix later to maint).
313
314  * "git stash apply" in a subdirectory of a secondary worktree failed
315    to access the worktree correctly, which has been corrected.
316    (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint).
317
318  * The merge-recursive machinery is one of the most complex parts of
319    the system that accumulated cruft over time.  This large series
320    cleans up the implementation quite a bit.
321    (merge b657047719 en/merge-recursive-cleanup later to maint).
322
323  * Pretty-printed command line formatter (used in e.g. reporting the
324    command being run by the tracing API) had a bug that lost an
325    argument that is an empty string, which has been corrected.
326    (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint).
327
328  * "git range-diff" failed to handle mode-only change, which has been
329    corrected.
330    (merge 2b6a9b13ca tg/range-diff-output-update later to maint).
331
332  * Dev support update.
333    (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint).
334
335  * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>"
336    not "mkdir -p <outdir>", which was corrected.
337
338  * "git stash save" lost local changes to submodules, which has been
339    corrected.
340    (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint).
341
342  * The atomic push over smart HTTP transport did not work, which has
343    been corrected.
344    (merge 6f1194246a bc/smart-http-atomic-push later to maint).
345
346  * Other code cleanup, docfix, build fix, etc.
347    (merge d1387d3895 en/fast-import-merge-doc later to maint).
348    (merge 1c24a54ea4 bm/repository-layout-typofix later to maint).
349    (merge 415b770b88 ds/midx-expire-repack later to maint).
350    (merge 19800bdc3f nd/diff-parseopt later to maint).
351    (merge 58166c2e9d tg/t0021-racefix later to maint).
352    (merge 7027f508c7 dl/compat-cleanup later to maint).
353    (merge e770fbfeff jc/test-cleanup later to maint).
354    (merge 1fd881d404 rs/trace2-dst-warning later to maint).
355    (merge 7e92756751 mh/http-urlmatch-cleanup later to maint).
356    (merge 9784f97321 mh/release-commit-memory-fix later to maint).
357    (merge 60d198d022 tb/banned-vsprintf-namefix later to maint).
358    (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint).
359    (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint).
360    (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint).
361    (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint).
362    (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint).
363    (merge 47b27c96fa ss/get-time-cleanup later to maint).
364    (merge dd2e50a84e jk/commit-graph-cleanup later to maint).
365    (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint).
366    (merge 40e747e89d dl/submodule-set-branch later to maint).
367    (merge 689a146c91 rs/commit-graph-use-list-count later to maint).
368    (merge 0eb7c37a8a js/doc-patch-text later to maint).
369    (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint).
370    (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint).
371    (merge af78249463 cc/svn-fe-py-shebang later to maint).
372    (merge 7bd97d6dff rs/alias-use-copy-array later to maint).
373    (merge c46ebc2496 sg/travis-help-debug later to maint).
374    (merge 24c681794f ps/my-first-contribution-alphasort later to maint).
375    (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint).
376    (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint).
377    (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint).
378    (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint).
379    (merge ddb3c856f3 as/shallow-slab-use-fix later to maint).
380    (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint).
381    (merge 53d687bf5f ah/cleanups later to maint).
382    (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint).
383    (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint).
384    (merge d928a8388a am/t0028-utf16-tests later to maint).
385    (merge b05b40930e dl/t0000-skip-test-test later to maint).
386    (merge 03d3b1297c js/xdiffi-comment-updates later to maint).
387    (merge 57d8f4b4c7 js/doc-stash-save later to maint).
388    (merge 8c1cfd58e3 ta/t1308-typofix later to maint).
389    (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint).
390    (merge 68b69211b2 bb/compat-util-comment-fix later to maint).
391    (merge 5cc6a4be11 rs/http-push-simplify later to maint).
392    (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint).
393    (merge 062a309d36 rs/remote-curl-use-argv-array later to maint).
394    (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint).
395    (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint).
396    (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint).
397    (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint).
398    (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint).