| Git 2.5 Release Notes |
| ===================== |
| |
| Updates since v2.4 |
| ------------------ |
| |
| Ports |
| |
| |
| UI, Workflows & Features |
| |
| * "git p4" now detects the filetype (e.g. binary) correctly even when |
| the files are opened exclusively. |
| |
| * git p4 attempts to better handle branches in Perforce. |
| |
| * "git p4" learned "--changes-block-size <n>" to read the changes in |
| chunks from Perforce, instead of making one call to "p4 changes" |
| that may trigger "too many rows scanned" error from Perforce. |
| |
| * "git show-branch --topics HEAD" (with no other arguments) did not |
| do anything interesting. Instead, contrast the given revision |
| against all the local branches by default. |
| |
| * A replacement for contrib/workdir/git-new-workdir that does not |
| rely on symbolic links and make sharing of objects and refs safer |
| by making the borrowee and borrowers aware of each other. |
| |
| * Tweak the sample "store" backend of the credential helper to honor |
| XDG configuration file locations when specified. |
| |
| * A heuristic to help the "git <cmd> <revs> <pathspec>" command line |
| convention to catch mistyped paths is to make sure all the non-rev |
| parameters in the later part of the command line are names of the |
| files in the working tree, but that means "git grep $str -- \*.c" |
| must always be disambiguated with "--", because nobody sane will |
| create a file whose name literally is asterisk-dot-see. Loosen the |
| heuristic to declare that with a wildcard string the user likely |
| meant to give us a pathspec. |
| |
| * "git merge FETCH_HEAD" learned that the previous "git fetch" could |
| be to create an Octopus merge, i.e. recording multiple branches |
| that are not marked as "not-for-merge"; this allows us to lose an |
| old style invocation "git merge <msg> HEAD $commits..." in the |
| implementation of "git pull" script; the old style syntax can now |
| be deprecated. |
| |
| * Help us to find broken test script that splits the body part of the |
| test by mistaken use of wrong kind of quotes. |
| (merge d93d5d5 jc/test-prereq-validate later to maint). |
| |
| * Developer support to automatically detect broken &&-chain in the |
| test scripts is now turned on by default. |
| (merge 92b269f jk/test-chain-lint later to maint). |
| |
| * Filter scripts were run with SIGPIPE disabled on the Git side, |
| expecting that they may not read what Git feeds them to filter. |
| We however treated a filter that does not read its input fully |
| before exiting as an error. |
| |
| This changes semantics, but arguably in a good way. If a filter |
| can produce its output without consuming its input using whatever |
| magic, we now let it do so, instead of diagnosing it as a |
| programming error. |
| |
| * Instead of dying immediately upon failing to obtain a lock, the |
| locking (of refs etc) retries after a short while with backoff. |
| |
| * Introduce http.<url>.SSLCipherList configuration variable to tweak |
| the list of cipher suite to be used with libcURL when talking with |
| https:// sites. |
| |
| * "git subtree" script (in contrib/) used "echo -n" to produce |
| progress messages in a non-portable way. |
| |
| * "git subtree" script (in contrib/) does not have --squash option |
| when pushing, but the documentation and help text pretended as if |
| it did. |
| |
| * The Git subcommand completion (in contrib/) listed credential |
| helpers among candidates, which is not something the end user would |
| invoke interatively. |
| |
| |
| Performance, Internal Implementation, Development Support etc. |
| |
| * "unsigned char [20]" used thoughout the code to represent object |
| names are being converted into a semi-opaque "struct object_id". |
| This effort is expected to interfere with other topics in flight, |
| but hopefully will give us one extra level of abstraction in the |
| end, when completed. |
| |
| * Catch a programmer mistake to feed a pointer not an array to |
| ARRAY_SIZE() macro, by using a couple of GCC extensions. |
| (merge 89c855e ep/do-not-feed-a-pointer-to-array-size later to maint). |
| |
| * Some error messages in "git config" were emitted without calling |
| the usual error() facility. |
| |
| * When "add--interactive" splits a hunk into two overlapping hunks |
| and then let the user choose only one, it sometimes feeds an |
| incorrect patch text to "git apply". Add tests to demonstrate |
| this. |
| |
| I have a slight suspicion that this may be $gmane/87202 coming back |
| and biting us (I seem to have said "let's run with this and see |
| what happens" back then). |
| |
| * More line-ending tests. |
| |
| * An earlier rewrite to use strbuf_getwholeline() instead of fgets(3) |
| to read packed-refs file revealed that the former is unacceptably |
| inefficient. |
| |
| * The refs API uses ref_lock struct which had its own "int fd", even |
| though the same file descriptor was in the lock struct it contains. |
| Clean-up the code to lose this redundant field. |
| |
| * Add the "--allow-unknown-type" option to "cat-file" to allow |
| inspecting loose objects of an experimental or a broken type. |
| |
| * Many long-running operations show progress eye-candy, even when |
| they are later backgrounded. Hide the eye-candy when the process |
| is sent to the background instead. |
| (merge 9a9a41d lm/squelch-bg-progress later to maint). |
| |
| * There was a dead code that used to handle "git pull --tags" and |
| show special-cased error message, which was made irrelevant when |
| the semantics of the option changed back in Git 1.9 days. |
| (merge 19d122b pt/pull-tags-error-diag later to maint). |
| |
| |
| Also contains various documentation updates and code clean-ups. |
| |
| |
| Fixes since v2.4 |
| ---------------- |
| |
| Unless otherwise noted, all the fixes since v2.4 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| notes for details). |
| |
| * Git 2.4 broke setting verbosity and progress levels on "git clone" |
| with native transports. |
| (merge 822f0c4 mh/clone-verbosity-fix later to maint). |
| |
| * "git add -e" did not allow the user to abort the operation by |
| killing the editor. |
| (merge cb64800 jk/add-e-kill-editor later to maint). |
| |
| * Memory usage of "git index-pack" has been trimmed by tens of |
| per-cent. |
| (merge c6458e6 nd/slim-index-pack-memory-usage later to maint). |
| |
| * "git rev-list --objects $old --not --all" to see if everything that |
| is reachable from $old is already connected to the existing refs |
| was very inefficient. |
| (merge b6e8a3b jk/still-interesting later to maint). |
| |
| * "hash-object --literally" introduced in v2.2 was not prepared to |
| take a really long object type name. |
| (merge 1427a7f jc/hash-object later to maint). |
| |
| * "git rebase --quiet" was not quite quiet when there is nothing to |
| do. |
| (merge 22946a9 jk/rebase-quiet-noop later to maint). |
| |
| * The completion for "log --decorate=" parameter value was incorrect. |
| (merge af16bda sg/complete-decorate-full-not-long later to maint). |
| |
| * "filter-branch" corrupted commit log message that ends with an |
| incomplete line on platforms with some "sed" implementations that |
| munge such a line. Work it around by avoiding to use "sed". |
| (merge df06201 jk/filter-branch-use-of-sed-on-incomplete-line later to maint). |
| |
| * "git daemon" fails to build from the source under NO_IPV6 |
| configuration (regression in 2.4). |
| (merge d358f77 jc/daemon-no-ipv6-for-2.4.1 later to maint). |
| |
| * Some time ago, "git blame" (incorrectly) lost the convert_to_git() |
| call when synthesizing a fake "tip" commit that represents the |
| state in the working tree, which broke folks who record the history |
| with LF line ending to make their project portabile across |
| platforms while terminating lines in their working tree files with |
| CRLF for their platform. |
| (merge 4bf256d tb/blame-resurrect-convert-to-git later to maint). |
| |
| * We avoid setting core.worktree when the repository location is the |
| ".git" directory directly at the top level of the working tree, but |
| the code misdetected the case in which the working tree is at the |
| root level of the filesystem (which arguably is a silly thing to |
| do, but still valid). |
| (merge 84ccad8 jk/init-core-worktree-at-root later to maint). |
| |
| * "git commit --date=now" or anything that relies on approxidate lost |
| the daylight-saving-time offset. |
| (merge f6e6362 jc/epochtime-wo-tz later to maint). |
| |
| * Access to objects in repositories that borrow from another one on a |
| slow NFS server unnecessarily got more expensive due to recent code |
| becoming more cautious in a naive way not to lose objects to pruning. |
| (merge ee1c6c3 jk/prune-mtime later to maint). |
| |
| * The codepaths that read .gitignore and .gitattributes files have been |
| taught that these files encoded in UTF-8 may have UTF-8 BOM marker at |
| the beginning; this makes it in line with what we do for configuration |
| files already. |
| (merge 27547e5 cn/bom-in-gitignore later to maint). |
| |
| * a few helper scripts in the test suite did not report errors |
| correcty. |
| (merge de248e9 ep/fix-test-lib-functions-report later to maint). |
| |
| * The default $HOME/.gitconfig file created upon "git config --global" |
| that edits it had incorrectly spelled user.name and user.email |
| entries in it. |
| (merge 7e11052 oh/fix-config-default-user-name-section later to maint). |
| |
| * "git cat-file bl $blob" failed to barf even though there is no |
| object type that is "bl". |
| (merge b7994af jk/type-from-string-gently later to maint). |
| |
| * The usual "git diff" when seeing a file turning into a directory |
| showed a patchset to remove the file and create all files in the |
| directory, but "git diff --no-index" simply refused to work. Also, |
| when asked to compare a file and a directory, imitate POSIX "diff" |
| and compare the file with the file with the same name in the |
| directory, instead of refusing to run. |
| (merge 0615173 jc/diff-no-index-d-f later to maint). |
| |
| * "git rebase -i" moved the "current" command from "todo" to "done" a |
| bit too prematurely, losing a step when a "pick" did not even start. |
| (merge 8cbc57c ph/rebase-i-redo later to maint). |
| |
| * The connection initiation code for "ssh" transport tried to absorb |
| differences between the stock "ssh" and Putty-supplied "plink" and |
| its derivatives, but the logic to tell that we are using "plink" |
| variants were too loose and falsely triggered when "plink" appeared |
| anywhere in the path (e.g. "/home/me/bin/uplink/ssh"). |
| (merge baaf233 bc/connect-plink later to maint). |
| |
| * "git stash pop/apply" forgot to make sure that not just the working |
| tree is clean but also the index is clean. The latter is important |
| as a stash application can conflict and the index will be used for |
| conflict resolution. |
| (merge ed178ef jk/stash-require-clean-index later to maint). |
| |
| * We have prepended $GIT_EXEC_PATH and the path "git" is installed in |
| (typically "/usr/bin") to $PATH when invoking subprograms and hooks |
| for almost eternity, but the original use case the latter tried to |
| support was semi-bogus (i.e. install git to /opt/foo/git and run it |
| without having /opt/foo on $PATH), and more importantly it has |
| become less and less relevant as Git grew more mainstream (i.e. the |
| users would _want_ to have it on their $PATH). Stop prepending the |
| path in which "git" is installed to users' $PATH, as that would |
| interfere the command search order people depend on (e.g. they may |
| not like versions of programs that are unrelated to Git in /usr/bin |
| and want to override them by having different ones in /usr/local/bin |
| and have the latter directory earlier in their $PATH). |
| (merge a0b4507 jk/git-no-more-argv0-path-munging later to maint). |
| |
| * core.excludesfile (defaulting to $XDG_HOME/git/ignore) is supposed |
| to be overridden by repository-specific .git/info/exclude file, but |
| the order was swapped from the beginning. This belatedly fixes it. |
| (merge 099d2d8 jc/gitignore-precedence later to maint). |
| |
| * After "git add -N", the path appeared in output of "git diff HEAD" |
| and "git diff --cached HEAD", leading "git status" to classify it |
| as "Changes to be committed". Such a path, however, is not yet to |
| be scheduled to be committed. "git diff" showed the change to the |
| path as modification, not as a "new file", in the header of its |
| output. |
| |
| Treat such paths as "yet to be added to the index but Git already |
| know about them"; "git diff HEAD" and "git diff --cached HEAD" |
| should not talk about them, and "git diff" should show them as new |
| files yet to be added to the index. |
| (merge d95d728 nd/diff-i-t-a later to maint). |
| |
| * There was a commented-out (instead of being marked to expect |
| failure) test that documented a breakage that was fixed since the |
| test was written; turn it into a proper test. |
| (merge 66d2e04 sb/t1020-cleanup later to maint). |
| |
| * The "log --decorate" enhancement in Git 2.4 that shows the commit |
| at the tip of the current branch e.g. "HEAD -> master", did not |
| work with --decorate=full. |
| (merge 429ad20 mg/log-decorate-HEAD later to maint). |
| |
| * The ref API did not handle cases where 'refs/heads/xyzzy/frotz' is |
| removed at the same time as 'refs/heads/xyzzy' is added (or vice |
| versa) very well. |
| (merge c628edf mh/ref-directory-file later to maint). |
| |
| * Multi-ref transaction support we merged a few releases ago |
| unnecessarily kept many file descriptors open, risking to fail with |
| resource exhaustion. This is for 2.4.x track. |
| (merge 185ce3a mh/write-refs-sooner-2.4 later to maint). |
| |
| * "git bundle verify" did not diagnose extra parameters on the |
| command line. |
| (merge 7886cfa ps/bundle-verify-arg later to maint). |
| |
| * Various documentation mark-up fixes to make the output more |
| consistent in general and also make AsciiDoctor (an alternative |
| formatter) happier. |
| (merge d0258b9 jk/asciidoc-markup-fix later to maint). |
| (merge ad3967a jk/stripspace-asciidoctor-fix later to maint). |
| (merge 975e382 ja/tutorial-asciidoctor-fix later to maint). |
| |
| * Code cleanups and documentation updates. |
| (merge 0269f96 mm/usage-log-l-can-take-regex later to maint). |
| (merge 64f2589 nd/t1509-chroot-test later to maint). |
| (merge f86a374 sb/test-bitmap-free-at-end later to maint). |
| (merge 05bfc7d sb/line-log-plug-pairdiff-leak later to maint). |
| (merge 846e5df pt/xdg-config-path later to maint). |
| (merge 1154aa4 jc/plug-fmt-merge-msg-leak later to maint). |
| (merge 319b678 jk/sha1-file-reduce-useless-warnings later to maint). |
| (merge 9a35c14 fg/document-commit-message-stripping later to maint). |
| (merge bbf431c ps/doc-packfile-vs-pack-file later to maint). |
| (merge 309a9e3 jk/skip-http-tests-under-no-curl later to maint). |
| (merge ccd593c dl/branch-error-message later to maint). |