[ANNOUNCE] Git v2.11.1

From: Junio C Hamano
Date: Thu Feb 02 2017 - 18:05:53 EST


The latest maintenance release Git v2.11.1 is now available at
the usual places.

The tarballs are found at:

https://www.kernel.org/pub/software/scm/git/

The following public repositories all have a copy of the 'v2.11.1'
tag and the 'maint' branch that the tag points at:

url = https://kernel.googlesource.com/pub/scm/git/git
url = git://repo.or.cz/alt-git.git
url = git://git.sourceforge.jp/gitroot/git-core/git.git
url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
url = https://github.com/gitster/git

----------------------------------------------------------------

Git v2.11.1 Release Notes
=========================

Fixes since v2.11
-----------------

* The default Travis-CI configuration specifies newer P4 and GitLFS.

* The character width table has been updated to match Unicode 9.0

* Update the isatty() emulation for Windows by updating the previous
hack that depended on internals of (older) MSVC runtime.

* "git rev-parse --symbolic" failed with a more recent notation like
"HEAD^-1" and "HEAD^!".

* 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..

* 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.

* "git push --dry-run --recurse-submodule=on-demand" wasn't
"--dry-run" in the submodules.

* The output from "git worktree list" was made in readdir() order,
and was unstable.

* mergetool.<tool>.trustExitCode configuration variable did not apply
to built-in tools, but now it does.

* "git p4" LFS support was broken when LFS stores an empty blob.

* Fix a corner case in merge-recursive regression that crept in
during 2.10 development cycle.

* 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.

* 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.

* "git diff --no-index" did not take "--no-abbrev" option.

* "git difftool --dir-diff" had a minor regression when started from
a subdirectory, which has been fixed.

* "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.

* A pathname that begins with "//" or "\\" on Windows is special but
path normalization logic was unaware of it.

* "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.

* The way to specify hotkeys to "xxdiff" that is used by "git
mergetool" has been modernized to match recent versions of xxdiff.

* 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.

* Code cleanup in shallow boundary computation.

* A recent update to receive-pack to make it easier to drop garbage
objects made it clear that GIT_ALTERNATE_OBJECT_DIRECTORIES cannot
have a pathname with a colon in it (no surprise!), and this in turn
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.

* 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.

* "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.

* Fix for NDEBUG builds.

* 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.

* "git p4" misbehaved when swapping a directory and a symbolic link.

* 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.

* "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.

* A potential but unlikely buffer overflow in Windows port has been
fixed.

* 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.

* 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.

* Update the procedure to generate "tags" for developer support.

* Update the definition of the MacOSX test environment used by
TravisCI.

* A few git-svn updates.

* 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.

* "git fast-import" sometimes mishandled while rebalancing notes
tree, which has been fixed.

* Recent update to the default abbreviation length that auto-scales
lacked documentation update, which has been corrected.

* Leakage of lockfiles in the config subsystem has been fixed.

* 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".

* "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.

* "git blame --porcelain" misidentified the "previous" <commit, path>
pair (aka "source") when contents came from two or more files.

* "git rebase -i" with a recent update started showing an incorrect
count when squashing more than 10 commits.

* "git <cmd> @{push}" on a detached HEAD used to segfault; it has
been corrected to error out with a message.

* Tighten a test to avoid mistaking an extended ERE regexp engine as
a PRE regexp engine.

* 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.

Also contains various documentation updates and code clean-ups.

----------------------------------------------------------------

Changes since v2.11.0 are as follows:

Alan Davies (1):
mingw: fix colourization on Cygwin pseudo terminals

Andreas Krey (2):
commit: make --only --allow-empty work without paths
commit: remove 'Clever' message for --only --amend

Beat Bolli (6):
update_unicode.sh: move it into contrib/update-unicode
update_unicode.sh: remove an unnecessary subshell level
update_unicode.sh: pin the uniset repo to a known good commit
update_unicode.sh: automatically download newer definition files
update_unicode.sh: remove the plane filter
unicode_width.h: update the width tables to Unicode 9.0

Brandon Williams (2):
push: --dry-run updates submodules when --recurse-submodules=on-demand
push: fix --dry-run to not push submodules

Christian Couder (1):
Documentation/bisect: improve on (bad|new) and (good|bad)

David Aguilar (8):
mergetool: honor mergetool.$tool.trustExitCode for built-in tools
mergetools/vimdiff: trust Vim's exit code
difftool: fix dir-diff index creation when in a subdirectory
difftool: fix dir-diff index creation when in a subdirectory
difftool: sanitize $workdir as early as possible
difftool: chdir as early as possible
difftool: rename variables for consistency
mergetools: fix xxdiff hotkeys

David Turner (5):
submodules: allow empty working-tree dirs in merge/cherry-pick
remote-curl: don't hang when a server dies before any output
upload-pack: optionally allow fetching any sha1
auto gc: don't write bitmaps for incremental repacks
repack: die on incremental + write-bitmap-index

Dennis Kaarsemaker (1):
push: test pushing ambiguously named branches

Eric Wong (2):
git-svn: allow "0" in SVN path components
git-svn: document useLogAuthor and addAuthorFrom config keys

George Vanburgh (1):
git-p4: fix multi-path changelist empty commits

Heiko Voigt (4):
serialize collection of changed submodules
serialize collection of refs that contain submodule changes
batch check whether submodule needs pushing into one call
submodule_needs_pushing(): explain the behaviour when we cannot answer

Jack Bates (1):
diff: handle --no-abbrev in no-index case

Jeff Hostetler (1):
mingw: replace isatty() hack

Jeff King (32):
rev-parse: fix parent shorthands with --symbolic
t7610: clean up foo.XXXXXX tmpdir
http: simplify update_url_from_redirect
http: always update the base URL for redirects
remote-curl: rename shadowed options variable
http: make redirects more obvious
http: treat http-alternates like redirects
http-walker: complain about non-404 loose object errors
stash: prefer plumbing over git-diff
alternates: accept double-quoted paths
tmp-objdir: quote paths we add to alternates
Makefile: reformat FIND_SOURCE_FILES
Makefile: exclude test cruft from FIND_SOURCE_FILES
Makefile: match shell scripts in FIND_SOURCE_FILES
Makefile: exclude contrib from FIND_SOURCE_FILES
parse-options: print "fatal:" before usage_msg_opt()
README: replace gmane link with public-inbox
t5000: extract nongit function to test-lib-functions.sh
index-pack: complain when --stdin is used outside of a repo
t: use nongit() function where applicable
index-pack: skip collision check when not in repository
archive-zip: load userdiff config
rebase--interactive: count squash commits above 10 correctly
blame: fix alignment with --abbrev=40
blame: handle --no-abbrev
blame: output porcelain "previous" header for each file
git_exec_path: do not return the result of getenv()
execv_dashed_external: use child_process struct
execv_dashed_external: stop exiting with negative code
execv_dashed_external: wait for child on signal death
t7810: avoid assumption about invalid regex syntax
CodingGuidelines: clarify multi-line brace style

Johannes Schindelin (6):
cherry-pick: demonstrate a segmentation fault
merge-recursive: handle NULL in add_cacheinfo() correctly
mingw: intercept isatty() to handle /dev/null as Git expects it
mingw: adjust is_console() to work with stdin
git_exec_path: avoid Coverity warning about unfree()d result
mingw: follow-up to "replace isatty() hack"

Johannes Sixt (3):
t5547-push-quarantine: run the path separator test on Windows, too
normalize_path_copy(): fix pushing to //server/share/dir on Windows
t5615-alternate-env: double-quotes in file names do not work on Windows

Jonathan Tan (1):
fetch: do not redundantly calculate tag refmap

Junio C Hamano (11):
utf8: refactor code to decide fallback encoding
utf8: accept "latin-1" as ISO-8859-1
push: do not use potentially ambiguous default refspec
compression: unify pack.compression configuration parsing
pull: fast-forward "pull --rebase=true"
preparing for 2.10.3
Revert "sequencer: remove useless get_dir() function"
config.abbrev: document the new default that auto-scales
Almost ready for 2.11.1
Ready for 2.11.1
Git 2.11.1

Kristoffer Haugsbakk (4):
doc: add articles (grammar)
doc: add verb in front of command to run
doc: make the intent of sentence clearer
doc: omit needless "for"

Kyle J. McKay (1):
mailinfo.c: move side-effects outside of assert

Kyle Meyer (1):
branch_get_push: do not segfault when HEAD is detached

Lars Schneider (6):
travis-ci: update P4 to 16.2 and GitLFS to 1.5.2 in Linux build
git-p4: fix empty file processing for large file system backend GitLFS
t0021: minor filter process test cleanup
docs: warn about possible '=' in clean/smudge filter process values
t0021: fix flaky test
travis-ci: fix Perforce install on macOS

Luis Ressel (1):
date-formats.txt: Typo fix

Luke Diamand (1):
git-p4: avoid crash adding symlinked directory

Matt McCutchen (2):
doc: mention transfer data leaks in more places
git-gc.txt: expand discussion of races with other processes

Max Kirillov (1):
mingw: consider that UNICODE_STRING::Length counts bytes

Mike Hommey (1):
fast-import: properly fanout notes when tree is imported

Nguyán ThÃi Ngác Duy (13):
worktree.c: zero new 'struct worktree' on allocation
worktree: reorder an if statement
get_worktrees() must return main worktree as first item even on error
worktree.c: get_worktrees() takes a new flag argument
worktree list: keep the list sorted
merge-recursive.c: use string_list_sort instead of qsort
shallow.c: rename fields in paint_info to better express their purposes
shallow.c: stop abusing COMMIT_SLAB_SIZE for paint_info's memory pools
shallow.c: make paint_alloc slightly more robust
shallow.c: remove useless code
config.c: handle error case for fstat() calls
config.c: rename label unlock_and_out
config.c: handle lock file in error case in git_config_rename_...

Rasmus Villemoes (2):
shallow.c: avoid theoretical pointer wrap-around
shallow.c: bit manipulation tweaks

Stefan Beller (7):
unpack-trees: fix grammar for untracked files in directories
t3600: remove useless redirect
t3600: slightly modernize style
cache.h: document index_name_pos
cache.h: document remove_index_entry_at
cache.h: document add_[file_]to_index
documentation: retire unfinished documentation

Stephan Beyer (5):
am: fix filename in safe_to_abort() error message
am: change safe_to_abort()'s not rewinding error into a warning
t3510: test that cherry-pick --abort does not unsafely change HEAD
sequencer: make sequencer abort safer
sequencer: remove useless get_dir() function

Torsten BÃgershausen (1):
convert: git cherry-pick -Xrenormalize did not work

Wolfram Sang (1):
request-pull: drop old USAGE stuff