| 1 | Git v2.9.4 Release Notes |
| 2 | ======================== |
| 3 | |
| 4 | Fixes since v2.9.3 |
| 5 | ------------------ |
| 6 | |
| 7 | * There are certain house-keeping tasks that need to be performed at |
| 8 | the very beginning of any Git program, and programs that are not |
| 9 | built-in commands had to do them exactly the same way as "git" |
| 10 | potty does. It was easy to make mistakes in one-off standalone |
| 11 | programs (like test helpers). A common "main()" function that |
| 12 | calls cmd_main() of individual program has been introduced to |
| 13 | make it harder to make mistakes. |
| 14 | |
| 15 | * "git merge" with renormalization did not work well with |
| 16 | merge-recursive, due to "safer crlf" conversion kicking in when it |
| 17 | shouldn't. |
| 18 | |
| 19 | * The reflog output format is documented better, and a new format |
| 20 | --date=unix to report the seconds-since-epoch (without timezone) |
| 21 | has been added. |
| 22 | |
| 23 | * "git push --force-with-lease" already had enough logic to allow |
| 24 | ensuring that such a push results in creation of a ref (i.e. the |
| 25 | receiving end did not have another push from sideways that would be |
| 26 | discarded by our force-pushing), but didn't expose this possibility |
| 27 | to the users. It does so now. |
| 28 | |
| 29 | * "import-tars" fast-import script (in contrib/) used to ignore a |
| 30 | hardlink target and replaced it with an empty file, which has been |
| 31 | corrected to record the same blob as the other file the hardlink is |
| 32 | shared with. |
| 33 | |
| 34 | * "git mv dir non-existing-dir/" did not work in some environments |
| 35 | the same way as existing mainstream platforms. The code now moves |
| 36 | "dir" to "non-existing-dir", without relying on rename("A", "B/") |
| 37 | that strips the trailing slash of '/'. |
| 38 | |
| 39 | * The "t/" hierarchy is prone to get an unusual pathname; "make test" |
| 40 | has been taught to make sure they do not contain paths that cannot |
| 41 | be checked out on Windows (and the mechanism can be reusable to |
| 42 | catch pathnames that are not portable to other platforms as need |
| 43 | arises). |
| 44 | |
| 45 | * When "git merge-recursive" works on history with many criss-cross |
| 46 | merges in "verbose" mode, the names the command assigns to the |
| 47 | virtual merge bases could have overwritten each other by unintended |
| 48 | reuse of the same piece of memory. |
| 49 | |
| 50 | * "git checkout --detach <branch>" used to give the same advice |
| 51 | message as that is issued when "git checkout <tag>" (or anything |
| 52 | that is not a branch name) is given, but asking with "--detach" is |
| 53 | an explicit enough sign that the user knows what is going on. The |
| 54 | advice message has been squelched in this case. |
| 55 | |
| 56 | * "git difftool" by default ignores the error exit from the backend |
| 57 | commands it spawns, because often they signal that they found |
| 58 | differences by exiting with a non-zero status code just like "diff" |
| 59 | does; the exit status codes 126 and above however are special in |
| 60 | that they are used to signal that the command is not executable, |
| 61 | does not exist, or killed by a signal. "git difftool" has been |
| 62 | taught to notice these exit status codes. |
| 63 | |
| 64 | * On Windows, help.browser configuration variable used to be ignored, |
| 65 | which has been corrected. |
| 66 | |
| 67 | * The "git -c var[=val] cmd" facility to append a configuration |
| 68 | variable definition at the end of the search order was described in |
| 69 | git(1) manual page, but not in git-config(1), which was more likely |
| 70 | place for people to look for when they ask "can I make a one-shot |
| 71 | override, and if so how?" |
| 72 | |
| 73 | * The tempfile (hence its user lockfile) API lets the caller to open |
| 74 | a file descriptor to a temporary file, write into it and then |
| 75 | finalize it by first closing the filehandle and then either |
| 76 | removing or renaming the temporary file. When the process spawns a |
| 77 | subprocess after obtaining the file descriptor, and if the |
| 78 | subprocess has not exited when the attempt to remove or rename is |
| 79 | made, the last step fails on Windows, because the subprocess has |
| 80 | the file descriptor still open. Open tempfile with O_CLOEXEC flag |
| 81 | to avoid this (on Windows, this is mapped to O_NOINHERIT). |
| 82 | |
| 83 | * "git-shell" rejects a request to serve a repository whose name |
| 84 | begins with a dash, which makes it no longer possible to get it |
| 85 | confused into spawning service programs like "git-upload-pack" with |
| 86 | an option like "--help", which in turn would spawn an interactive |
| 87 | pager, instead of working with the repository user asked to access |
| 88 | (i.e. the one whose name is "--help"). |
| 89 | |
| 90 | Also contains minor documentation updates and code clean-ups. |