1Git 2.5 Release Notes 2===================== 3 4Updates since v2.4 5------------------ 6 7Ports 8 9 10UI, Workflows & Features 11 12 * "git p4" now detects the filetype (e.g. binary) correctly even when 13 the files are opened exclusively. 14 15 * git p4 attempts to better handle branches in Perforce. 16 17 * "git p4" learned "--changes-block-size <n>" to read the changes in 18 chunks from Perforce, instead of making one call to "p4 changes" 19 that may trigger "too many rows scanned" error from Perforce. 20 21 * "git show-branch --topics HEAD" (with no other arguments) did not 22 do anything interesting. Instead, contrast the given revision 23 against all the local branches by default. 24 25 * A replacement for contrib/workdir/git-new-workdir that does not 26 rely on symbolic links and make sharing of objects and refs safer 27 by making the borrowee and borrowers aware of each other. 28 29 * Tweak the sample "store" backend of the credential helper to honor 30 XDG configuration file locations when specified. 31 32 * A heuristic to help the "git <cmd> <revs> <pathspec>" command line 33 convention to catch mistyped paths is to make sure all the non-rev 34 parameters in the later part of the command line are names of the 35 files in the working tree, but that means "git grep $str -- \*.c" 36 must always be disambiguated with "--", because nobody sane will 37 create a file whose name literally is asterisk-dot-see. Loosen the 38 heuristic to declare that with a wildcard string the user likely 39 meant to give us a pathspec. 40 41 * "git merge FETCH_HEAD" learned that the previous "git fetch" could 42 be to create an Octopus merge, i.e. recording multiple branches 43 that are not marked as "not-for-merge"; this allows us to lose an 44 old style invocation "git merge <msg> HEAD $commits..." in the 45 implementation of "git pull" script; the old style syntax can now 46 be deprecated. 47 48 * Help us to find broken test script that splits the body part of the 49 test by mistaken use of wrong kind of quotes. 50 (merge d93d5d5 jc/test-prereq-validate later to maint). 51 52 * Developer support to automatically detect broken &&-chain in the 53 test scripts is now turned on by default. 54 (merge 92b269f jk/test-chain-lint later to maint). 55 56 57Performance, Internal Implementation, Development Support etc. 58 59 * "unsigned char [20]" used thoughout the code to represent object 60 names are being converted into a semi-opaque "struct object_id". 61 This effort is expected to interfere with other topics in flight, 62 but hopefully will give us one extra level of abstraction in the 63 end, when completed. 64 65 * Catch a programmer mistake to feed a pointer not an array to 66 ARRAY_SIZE() macro, by using a couple of GCC extensions. 67 (merge 89c855e ep/do-not-feed-a-pointer-to-array-size later to maint). 68 69 * Some error messages in "git config" were emitted without calling 70 the usual error() facility. 71 72 * When "add--interactive" splits a hunk into two overlapping hunks 73 and then let the user choose only one, it sometimes feeds an 74 incorrect patch text to "git apply". Add tests to demonstrate 75 this. 76 77 I have a slight suspicion that this may be $gmane/87202 coming back 78 and biting us (I seem to have said "let's run with this and see 79 what happens" back then). 80 81 * More line-ending tests. 82 83 * An earlier rewrite to use strbuf_getwholeline() instead of fgets(3) 84 to read packed-refs file revealed that the former is unacceptably 85 inefficient. 86 87 * The refs API uses ref_lock struct which had its own "int fd", even 88 though the same file descriptor was in the lock struct it contains. 89 Clean-up the code to lose this redundant field. 90 91 * Add the "--allow-unknown-type" option to "cat-file" to allow 92 inspecting loose objects of an experimental or a broken type. 93 94 * Many long-running operations show progress eye-candy, even when 95 they are later backgrounded. Hide the eye-candy when the process 96 is sent to the background instead. 97 (merge 9a9a41d lm/squelch-bg-progress later to maint). 98 99 100Also contains various documentation updates and code clean-ups. 101 102 103Fixes since v2.4 104---------------- 105 106Unless otherwise noted, all the fixes since v2.4 in the maintenance 107track are contained in this release (see the maintenance releases' 108notes for details). 109 110 * Memory usage of "git index-pack" has been trimmed by tens of 111 per-cent. 112 (merge c6458e6 nd/slim-index-pack-memory-usage later to maint). 113 114 * "git rev-list --objects $old --not --all" to see if everything that 115 is reachable from $old is already connected to the existing refs 116 was very inefficient. 117 (merge b6e8a3b jk/still-interesting later to maint). 118 119 * "hash-object --literally" introduced in v2.2 was not prepared to 120 take a really long object type name. 121 (merge 1427a7f jc/hash-object later to maint). 122 123 * "git rebase --quiet" was not quite quiet when there is nothing to 124 do. 125 (merge 22946a9 jk/rebase-quiet-noop later to maint). 126 127 * The completion for "log --decorate=" parameter value was incorrect. 128 (merge af16bda sg/complete-decorate-full-not-long later to maint). 129 130 * "filter-branch" corrupted commit log message that ends with an 131 incomplete line on platforms with some "sed" implementations that 132 munge such a line. Work it around by avoiding to use "sed". 133 (merge df06201 jk/filter-branch-use-of-sed-on-incomplete-line later to maint). 134 135 * "git daemon" fails to build from the source under NO_IPV6 136 configuration (regression in 2.4). 137 (merge d358f77 jc/daemon-no-ipv6-for-2.4.1 later to maint). 138 139 * Some time ago, "git blame" (incorrectly) lost the convert_to_git() 140 call when synthesizing a fake "tip" commit that represents the 141 state in the working tree, which broke folks who record the history 142 with LF line ending to make their project portabile across 143 platforms while terminating lines in their working tree files with 144 CRLF for their platform. 145 (merge 4bf256d tb/blame-resurrect-convert-to-git later to maint). 146 147 * We avoid setting core.worktree when the repository location is the 148 ".git" directory directly at the top level of the working tree, but 149 the code misdetected the case in which the working tree is at the 150 root level of the filesystem (which arguably is a silly thing to 151 do, but still valid). 152 (merge 84ccad8 jk/init-core-worktree-at-root later to maint). 153 154 * "git commit --date=now" or anything that relies on approxidate lost 155 the daylight-saving-time offset. 156 (merge f6e6362 jc/epochtime-wo-tz later to maint). 157 158 * Access to objects in repositories that borrow from another one on a 159 slow NFS server unnecessarily got more expensive due to recent code 160 becoming more cautious in a naive way not to lose objects to pruning. 161 (merge ee1c6c3 jk/prune-mtime later to maint). 162 163 * The codepaths that read .gitignore and .gitattributes files have been 164 taught that these files encoded in UTF-8 may have UTF-8 BOM marker at 165 the beginning; this makes it in line with what we do for configuration 166 files already. 167 (merge 27547e5 cn/bom-in-gitignore later to maint). 168 169 * a few helper scripts in the test suite did not report errors 170 correcty. 171 (merge de248e9 ep/fix-test-lib-functions-report later to maint). 172 173 * The default $HOME/.gitconfig file created upon "git config --global" 174 that edits it had incorrectly spelled user.name and user.email 175 entries in it. 176 (merge 7e11052 oh/fix-config-default-user-name-section later to maint). 177 178 * "git cat-file bl $blob" failed to barf even though there is no 179 object type that is "bl". 180 (merge b7994af jk/type-from-string-gently later to maint). 181 182 * The usual "git diff" when seeing a file turning into a directory 183 showed a patchset to remove the file and create all files in the 184 directory, but "git diff --no-index" simply refused to work. Also, 185 when asked to compare a file and a directory, imitate POSIX "diff" 186 and compare the file with the file with the same name in the 187 directory, instead of refusing to run. 188 (merge 0615173 jc/diff-no-index-d-f later to maint). 189 190 * "git rebase -i" moved the "current" command from "todo" to "done" a 191 bit too prematurely, losing a step when a "pick" did not even start. 192 (merge 8cbc57c ph/rebase-i-redo later to maint). 193 194 * The connection initiation code for "ssh" transport tried to absorb 195 differences between the stock "ssh" and Putty-supplied "plink" and 196 its derivatives, but the logic to tell that we are using "plink" 197 variants were too loose and falsely triggered when "plink" appeared 198 anywhere in the path (e.g. "/home/me/bin/uplink/ssh"). 199 (merge baaf233 bc/connect-plink later to maint). 200 201 * "git stash pop/apply" forgot to make sure that not just the working 202 tree is clean but also the index is clean. The latter is important 203 as a stash application can conflict and the index will be used for 204 conflict resolution. 205 (merge ed178ef jk/stash-require-clean-index later to maint). 206 207 * We have prepended $GIT_EXEC_PATH and the path "git" is installed in 208 (typically "/usr/bin") to $PATH when invoking subprograms and hooks 209 for almost eternity, but the original use case the latter tried to 210 support was semi-bogus (i.e. install git to /opt/foo/git and run it 211 without having /opt/foo on $PATH), and more importantly it has 212 become less and less relevant as Git grew more mainstream (i.e. the 213 users would _want_ to have it on their $PATH). Stop prepending the 214 path in which "git" is installed to users' $PATH, as that would 215 interfere the command search order people depend on (e.g. they may 216 not like versions of programs that are unrelated to Git in /usr/bin 217 and want to override them by having different ones in /usr/local/bin 218 and have the latter directory earlier in their $PATH). 219 (merge a0b4507 jk/git-no-more-argv0-path-munging later to maint). 220 221 * core.excludesfile (defaulting to $XDG_HOME/git/ignore) is supposed 222 to be overridden by repository-specific .git/info/exclude file, but 223 the order was swapped from the beginning. This belatedly fixes it. 224 (merge 099d2d8 jc/gitignore-precedence later to maint). 225 226 * After "git add -N", the path appeared in output of "git diff HEAD" 227 and "git diff --cached HEAD", leading "git status" to classify it 228 as "Changes to be committed". Such a path, however, is not yet to 229 be scheduled to be committed. "git diff" showed the change to the 230 path as modification, not as a "new file", in the header of its 231 output. 232 233 Treat such paths as "yet to be added to the index but Git already 234 know about them"; "git diff HEAD" and "git diff --cached HEAD" 235 should not talk about them, and "git diff" should show them as new 236 files yet to be added to the index. 237 (merge d95d728 nd/diff-i-t-a later to maint). 238 239 * Code cleanups and documentation updates. 240 (merge 0269f96 mm/usage-log-l-can-take-regex later to maint). 241 (merge 64f2589 nd/t1509-chroot-test later to maint). 242 (merge f86a374 sb/test-bitmap-free-at-end later to maint). 243 (merge 05bfc7d sb/line-log-plug-pairdiff-leak later to maint). 244 (merge 846e5df pt/xdg-config-path later to maint). 245 (merge 1154aa4 jc/plug-fmt-merge-msg-leak later to maint). 246 (merge 319b678 jk/sha1-file-reduce-useless-warnings later to maint). 247 (merge 9a35c14 fg/document-commit-message-stripping later to maint).