Git fork
at reftables-rust 369 lines 15 kB view raw
1Git v2.52 Release Notes 2======================= 3 4UI, Workflows & Features 5------------------------ 6 7 * The "list" subcommand of "git refs" acts as a front-end for 8 "git for-each-ref". 9 10 * "git cmd --help-all" now works outside repositories. 11 12 * "git diff-tree" learned "--max-depth" option. 13 14 * A new subcommand "git repo" gives users a way to grab various 15 repository characteristics. 16 17 * A new command "git last-modified" has been added to show the closest 18 ancestor commit that touched each path. 19 20 * "git refs exists" that works like "git show-ref --exists" has been 21 added. 22 23 * "repo info" learns a short-hand option "-z" that is the same as 24 "--format=nul", and learns to report the objects format used in the 25 repository. 26 27 * "core.commentChar=auto" that attempts to dynamically pick a 28 suitable comment character is non-workable, as it is too much 29 trouble to support for little benefit, and is marked as deprecated. 30 31 * "git send-email" learned to drive "git imap-send" to store already 32 sent e-mails in an IMAP folder. 33 34 * The "promisor-remote" capability mechanism has been updated to 35 allow the "partialCloneFilter" settings and the "token" value to be 36 communicated from the server side. 37 38 * Declare that "git init" that is not otherwise configured uses 39 'main' as the initial branch, not 'master', starting Git 3.0. 40 41 * Keep giving hint about the default initial branch name for users 42 who may be surprised after Git 3.0 switch-over. 43 44 * The stash.index configuration variable can be set to make "git stash 45 pop/apply" pretend that it was invoked with "--index". 46 47 * "git fast-import" learned that "--signed-commits=<how>" option that 48 corresponds to that of "git fast-export". 49 50 * Marking a hunk 'selected' in "git add -p" and then splitting made 51 all the split pieces 'selected'; this has been changed to make them 52 all 'undecided', which gives better end-user experience. 53 54 * Configuration variables that take a pathname as a value 55 (e.g. blame.ignorerevsfile) can be marked as optional by prefixing 56 ":(optoinal)" before its value. 57 58 * Show 'P'ipe command in "git add -p". 59 60 * "git sparse-checkout" subcommand learned a new "clean" action to 61 prune otherwise unused working-tree files that are outside the 62 areas of interest. 63 64 * "git fast-import" is taught to handle signed tags, just like it 65 recently learned to handle signed commits, in different ways. 66 67 68Performance, Internal Implementation, Development Support etc. 69-------------------------------------------------------------- 70 71 * string_list_split*() family of functions have been extended to 72 simplify common use cases. 73 74 * Arrays of strbuf is often a wrong data structure to use, and 75 strbuf_split*() family of functions that create them often have 76 better alternatives. Update several code paths and replace 77 strbuf_split*(). 78 79 * Revision traversal limited with pathspec, like "git log dir/*", 80 used to ignore changed-paths Bloom filter when the pathspec 81 contained wildcards; now they take advantage of the filter when 82 they can. 83 84 * Doc lint updates to encourage the newer and easier-to-use 85 `synopsis` format, with fixes to a handful of existing uses. 86 87 * Remove dependency on the_repository and other globals from the 88 commit-graph code, and other changes unrelated to de-globaling. 89 90 * Discord has been added to the first contribution documentation as 91 another way to ask for help. 92 93 * Inspired by Ezekiel's recent effort to showcase Rust interface, the 94 hash function implementation used to hash lines have been updated 95 to the one used for ELF symbol lookup by Glibc. 96 97 * Instead of scanning for the remaining items to see if there are 98 still commits to be explored in the queue, use khash to remember 99 which items are still on the queue (an unacceptable alternative is 100 to reserve one object flag bits). 101 102 * The bulk-checkin code used to depend on a file-scope static 103 singleton variable, which has been updated to pass an instance 104 throughout the callchain. 105 106 * The work to build on the bulk-checkin infrastructure to create many 107 objects at once in a transaction and to abstract it into the 108 generic object layer continues. 109 110 * CodingGuidelines now spells out how bitfields are to be written. 111 112 * Adjust to the way newer versions of cURL selectively enable tracing 113 options, so that our tests can continue to work. 114 115 * The clear_alloc_state() API function was not fully clearing the 116 structure for reuse, but since nobody reuses it, replace it with a 117 variant that frees the structure as well, making the callers simpler. 118 119 * "git range-diff" learned a way to limit the memory consumed by 120 O(N*N) cost matrix. 121 122 * Some places in the code confused a variable that is *not* a boolean 123 to enable color but is an enum that records what the user requested 124 to do about color. A couple of bugs of this sort have been fixed, 125 while the code has been cleaned up to prevent similar bugs in the 126 future. 127 128 * The build procedure based on meson learned a target to only build 129 documentation, similar to "make doc". 130 (merge ff4ec8ded0 ps/meson-build-docs later to maint). 131 132 * Dip our toes a bit to (optionally) use Rust implemented helper 133 called from our C code. 134 135 * Documentation for "git log --pretty" options has been updated 136 to make it easier to translate. 137 138 * Instead of three library archives (one for git, one for reftable, 139 and one for xdiff), roll everything into a single libgit.a archive. 140 This would help later effort to FFI into Rust. 141 142 * The beginning of SHA1-SHA256 interoperability work. 143 144 * Build procedure for a few credential helpers (in contrib/) have 145 been updated. 146 147 * CI improvements to handle the recent Rust integration better. 148 149 150Fixes since v2.51 151----------------- 152 153Unless otherwise noted, all the changes in 2.51.X maintenance track, 154including security updates, are included in this release. 155 156 * During interactive rebase, using 'drop' on a merge commit lead to 157 an error, which was incorrect. 158 159 * "git refs migrate" to migrate the reflog entries from a refs 160 backend to another had a handful of bugs squashed. 161 162 * "git remote rename origin upstream" failed to move origin/HEAD to 163 upstream/HEAD when origin/HEAD is unborn and performed other 164 renames extremely inefficiently, which has been corrected. 165 (merge 16c4fa26b9 ps/remote-rename-fix later to maint). 166 167 * "git describe" has been optimized by using better data structure. 168 (merge 08bb69d70f rs/describe-with-prio-queue later to maint). 169 170 * "git push" had a code path that led to BUG() but it should have 171 been a die(), as it is a response to a usual but invalid end-user 172 action to attempt pushing an object that does not exist. 173 174 * Various bugs about rename handling in "ort" merge strategy have 175 been fixed. 176 177 * "git jump" (in contrib/) fails to parse the diff header correctly 178 when a file has a space in its name, which has been corrected. 179 (merge 621ce9c1c6 gh/git-jump-pathname-with-sp later to maint). 180 181 * "git diff --no-index" run inside a subdirectory under control of a 182 Git repository operated at the top of the working tree and stripped 183 the prefix from the output, and oddballs like "-" (stdin) did not 184 work correctly because of it. Correct the set-up by undoing what 185 the set-up sequence did to cwd and prefix. 186 187 * Various options to "git diff" that makes comparison ignore certain 188 aspects of the differences (like "space changes are ignored", 189 "differences in lines that match these regular expressions are 190 ignored") did not work well with "--name-only" and friends. 191 (merge b55e6d36eb ly/diff-name-only-with-diff-from-content later to maint). 192 193 * The above caused regressions, which has been corrected. 194 195 * Documentation for "git rebase" has been updated. 196 (merge 3f7f2b0359 je/doc-rebase later to maint). 197 198 * The start_delayed_progress() function in the progress eye-candy API 199 did not clear its internal state, making an initial delay value 200 larger than 1 second ineffective, which has been corrected. 201 202 * The compatObjectFormat extension is used to hide an incomplete 203 feature that is not yet usable for any purpose other than 204 developing the feature further. Document it as such to discourage 205 its use by mere mortals. 206 207 * "git log -L..." compared trees of multiple parents with the tree of the 208 merge result in an unnecessarily inefficient way. 209 (merge 0a15bb634c sg/line-log-merge-optim later to maint). 210 211 * Under a race against another process that is repacking the 212 repository, especially a partially cloned one, "git fetch" may 213 mistakenly think some objects we do have are missing, which has 214 been corrected. 215 216 * "git fetch" can clobber a symref that is dangling when the 217 remote-tracking HEAD is set to auto update, which has been 218 corrected. 219 220 * "git describe <blob>" misbehaves and/or crashes in some corner 221 cases, which has been taught to exit with failure gracefully. 222 (merge 7c10e48e81 jk/describe-blob later to maint). 223 224 * Manual page for "gitk" is updated with the current maintainer's 225 name. 226 227 * Update the instructions for using GGG in the MyFirstContribution 228 document to say that a GitHub PR could be made against `git/git` 229 instead of `gitgitgadget/git`. 230 231 * Makefile tried to run multiple "cargo build" which would not work 232 very well; serialize their execution to work around this problem. 233 234 * "git repack --path-walk" lost objects in some corner cases, which 235 has been corrected. 236 237 * "git ls-files <pathspec>..." should not necessarily have to expand 238 the index fully if a sparsified directory is excluded by the 239 pathspec; the code is taught to expand the index on demand to avoid 240 this. 241 (merge 681f26bccc ds/ls-files-lazy-unsparse later to maint). 242 243 * Windows "real-time monitoring" interferes with the execution of 244 tests and affects negatively in both correctness and performance, 245 which has been disabled in Gitlab CI. 246 247 * A broken or malicious "git fetch" can say that it has the same 248 object for many many times, and the upload-pack serving it can 249 exhaust memory storing them redundantly, which has been corrected. 250 251 * A corner case bug in "git log -L..." has been corrected. 252 253 * "git rev-parse --short" and friends failed to disambiguate two 254 objects with object names that share common prefix longer than 32 255 characters, which has been fixed. 256 (merge 8655908b9e jc/longer-disambiguation-fix later to maint). 257 258 * Some among "git add -p" and friends ignored color.diff and/or 259 color.ui configuration variables, which is an old regression, which 260 has been corrected. 261 262 * "git subtree" (in contrib/) did not work correctly when splitting 263 squashed subtrees, which has been improved. 264 265 * Import a newer version of the clar unit testing framework. 266 (merge 93dbb6b3c5 ps/clar-updates later to maint). 267 268 * "git send-email --compose --reply-to=<address>" used to add 269 duplicated Reply-To: header, which made mailservers unhappy. This 270 has been corrected. 271 (merge f448f65719 nb/send-email-no-dup-reply-to later to maint). 272 273 * "git rebase -i" failed to clean-up the commit log message when the 274 command commits the final one in a chain of "fixup" commands, which 275 has been corrected. 276 277 * There are double frees and leaks around setup_revisions() API used 278 in "git stash show", which has been fixed, and setup_revisions() 279 API gained a wrapper to make it more ergonomic when using it with 280 strvec-manged argc/argv pairs. 281 (merge a04bc71725 jk/setup-revisions-freefix later to maint). 282 283 * Deal more gracefully with directory / file conflicts when the files 284 backend is used for ref storage, by failing only the ones that are 285 involved in the conflict while allowing others. 286 287 * "git last-modified" operating in non-recursive mode used to trigger 288 a BUG(), which has been corrected. 289 290 * The use of "git config get" command to learn how ANSI color 291 sequence is for a particular type, e.g., "git config get 292 --type=color --default=reset no.such.thing", isn't very ergonomic. 293 (merge e4dabf4fd6 ps/config-get-color-fixes later to maint). 294 295 * The "do you still use it?" message given by a command that is 296 deeply deprecated and allow us to suggest alternatives has been 297 updated. 298 299 * Clang-format update to let our control macros be formatted the way we 300 had them traditionally, e.g., "for_each_string_list_item()" without 301 space before the parentheses. 302 303 * A few places where a size_t value was cast to curl_off_t without 304 checking has been updated to use the existing helper function. 305 306 * "git reflog write" did not honor the configured user.name/email 307 which has been corrected. 308 309 * Handling of an empty subdirectory of .git/refs/ in the ref-files 310 backend has been corrected. 311 312 * Our CI script requires "sudo" that can be told to preserve 313 environment, but Ubuntu replaced with "sudo" with an implementation 314 that lacks the feature. Work this around by reinstalling the 315 original version. 316 317 * The reftable backend learned to sanity check its on-disk data more 318 carefully. 319 (merge 466a3a1afd kn/reftable-consistency-checks later to maint). 320 321 * A lot of code clean-up of xdiff. 322 Split out of a larger topic. 323 (merge 8b9c5d2e3a en/xdiff-cleanup later to maint). 324 325 * "git format-patch --range-diff=... --notes=..." did not drive the 326 underlying range-diff with correct --notes parameter, ending up 327 comparing with different set of notes from its main patch output 328 you would get from "git format-patch --notes=..." for a singleton 329 patch. 330 331 * The code in "git add -p" and friends to iterate over hunks was 332 riddled with bugs, which has been corrected. 333 334 * A few more things that patch authors can do to help maintainer to 335 keep track of their topics better. 336 (merge 1a41698841 tb/doc-submitting-patches later to maint). 337 338 * An earlier addition to "git diff --no-index A B" to limit the 339 output with pathspec after the two directories misbehaved when 340 these directories were given with a trailing slash, which has been 341 corrected. 342 343 * The "--short" option of "git status" that meant output for humans 344 and "-z" option to show NUL delimited output format did not mix 345 well, and colored some but not all things. The command has been 346 updated to color all elements consistently in such a case. 347 348 * Unicode width table update. 349 350 * GPG signing test set-up has been broken for a year, which has been 351 corrected. 352 (merge 516bf45749 jc/t1016-setup-fix later to maint). 353 354 * Recent OpenSSH creates the Unix domain socket to communicate with 355 ssh-agent under $HOME instead of /tmp, which causes our test to 356 fail doe to overly long pathname in our test environment, which has 357 been worked around by using "ssh-agent -T". 358 359 * Other code cleanup, docfix, build fix, etc. 360 (merge 529a60a885 ua/t1517-short-help-tests later to maint). 361 (merge 22d421fed9 ac/deglobal-fmt-merge-log-config later to maint). 362 (merge a60203a015 dk/t7005-editor-updates later to maint). 363 (merge 16684b6fae ps/reftable-libgit2-cleanup later to maint). 364 (merge e5c27bd3d8 je/doc-add later to maint). 365 (merge 13296ac909 ps/object-store-midx-dedup-info later to maint). 366 (merge f9a6705d9a tc/t0450-harden later to maint). 367 (merge a66fc22bf9 rs/get-oid-with-flags-cleanup later to maint). 368 (merge 15b8abde07 js/mingw-includes-cleanup later to maint). 369 (merge 2cebca0582 tb/cat-file-objectmode-update later to maint).