Merge branch 'js/unzip-in-usr-bin-workaround'
[gitweb.git] / Documentation / RelNotes / 2.12.0.txt
index 778145a3ed322fc8ad971f02944149335afad48e..001745ee75886ef39f9d8a773dd1d28002f92ea2 100644 (file)
@@ -11,8 +11,8 @@ Backward compatibility notes.
    is not scheduled to happen in the upcoming release (yet).
 
  * The historical argument order "git merge <msg> HEAD <commit>..."
-   has been deprecated for quite some time, and will be removed in the
-   upcoming release.
+   has been deprecated for quite some time, and will be removed in a
+   future release.
 
 
 Updates since v2.11
@@ -61,6 +61,44 @@ UI, Workflows & Features
    the previous hack that depended on internals of (older) MSVC
    runtime.
 
+ * Some platforms no longer understand "latin-1" that is still seen in
+   the wild in e-mail headers; replace them with "iso-8859-1" that is
+   more widely known when conversion fails from/to it.
+   (merge df3755888b jc/latin-1 later to maint).
+
+ * "git grep" has been taught to optionally recurse into submodules.
+
+ * "git rm" used to refuse to remove a submodule when it has its own
+   git repository embedded in its working tree.  It learned to move
+   the repository away to $GIT_DIR/modules/ of the superproject
+   instead, and allow the submodule to be deleted (as long as there
+   will be no loss of local modifications, that is).
+
+ * A recent updates to "git p4" was not usable for older p4 but it
+   could be made to work with minimum changes.  Do so.
+
+ * "git diff" learned diff.interHunkContext configuration variable
+   that gives the default value for its --inter-hunk-context option.
+
+ * The prereleaseSuffix feature of version comparison that is used in
+   "git tag -l" did not correctly when two or more prereleases for the
+   same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2
+   are there and the code needs to compare 2.0-beta1 and 2.0-beta2).
+
+ * "git submodule push" learned "--recurse-submodules=only option to
+   push submodules out without pushing the top-level superproject.
+
+ * "git tag" and "git verify-tag" learned to put GPG verification
+   status in their "--format=<placeholders>" output format.
+
+ * An ancient repository conversion tool left in contrib/ has been
+   removed.
+
+ * "git show-ref HEAD" used with "--verify" because the user is not
+   interested in seeing refs/remotes/origin/HEAD, and used with
+   "--head" because the user does not want HEAD to be filtered out,
+   i.e. "git show-ref --head --verify HEAD", did not work as expected.
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -70,17 +108,52 @@ Performance, Internal Implementation, Development Support etc.
    code with "git interpret-trailer".
 
  * The default Travis-CI configuration specifies newer P4 and GitLFS.
-   (merge 5f703e8f02 ls/travis-update-p4-and-lfs later to maint).
 
  * The "fast hash" that had disastrous performance issues in some
    corner cases has been retired from the internal diff.
 
  * The character width table has been updated to match Unicode 9.0
-   (merge 9e6e9aefdf bb/unicode-9.0 later to maint).
 
  * Update the procedure to generate "tags" for developer support.
    (merge 046e4c1c09 jk/make-tags-find-sources-tweak later to maint).
 
+ * The codeflow of setting NOATIME and CLOEXEC on file descriptors Git
+   opens has been simplified.
+   (merge b4d065df03 jc/git-open-cloexec later to maint).
+
+ * "git diff" and its family had two experimental heuristics to shift
+   the contents of a hunk to make the patch easier to read.  One of
+   them turns out to be better than the other, so leave only the
+   "--indent-heuristic" option and remove the other one.
+   (merge 3cde4e02ee jc/retire-compaction-heuristics later to maint).
+
+ * A new submodule helper "git submodule embedgitdirs" to make it
+   easier to move embedded .git/ directory for submodules in a
+   superproject to .git/modules/ (and point the latter with the former
+   that is turned into a "gitdir:" file) has been added.
+
+ * "git push \\server\share\dir" has recently regressed and then
+   fixed.  A test has retroactively been added for this breakage.
+
+ * Build updates for Cygwin.
+
+ * The implementation of "real_path()" was to go there with chdir(2)
+   and call getcwd(3), but this obviously wouldn't be usable in a
+   threaded environment.  Rewrite it to manually resolve relative
+   paths including symbolic links in path components.
+
+ * Adjust documentation to help AsciiDoctor render better while not
+   breaking the rendering done by AsciiDoc.
+
+ * The sequencer machinery has been further enhanced so that a later
+   set of patches can start using it to reimplement "rebase -i".
+
+ * Update the definition of the MacOSX test environment used by
+   TravisCI.
+   (merge 672f51cb83 ls/travis-p4-on-macos later to maint).
+
+ * Rewrite a scripted porcelain "git difftool" in C.
+   (merge 94d3997ecc js/difftool-builtin later to maint).
 
 
 Also contains various documentation updates and code clean-ups.
@@ -96,7 +169,6 @@ notes for details).
    standard I/O streams are connected to a TTY, but isatty() that
    comes with Windows incorrectly returned true if it is used on NUL
    (i.e. an equivalent to /dev/null).  This has been fixed.
-   (merge cbb3f3c9b1 js/mingw-isatty later to maint).
 
  * "git svn" did not work well with path components that are "0", and
    some configuration variable it uses were not documented.
@@ -104,70 +176,56 @@ notes for details).
 
  * "git rev-parse --symbolic" failed with a more recent notation like
    "HEAD^-1" and "HEAD^!".
-   (merge a2e7b04c44 jk/rev-parse-symbolic-parents-fix later to maint).
 
  * An empty directory in a working tree that can simply be nuked used
    to interfere while merging or cherry-picking a change to create a
    submodule directory there, which has been fixed..
-   (merge 5423d2e700 dt/empty-submodule-in-merge later to maint).
 
  * The code in "git push" to compute if any commit being pushed in the
    superproject binds a commit in a submodule that hasn't been pushed
    out was overly inefficient, making it unusable even for a small
    project that does not have any submodule but have a reasonable
    number of refs.
-   (merge 250ab24ab3 hv/submodule-not-yet-pushed-fix later to maint).
 
  * "git push --dry-run --recurse-submodule=on-demand" wasn't
    "--dry-run" in the submodules.
-   (merge 0301c821c5 bw/push-dry-run later to maint).
 
  * The output from "git worktree list" was made in readdir() order,
    and was unstable.
-   (merge 4df1d4d466 nd/worktree-list-fixup later to maint).
 
  * mergetool.<tool>.trustExitCode configuration variable did not apply
    to built-in tools, but now it does.
-   (merge 2967284456 da/mergetool-trust-exit-code later to maint).
 
  * "git p4" LFS support was broken when LFS stores an empty blob.
-   (merge d5eb3cf5e7 ls/p4-empty-file-on-lfs later to maint).
 
  * A corner case in merge-recursive regression that crept in
    during 2.10 development cycle has been fixed.
-   (merge 1c25d2d8ed jc/renormalize-merge-kill-safer-crlf later to maint).
 
  * Transport with dumb http can be fooled into following foreign URLs
    that the end user does not intend to, especially with the server
    side redirects and http-alternates mechanism, which can lead to
    security issues.  Tighten the redirection and make it more obvious
    to the end user when it happens.
-   (merge cb4d2d35c4 jk/http-walker-limit-redirect-2.9 later to maint).
 
  * Update the error messages from the dumb-http client when it fails
    to obtain loose objects; we used to give sensible error message
    only upon 404 but we now forbid unexpected redirects that needs to
    be reported with something sensible.
-   (merge 3680f16f9d jk/http-walker-limit-redirect later to maint).
 
  * When diff.renames configuration is on (and with Git 2.9 and later,
    it is enabled by default, which made it worse), "git stash"
    misbehaved if a file is removed and another file with a very
    similar content is added.
-   (merge 9d4e28ead5 jk/stash-disable-renames-internally later to maint).
 
  * "git diff --no-index" did not take "--no-abbrev" option.
-   (merge 43d1948b7b jb/diff-no-index-no-abbrev later to maint).
 
  * "git difftool --dir-diff" had a minor regression when started from
    a subdirectory, which has been fixed.
-   (merge 853e10c197 da/difftool-dir-diff-fix later to maint).
 
  * "git commit --allow-empty --only" (no pathspec) with dirty index
    ought to be an acceptable way to create a new commit that does not
    change any paths, but it was forbidden, perhaps because nobody
    needed it so far.
-   (merge beb635ca9c ak/commit-only-allow-empty later to maint).
 
  * Git 2.11 had a minor regression in "merge --ff-only" that competed
    with another process that simultanously attempted to update the
@@ -177,26 +235,21 @@ notes for details).
 
  * A pathname that begins with "//" or "\\" on Windows is special but
    path normalization logic was unaware of it.
-   (merge 7814fbe3f1 js/normalize-path-copy-ceil later to maint).
 
  * "git pull --rebase", when there is no new commits on our side since
    we forked from the upstream, should be able to fast-forward without
    invoking "git rebase", but it didn't.
-   (merge 33b842a1e9 jc/pull-rebase-ff later to maint).
 
  * The way to specify hotkeys to "xxdiff" that is used by "git
    mergetool" has been modernized to match recent versions of xxdiff.
-   (merge 6cf5f6cef7 da/mergetool-xxdiff-hotkey later to maint).
 
  * Unlike "git am --abort", "git cherry-pick --abort" moved HEAD back
    to where cherry-pick started while picking multiple changes, when
    the cherry-pick stopped to ask for help from the user, and the user
    did "git reset --hard" to a different commit in order to re-attempt
    the operation.
-   (merge ce73bb22d8 sb/sequencer-abort-safety later to maint).
 
  * Code cleanup in shallow boundary computation.
-   (merge 649b0c316a nd/shallow-fixup later to maint).
 
  * A recent update to receive-pack to make it easier to drop garbage
    objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
@@ -204,52 +257,138 @@ notes for details).
    made it impossible to push into a repository at such a path.  This
    has been fixed by introducing a quoting mechanism used when
    appending such a path to the colon-separated list.
-   (merge 5e74824fac jk/quote-env-path-list-component later to maint).
 
  * The function usage_msg_opt() has been updated to say "fatal:"
    before the custom message programs give, when they want to die
    with a message about wrong command line options followed by the
    standard usage string.
-   (merge 87433261a4 jk/parseopt-usage-msg-opt later to maint).
 
  * "git index-pack --stdin" needs an access to an existing repository,
    but "git index-pack file.pack" to generate an .idx file that
    corresponds to a packfile does not.
-   (merge 29401e1575 jk/index-pack-wo-repo-from-stdin later to maint).
 
  * Fix for NDEBUG builds.
-   (merge 08414938a2 jt/mailinfo-fold-in-body-headers later to maint).
 
  * A lazy "git push" without refspec did not internally use a fully
    specified refspec to perform 'current', 'simple', or 'upstream'
    push, causing unnecessary "ambiguous ref" errors.
-   (merge b284495e93 jc/push-default-explicit later to maint).
 
  * "git p4" misbehaved when swapping a directory and a symbolic link.
-   (merge df8a9e86db ld/p4-compare-dir-vs-symlink later to maint).
 
  * Even though an fix was attempted in Git 2.9.3 days, but running
    "git difftool --dir-diff" from a subdirectory never worked. This
    has been fixed.
-   (merge ce6926974e jk/difftool-in-subdir later to maint).
 
  * "git p4" that tracks multile p4 paths imported a single changelist
    that touches files in these multiple paths as one commit, followed
    by many empty commits.  This has been fixed.
-   (merge 9943e5b979 gv/p4-multi-path-commit-fix later to maint).
 
  * A potential but unlikely buffer overflow in Windows port has been
    fixed.
-   (merge c46458e82f mk/mingw-winansi-ttyname-termination-fix later to maint).
+
+ * When the http server gives an incomplete response to a smart-http
+   rpc call, it could lead to client waiting for a full response that
+   will never come.  Teach the client side to notice this condition
+   and abort the transfer.
+
+ * Compression setting for producing packfiles were spread across
+   three codepaths, one of which did not honor any configuration.
+   Unify these so that all of them honor core.compression and
+   pack.compression variables the same way.
+   (merge 8de7eeb54b jc/compression-config later to maint).
+
+ * "git fast-import" sometimes mishandled while rebalancing notes
+   tree, which has been fixed.
+   (merge 405d7f4af6 mh/fast-import-notes-fix-new later to maint).
+
+ * Recent update to the default abbreviation length that auto-scales
+   lacked documentation update, which has been corrected.
+   (merge 48d5014dd4 jc/abbrev-autoscale-config later to maint).
+
+ * Leakage of lockfiles in the config subsystem has been fixed.
+   (merge c06fa62dfc nd/config-misc-fixes later to maint).
+
+ * It is natural that "git gc --auto" may not attempt to pack
+   everything into a single pack, and there is no point in warning
+   when the user has configured the system to use the pack bitmap,
+   leading to disabling further "gc".
+   (merge 1c409a705c dt/disable-bitmap-in-auto-gc later to maint).
+
+ * "git archive" did not read the standard configuration files, and
+   failed to notice a file that is marked as binary via the userdiff
+   driver configuration.
+   (merge 965cba2e7e jk/archive-zip-userdiff-config later to maint).
+
+ * "git blame --porcelain" misidentified the "previous" <commit, path>
+   pair (aka "source") when contents came from two or more files.
+   (merge 4e76832984 jk/blame-fixes later to maint).
+
+ * "git rebase -i" with a recent update started showing an incorrect
+   count when squashing more than 10 commits.
+   (merge 356b8ecff1 jk/rebase-i-squash-count-fix later to maint).
+
+ * "git <cmd> @{push}" on a detached HEAD used to segfault; it has
+   been corrected to error out with a message.
+   (merge b10731f43d km/branch-get-push-while-detached later to maint).
+
+ * Running "git add a/b" when "a" is a submodule correctly errored
+   out, but without a meaningful error message.
+   (merge 2d81c48fa7 sb/pathspec-errors later to maint).
+
+ * Typing ^C to pager, which usually does not kill it, killed Git and
+   took the pager down as a collateral damage in certain process-tree
+   structure.  This has been fixed.
+   (merge 46df6906f3 jk/execv-dashed-external later to maint).
+
+ * "git mergetool" without any pathspec on the command line that is
+   run from a subdirectory became no-op in Git v2.11 by mistake, which
+   has been fixed.
+
+ * Retire long unused/unmaintained gitview from the contrib/ area.
+   (merge 3120925c25 sb/remove-gitview later to maint).
+
+ * Tighten a test to avoid mistaking an extended ERE regexp engine as
+   a PRE regexp engine.
+   (merge 7675c7bd01 jk/grep-e-could-be-extended-beyond-posix later to maint).
+
+ * An error message with an ASCII control character like '\r' in it
+   can alter the message to hide its early part, which is problematic
+   when a remote side gives such an error message that the local side
+   will relay with a "remote: " prefix.
+   (merge f290089879 jk/vreport-sanitize later to maint).
+
+ * "git fsck" inspects loose objects more carefully now.
+   (merge cce044df7f jk/loose-object-fsck later to maint).
+
+ * A crashing bug introduced in v2.11 timeframe has been found (it is
+   triggerable only in fast-import) and fixed.
+   (merge abd5a00268 jk/clear-delta-base-cache-fix later to maint).
+
+ * With an anticipatory tweak for remotes defined in ~/.gitconfig
+   (e.g. "remote.origin.prune" set to true, even though there may or
+   may not actually be "origin" remote defined in a particular Git
+   repository), "git remote rename" and other commands misinterpreted
+   and behaved as if such a non-existing remote actually existed.
+   (merge e459b073fb js/remote-rename-with-half-configured-remote later to maint).
+
+ * A few codepaths had to rely on a global variable when sorting
+   elements of an array because sort(3) API does not allow extra data
+   to be passed to the comparison function.  Use qsort_s() when
+   natively available, and a fallback implementation of it when not,
+   to eliminate the need, which is a prerequisite for making the
+   codepath reentrant.
+   (merge 83fc4d64fe rs/qsort-s later to maint).
+
+ * "git fsck --connectivity-check" was not working at all.
+   (merge a2b22854bd jk/fsck-connectivity-check-fix later to maint).
 
  * Other minor doc, test and build updates and code cleanups.
-   (merge fa6ca11105 nd/qsort-in-merge-recursive later to maint).
-   (merge fa3142c919 ak/lazy-prereq-mktemp later to maint).
-   (merge 9c48b4fb23 ls/t0021-fixup later to maint).
-   (merge 584f99c87b sb/unpack-trees-grammofix later to maint).
-   (merge 54471fdcc3 jk/readme-gmane-is-no-more later to maint).
-   (merge 9e189f1a5c sb/t3600-cleanup later to maint).
-   (merge e2c20be57c lr/doc-fix-cet later to maint).
-   (merge 47437fd3bd kh/tutorial-grammofix later to maint).
    (merge f2627d9b19 sb/submodule-config-cleanup later to maint).
-   (merge 7eeda8b821 ls/filter-process later to maint).
+   (merge 384f1a167b sb/unpack-trees-cleanup later to maint).
+   (merge 3f05402ac0 ad/bisect-terms later to maint).
+   (merge 874444b704 rh/diff-orderfile-doc later to maint).
+   (merge c68d2d7c2b ws/request-pull-code-cleanup later to maint).
+   (merge 007ac54401 js/exec-path-coverity-workaround later to maint).
+   (merge 1797dc5176 jk/coding-guidelines-update later to maint).
+   (merge 1d3f065e0e js/mingw-isatty later to maint).
+   (merge 830c912a0e sb/in-core-index-doc later to maint).