Merge branch 'jk/no-looking-at-dotgit-outside-repo'
[gitweb.git] / Documentation / RelNotes / 2.11.0.txt
index 3bc074fc031e6e790e07fe7d5b0dde6d355d108b..f8e8e3f3905564be5295dd6f3bb21613ac22b16f 100644 (file)
@@ -1,11 +1,38 @@
 Git 2.11 Release Notes
 ======================
 
+Backward compatibility notes.
+
+ * An empty string used as a pathspec element has always meant
+   'everything matches', but it is too easy to write a script that
+   finds a path to remove in $path and run 'git rm "$paht"' by
+   mistake (when the user meant to give "$path"), which ends up
+   removing everything.  This release starts warning about the
+   use of an empty string that is used for 'everything matches' and
+   asks users to use a more explicit '.' for that instead.
+
+   The hope is that existing users will not mind this change, and
+   eventually the warning can be turned into a hard error, upgrading
+   the deprecation into removal of this (mis)feature.
+
+ * The historical argument order "git merge <msg> HEAD <commit>..."
+   has been deprecated for quite some time, and will be removed in the
+   next release (not this one).
+
+ * The default abbreviation length, which has historically been 7, now
+   scales as the repository grows, using the approximate number of
+   objects in the reopsitory and a bit of math around the birthday
+   paradox.  The logic suggests to use 12 hexdigits for the Linux
+   kernel, and 9 to 10 for Git itself.
+
+
 Updates since v2.10
 -------------------
 
 UI, Workflows & Features
 
+ * Comes with new version of git-gui, now at its 0.21.0 tag.
+
  * "git format-patch --cover-letter HEAD^" to format a single patch
    with a separate cover letter now numbers the output as [PATCH 0/1]
    and [PATCH 1/1] by default.
@@ -89,6 +116,47 @@ UI, Workflows & Features
  * "git mergetool" learned to honor "-O<orderfile>" to control the
    order of paths to present to the end user.
 
+ * "git diff/log --ws-error-highlight=<kind>" lacked the corresponding
+   configuration variable to set it by default.
+
+ * "git ls-files" learned "--recurse-submodules" option that can be
+   used to get a listing of tracked files across submodules (i.e. this
+   only works with "--cached" option, not for listing untracked or
+   ignored files).  This would be a useful tool to sit on the upstream
+   side of a pipe that is read with xargs to work on all working tree
+   files from the top-level superproject.
+
+ * A new credential helper that talks via "libsecret" with
+   implementations of XDG Secret Service API has been added to
+   contrib/credential/.
+
+ * The GPG verification status shown in "%G?" pretty format specifier
+   was not rich enough to differentiate a signature made by an expired
+   key, a signature made by a revoked key, etc.  New output letters
+   have been assigned to express them.
+
+ * In addition to purely abbreviated commit object names, "gitweb"
+   learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787)
+   into clickable links in its output.
+
+ * When new paths were added by "git add -N" to the index, it was
+   enough to circumvent the check by "git commit" to refrain from
+   making an empty commit without "--allow-empty".  The same logic
+   prevented "git status" to show such a path as "new file" in the
+   "Changes not staged for commit" section.
+
+ * The smudge/clean filter API expect an external process is spawned
+   to filter the contents for each path that has a filter defined.  A
+   new type of "process" filter API has been added to allow the first
+   request to run the filter for a path to spawn a single process, and
+   all filtering need is served by this single process for multiple
+   paths, reducing the process creation overhead.
+
+ * The user always has to say "stash@{$N}" when naming a single
+   element in the default location of the stash, i.e. reflogs in
+   refs/stash.  The "git stash" command learned to accept "git stash
+   apply 4" as a short-hand for "git stash apply stash@{4}".
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -160,6 +228,34 @@ Performance, Internal Implementation, Development Support etc.
    decide if we accept the check, and once we decide, either migrate
    them to the repository or purge them immediately.
 
+ * The require_clean_work_tree() helper was recreated in C when "git
+   pull" was rewritten from shell; the helper is now made available to
+   other callers in preparation for upcoming "rebase -i" work.
+
+ * "git upload-pack" had its code cleaned-up and performance improved
+   by reducing use of timestamp-ordered commit-list, which was
+   replaced with a priority queue.
+
+ * "git diff --no-index" codepath has been updated not to try to peek
+   into .git/ directory that happens to be under the current
+   directory, when we know we are operating outside any repository.
+
+ * Update of the sequencer codebase to make it reusable to reimplement
+   "rebase -i" continues.
+
+ * Git generally does not explicitly close file descriptors that were
+   open in the parent process when spawning a child process, but most
+   of the time the child does not want to access them. As Windows does
+   not allow removing or renaming a file that has a file descriptor
+   open, a slow-to-exit child can even break the parent process by
+   holding onto them.  Use O_CLOEXEC flag to open files in various
+   codepaths.
+
+ * Update "interpret-trailers" machinery and teaches it that people in
+   real world write all sorts of crufts in the "trailer" that was
+   originally designed to have the neat-o "Mail-Header: like thing"
+   and nothing else.
+
 
 Also contains various documentation updates and code clean-ups.
 
@@ -271,7 +367,6 @@ notes for details).
  * The pretty-format specifier "%C(auto)" used by the "log" family of
    commands to enable coloring of the output is taught to also issue a
    color-reset sequence to the output.
-   (merge 82b83da8d3 rs/c-auto-resets-attributes later to maint).
 
  * A shell script example in check-ref-format documentation has been
    fixed.
@@ -288,7 +383,6 @@ notes for details).
    beyond the end of the mapped region.  This was fixed by introducing
    a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND
    extension.
-   (merge 842a516cb0 js/regexec-buf later to maint).
 
  * The procedure to build Git on Mac OS X for Travis CI hardcoded the
    internal directory structure we assumed HomeBrew uses, which was a
@@ -313,7 +407,6 @@ notes for details).
    mechanism to avoid digging too deep into irrelevant side branches.
    This however did not work well over the "smart-http" transport due
    to a design bug, which has been fixed.
-   (merge 06b3d386e0 jt/fetch-pack-in-vain-count-with-stateless later to maint).
 
  * In the codepath that comes up with the hostname to be used in an
    e-mail when the user didn't tell us, we looked at ai_canonname
@@ -363,11 +456,9 @@ notes for details).
    version of cURL library is available, we forgot to explicitly add
    imap(s):// before the destination.  To some folks, that didn't work
    and the library tried to make HTTP(s) requests instead.
-   (merge d2d07ab861 ak/curl-imap-send-explicit-scheme later to maint).
 
  * The ./configure script generated from configure.ac was taught how
    to detect support of SSL by libcurl better.
-   (merge 924b7eb1c9 dp/autoconf-curl-ssl later to maint).
 
  * The command-line completion script (in contrib/) learned to
    complete "git cmd ^mas<HT>" to complete the negative end of
@@ -394,29 +485,93 @@ notes for details).
    Kerberos.  We took an unspecified (NULL) username and sent ":"
    (i.e. no username, no password) to CURLOPT_USERPWD, but did not do
    the same when the username is explicitly set to an empty string.
-   (merge 5275c3081c dt/http-empty-auth later to maint).
 
  * "git clone" of a local repository can be done at the filesystem
    level, but the codepath did not check errors while copying and
    adjusting the file that lists alternate object stores.
-   (merge 22d3b8de1b jk/clone-copy-alternates-fix later to maint).
 
  * Documentation for "git commit" was updated to clarify that "commit
    -p <paths>" adds to the current contents of the index to come up
    with what to commit.
-   (merge 7431596ab1 nd/commit-p-doc later to maint).
 
  * A stray symbolic link in $GIT_DIR/refs/ directory could make name
    resolution loop forever, which has been corrected.
-   (merge e8c42cb9ce jk/ref-symlink-loop later to maint).
 
  * The "submodule.<name>.path" stored in .gitmodules is never copied
    to .git/config and such a key in .git/config has no meaning, but
    the documentation described it and submodule.<name>.url next to
    each other as if both belong to .git/config.  This has been fixed.
-   (merge 72710165c9 sb/submodule-config-doc-drop-path later to maint).
+
+ * In a worktree connected to a repository elsewhere, created via "git
+   worktree", "git checkout" attempts to protect users from confusion
+   by refusing to check out a branch that is already checked out in
+   another worktree.  However, this also prevented checking out a
+   branch, which is designated as the primary branch of a bare
+   reopsitory, in a worktree that is connected to the bare
+   repository.  The check has been corrected to allow it.
+
+ * "git rebase" immediately after "git clone" failed to find the fork
+   point from the upstream.
+
+ * When fetching from a remote that has many tags that are irrelevant
+   to branches we are following, we used to waste way too many cycles
+   when checking if the object pointed at by a tag (that we are not
+   going to fetch!) exists in our repository too carefully.
+
+ * Protect our code from over-eager compilers.
+
+ * Recent git allows submodule.<name>.branch to use a special token
+   "." instead of the branch name; the documentation has been updated
+   to describe it.
+
+ * A hot-fix for a test added by a recent topic that went to both
+   'master' and 'maint' already.
+
+ * "git send-email" attempts to pick up valid e-mails from the
+   trailers, but people in real world write non-addresses there, like
+   "Cc: Stable <add@re.ss> # 4.8+", which broke the output depending
+   on the availability and vintage of Mail::Address perl module.
+   (merge dcfafc5214 mm/send-email-cc-cruft-after-address later to maint).
+
+ * The Travis CI configuration we ship ran the tests with --verbose
+   option but this risks non-TAP output that happens to be "ok" to be
+   misinterpreted as TAP signalling a test that passed.  This resulted
+   in unnecessary failure.  This has been corrected by introducing a
+   new mode to run our tests in the test harness to send the verbose
+   output separately to the log file.
+
+ * Some AsciiDoc formatter mishandles a displayed illustration with
+   tabs in it.  Adjust a few of them in merge-base documentation to
+   work around them.
+
+ * A minor regression fix for "git submodule" that was introduced
+   when more helper functions were reimplemented in C.
+   (merge 77b63ac31e sb/submodule-ignore-trailing-slash later to maint).
+
+ * The code that we have used for the past 10+ years to cycle
+   4-element ring buffers turns out to be not quite portable in
+   theoretical world.
+   (merge bb84735c80 rs/ring-buffer-wraparound later to maint).
+
+ * "git daemon" used fixed-length buffers to turn URL to the
+   repository the client asked for into the server side directory
+   path, using snprintf() to avoid overflowing these buffers, but
+   allowed possibly truncated paths to the directory.  This has been
+   tightened to reject such a request that causes overlong path to be
+   required to serve.
+   (merge 6bdb0083be jk/daemon-path-ok-check-truncation later to maint).
+
+ * Recent update to git-sh-setup (a library of shell functions that
+   are used by our in-tree scripted Porcelain commands) included
+   another shell library git-sh-i18n without specifying where it is,
+   relying on the $PATH.  This has been fixed to be more explicit by
+   prefixing $(git --exec-path) output in front.
+   (merge 1073094f30 ak/sh-setup-dot-source-i18n-fix later to maint).
 
  * Other minor doc, test and build updates and code cleanups.
-   (merge a94bb68397 rs/cocci later to maint).
-   (merge 641c900b2c js/reset-usage later to maint).
-   (merge 30cfe72d37 rs/pretty-format-color-doc-fix later to maint).
+   (merge 5c238e29a8 jk/common-main later to maint).
+   (merge 5a5749e45b ak/pre-receive-hook-template-modefix later to maint).
+   (merge 6d834ac8f1 jk/rebase-config-insn-fmt-docfix later to maint).
+   (merge de9f7fa3b0 rs/commit-pptr-simplify later to maint).
+   (merge 4259d693fc sc/fmt-merge-msg-doc-markup-fix later to maint).
+   (merge 28fab7b23d nd/test-helpers later to maint).