20579345 git 2.6.1
authorDanek Duvall <danek.duvall@oracle.com>
Mon, 12 Oct 2015 15:58:48 -0700
changeset 4944 2efba29a3b65
parent 4943 1d2d4cba41b1
child 4945 d9d54aa673b6
20579345 git 2.6.1 21952988 problem in UTILITY/GIT
components/git/Makefile
components/git/git.license
components/git/git.p5m
components/git/patches/barf.patch
components/git/patches/imap-send.patch
components/git/patches/perl_Makefile.patch
components/git/patches/python_Makefile.patch
components/git/patches/t_Makefile.patch
components/git/patches/test.patch
components/git/test/results-64.master
--- a/components/git/Makefile	Fri Oct 02 12:19:44 2015 +0200
+++ b/components/git/Makefile	Mon Oct 12 15:58:48 2015 -0700
@@ -18,29 +18,32 @@
 #
 # CDDL HEADER END
 #
+
+#
 # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 #
+
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		git
-COMPONENT_VERSION=	1.7.9.2
+COMPONENT_VERSION=	2.6.1
 COMPONENT_PROJECT_URL=	http://git-scm.com/
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
-COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.xz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:bd7725fb80f305bf27666e3d26a9b7b79596e2248f2ae2d27e06bc15a501ac75
-COMPONENT_ARCHIVE_URL=	http://git-core.googlecode.com/files/$(COMPONENT_ARCHIVE)
+    sha256:fc7c727745d5eb0d796a16dc7c4b999c184830110e0aeb592c788597cc8e9ccd
+COMPONENT_ARCHIVE_URL=	https://www.kernel.org/pub/software/scm/git/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	utility/git
 
-TPNO=			8436
+TPNO=			24887
 
 #
 # man pages are a separate archive
 #
-COMPONENT_ARCHIVE_1 =	$(COMPONENT_NAME)-manpages-$(COMPONENT_VERSION).tar.gz
+COMPONENT_ARCHIVE_1 =	$(COMPONENT_NAME)-manpages-$(COMPONENT_VERSION).tar.xz
 COMPONENT_ARCHIVE_HASH_1 = \
-    sha256:c653a3678bb5668c280a0d5ba584fdfb0e4272acbbd00901dc2363ea3f58eede
-COMPONENT_ARCHIVE_URL_1 = http://git-core.googlecode.com/files/$(COMPONENT_ARCHIVE_1)
+    sha256:e4cf64edcecd284d9ef4e6ca7fa0e8556d2414b5d9881a9abfe477f95b416391
+COMPONENT_ARCHIVE_URL_1 = https://www.kernel.org/pub/software/scm/git/$(COMPONENT_ARCHIVE_1)
 
 include $(WS_MAKE_RULES)/prep.mk
 include $(WS_MAKE_RULES)/configure.mk
@@ -48,25 +51,32 @@
 
 PYTHON_VERSION =	2.7
 
+PKG_HARDLINKS +=	usr/lib/git-core/git-cherry-pick
+PKG_HARDLINKS +=	usr/lib/git-core/git-remote-ftps
+
 PKG_MACROS +=		PYVER=$(PYTHON_VERSION)
 
 CONFIGURE_BINDIR.64 =	$(CONFIGURE_PREFIX)/bin
 CONFIGURE_LIBDIR.64 =	$(CONFIGURE_PREFIX)/lib
 
 CONFIGURE_PREFIX    =	/usr
-CONFIGURE_OPTIONS  +=	--without-openssl
+CONFIGURE_OPTIONS  +=	--with-libpcre
 CONFIGURE_OPTIONS  +=	--libexecdir=/usr/lib
 CONFIGURE_OPTIONS  +=	--with-perl=$(PERL)
 CONFIGURE_OPTIONS  +=	--with-python=$(PYTHON.$(PYTHON_VERSION))
 CONFIGURE_OPTIONS  +=	CFLAGS="$(CFLAGS)"
+CONFIGURE_OPTIONS  +=	CPPFLAGS="-I/usr/include/pcre"
 
 # Build fails if environment variable PROFILE is set.
 COMPONENT_BUILD_ENV+=	PROFILE=
 COMPONENT_INSTALL_ENV+=	PROFILE=
 COMPONENT_TEST_ENV+=	PROFILE=
 
-COMPONENT_BUILD_ENV+=	NO_PERL_MAKEMAKER=1
-COMPONENT_INSTALL_ENV+=	PERL_LIB=$(shell $(PERL) -MConfig -e 'print "$$Config{installvendorarch}"')
+# We set prefix_SQ empty to make sure that perl's MakeMaker module doesn't grab
+# the value from $prefix (set by configure) and force VENDORPREFIX to $prefix,
+# thereby putting the perl modules in /usr/lib/Git.
+COMPONENT_BUILD_ARGS+=		prefix_SQ=
+COMPONENT_INSTALL_ARGS+=	prefix_SQ=
 COMPONENT_INSTALL_ARGS+=	INSTALL="$(INSTALL)"
 
 # get rid of terminal escape codes in test output
@@ -121,6 +131,8 @@
 	$(TOUCH) [email protected]
 
 REQUIRED_PACKAGES += library/expat
+REQUIRED_PACKAGES += library/pcre
+REQUIRED_PACKAGES += library/security/openssl
 REQUIRED_PACKAGES += library/zlib
 REQUIRED_PACKAGES += runtime/perl-512
 REQUIRED_PACKAGES += runtime/python-27
--- a/components/git/git.license	Fri Oct 02 12:19:44 2015 +0200
+++ b/components/git/git.license	Mon Oct 12 15:58:48 2015 -0700
@@ -1,8 +1,8 @@
- GNU GENERAL PUBLIC LICENSE
+		    GNU GENERAL PUBLIC LICENSE
 		       Version 2, June 1991
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -15,7 +15,7 @@
 General Public License applies to most of the Free Software
 Foundation's software and to any other program whose authors commit to
 using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
+the GNU Lesser General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
@@ -56,7 +56,6 @@
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-
 		    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
@@ -112,7 +111,6 @@
     does not normally print such an announcement, your work based on
     the Program is not required to print an announcement.)
 
-
 These requirements apply to the modified work as a whole.  If
 identifiable sections of that work are not derived from the Program,
 and can be reasonably considered independent and separate works in
@@ -171,7 +169,6 @@
 distribution of the source code, even though third parties are not
 compelled to copy the source along with the object code.
 
-
   4. You may not copy, modify, sublicense, or distribute the Program
 except as expressly provided under this License.  Any attempt
 otherwise to copy, modify, sublicense or distribute the Program is
@@ -229,7 +226,6 @@
 This section is intended to make thoroughly clear what is believed to
 be a consequence of the rest of this License.
 
-
   8. If the distribution and/or use of the Program is restricted in
 certain countries either by patents or by copyrighted interfaces, the
 original copyright holder who places the Program under this License
@@ -283,7 +279,6 @@
 
 		     END OF TERMS AND CONDITIONS
 
-
 	    How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
@@ -308,10 +303,9 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -341,196 +335,631 @@
 This General Public License does not permit incorporating your program into
 proprietary programs.  If your program is a subroutine library, you may
 consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
+library.  If this is what you want to do, use the GNU Lesser General
 Public License instead of this License.
----------------------------------------
-vcs-svn/fast_export.c:
- * Licensed under a two-clause BSD-style license. 
- * See LICENSE for details. 
----------------------------------------
-xdiff/xhistogram.c
- * Copyright (C) 2010, Google Inc. 
- * and other copyright owners as documented in JGit's IP log. 
- * 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Distribution License v1.0 which 
- * accompanies this distribution, is reproduced below, and is 
- * available at http://www.eclipse.org/org/documents/edl-v10.php 
- * 
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or 
- * without modification, are permitted provided that the following 
- * conditions are met: 
- * 
- * - Redistributions of source code must retain the above copyright 
- *   notice, this list of conditions and the following disclaimer. 
- * 
- * - Redistributions in binary form must reproduce the above 
- *   copyright notice, this list of conditions and the following 
- *   disclaimer in the documentation and/or other materials provided 
- *   with the distribution. 
- * 
- * - Neither the name of the Eclipse Foundation, Inc. nor the 
- *   names of its contributors may be used to endorse or promote 
- *   products derived from this software without specific prior 
- *   written permission. 
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+
+== xdiff/*, compat/obstack.c ===================================================
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
 
-Copyrights:
-=========== 
-	(C) 2005 by Nicolas Pitre <[email protected]>
-	# Copyright (c) 2005 Junio C Hamano
-    Gnomovision version 69, Copyright (C) year name of author
-   (C) 2005 by Nicolas Pitre <[email protected]>
- *  Copyright (C) 2003	Davide Libenzi
- *  Copyright (C) 2003  Davide Libenzi
- *  Copyright (C) 2003-2006 Davide Libenzi, Johannes E. Schindelin
- * (C) Copyright 2006 Linus Torvalds
- * Copyright (C) 1995-9 by Cryptography Research, Inc.  All
- * Copyright (c) 1996-1999 by Internet Software Consortium.
- * Copyright (C) 1996-2001  Internet Software Consortium.
- * Copyright (C) 2000-2002 Michael R. Elkins <[email protected]>
- * Copyright (C) 2002-2004 Oswald Buddenhagen <[email protected]>
- * Copyright (C) 2004 Theodore Y. Ts'o <[email protected]>
- * Copyright (c) 2005 Junio C Hamano
- * Copyright (C) 2005 Junio C Hamano
- * Copyright (c) 2005 Linus Torvalds
- * Copyright (C) 2005 Linus Torvalds
- * Copyright (C) 2005 Paul Mackerras <[email protected]>
- * Copyright (c) 2005, 2006 Linus Torvalds and Junio C Hamano
- * Copyright (c) 2005, 2006 Rene Scharfe
- * Copyright (c) 2005, Junio C Hamano
- * Copyright (C) 2006 Christian Couder
- * Copyright (c) 2006 Franck Bui-Huu
- * Copyright (C) 2006 Johannes Schindelin
- * Copyright (c) 2006 Junio C Hamano
- * Copyright (c) 2006 Kristian Høgsberg <[email protected]>
- * Copyright (C) 2006 Linus Torvalds
- * Copyright (C) 2006 Mike McCormack
- * Copyright (c) 2006 Rene Scharfe
- * Copyright (C) 2006 Ryan Anderson
- * Copyright (c) 2006 Shawn O. Pearce
- * Copyright (c) 2006, Junio C Hamano
- * Copyright (c) 2007 by Johannes Schindelin
- * Copyright (c) 2007 by Nicolas Pitre <[email protected]>
- * Copyright (C) 2007 by Nicolas Pitre, licensed under the GPL version 2.
- * Copyright (c) 2007 Carlos Rica
- * Copyright (c) 2007 Carlos Rica <[email protected]>
- * Copyright (c) 2007 James Bowes
- * Copyright (c) 2007 Johannes E. Schindelin
- * Copyright (C) 2007 Johannes E. Schindelin
- * Copyright (c) 2007 Junio C Hamano
- * Copyright (c) 2007 Kristian Høgsberg <[email protected]>
- * Copyright (c) 2007 Kristian Høgsberg <[email protected]>,
- * Copyright (C) 2007 Shawn Bohrer
- * Copyright (c) 2007 Thomas Harning Jr
- * Copyright (c) 2008 by Junio C Hamano
- * Copyright (C) 2008 Linus Torvalds
- * Copyright (C) Eric Biederman, 2005
- * Copyright (C) Johannes Schindelin, 2005
- * Copyright (C) Junio C Hamano, 2005
- * Copyright (c) Junio C Hamano, 2006
- * Copyright (C) Linus Torvalds 2006
- * Copyright (C) Linus Torvalds, 2005
- * Copyright (C) Linus Torvalds, 2005-2006
- * Copyright 2006 Jon Loeliger
- * Original Copyright (c) 2005 Junio C Hamano
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-* Copyright 2005, Lukas Sandstrom <[email protected]>
-# (C) Copyright 2000 - 2005
-# Copyright © 2005-2008 Paul Mackerras.  All rights reserved.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# Copyright (c) 1997-8 Graham Barr <[email protected]>. All rights reserved.
-# Copyright (c) 2005 Amos Waterland
-# Copyright (c) 2005 Fredrik Kuivinen
-# Copyright (c) 2005 Johannes Schindelin
-# Copyright (c) 2005 Jon Seymour
-# Copyright (c) 2005 Junio C Hamano
-# Copyright (c) 2005 Junio C Hamano.
-# Copyright (c) 2005 Linus Torvalds
-# Copyright (C) 2005 Rene Scharfe
-# Copyright (c) 2005 Robert Fitzsimons
-# Copyright (c) 2005, 2006 Junio C Hamano
-# Copyright (c) 2006 Brian C Gernhardt
-# Copyright (c) 2006 Carl D. Worth
-# Copyright (C) 2006 Carl D. Worth <[email protected]>
-# Copyright (c) 2006 Catalin Marinas
-# Copyright (c) 2006 Christian Couder
-# Copyright (c) 2006 Eric Wong
-# Copyright (c) 2006 Johannes E. Schindelin
-# Copyright (c) 2006 Josh England
-# Copyright (c) 2006 Junio C Hamano
-# Copyright (C) 2006 Martin Waitz <[email protected]>
-# Copyright (c) 2006 Shawn O. Pearce
-# Copyright (c) 2006 Shawn Pearce
-# Copyright (c) 2006 Theodore Y. Ts'o
-# Copyright (c) 2006 Yann Dirson, based on t3400 by Amos Waterland
-# Copyright (C) 2006, Eric Wong <[email protected]>
-# Copyright (c) 2006, Junio C Hamano
-# Copyright (c) 2006, Junio C Hamano.
-# Copyright (c) 2007 Andy Parkins
-# Copyright (c) 2007 Carl D. Worth
-# Copyright (c) 2007 Carlos Rica
-# Copyright (c) 2007 Christian Couder
-# Copyright (c) 2007 David D. Kilzer
-# Copyright (c) 2007 David Symonds
-# Copyright (c) 2007 Eric Wong
-# Copyright (c) 2007 Frank Lichtenheld
-# Copyright (c) 2007 Jakub Narebski
-# Copyright (c) 2007 Johannes E Schindelin
-# Copyright (c) 2007 Johannes E. Schindelin
-# Copyright (c) 2007 Johannes Schindelin
-# Copyright (c) 2007 Johannes Sixt
-# Copyright (c) 2007 Junio C Hamano
-# Copyright (c) 2007 Kristian Høgsberg <[email protected]>
-# Copyright (c) 2007 Lars Hjemli
-# Copyright (c) 2007 Michael Spang
-# Copyright (c) 2007 Nguyễn Thái Ngọc Duy
-# Copyright (c) 2007 Nicolas Pitre
-# Copyright (c) 2007 Santi Béjar, based on t4013 by Junio C Hamano
-# Copyright (c) 2007 Shawn O. Pearce
-# Copyright (c) 2007 Shawn Pearce
-# Copyright (c) 2007 Steven Grimm
-# Copyright (c) 2007, Nanako Shiraishi
-# Copyright (c) 2008 Charles Bailey
-# Copyright (c) 2008 Christian Couder
-# Copyright (c) 2008 Clemens Buchacher <[email protected]>
-# Copyright (c) 2008 Dmitry V. Levin
-# Copyright (c) 2008 Jan Krüger
-# Copyright (c) 2008 Johannes E. Schindelin
-# Copyright (c) 2008 Johannes Schindelin
-# Copyright (c) 2008 Kevin Ballard
-# Copyright (c) 2008 Matthew Ogilvie
-# Copyright (c) 2008 Ping Yin
-# Copyright (c) 2008 Santhosh Kumar Mani
-# Copyright (c) 2008 Timo Hirvonen
-# Copyright (c) Linus Torvalds, 2005
-# Copyright (c) Petr Baudis, 2006
-# Copyright (c) Robin Rosenberg
-# Copyright 2002,2005 Greg Kroah-Hartman <[email protected]>
-# Copyright 2005 Ryan Anderson <[email protected]>
-# Copyright 2005, Ryan Anderson <[email protected]>
-# This tool is copyright (c) 2005, Martin Langhoff.
-# This tool is copyright (c) 2005, Matthias Urlichs.
-#### Copyright The Open University UK - 2006.
-Copyright © 2005-2008 Paul Mackerras
-Copyright © 2006, 2007 Shawn Pearce, et. al.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-Copyright (C) 2006 Free Software Foundation, Inc.
-Copyright 2006 by Petr Baudis E<lt>[email protected]<gt>.
-This program is copyright The Open University UK – 2006.
- * Copyright (C) 2010, Google Inc. 
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+== git-p4.py ===================================================================
+Copyright (c) 2007 Simon Hausmann <[email protected]>
+Copyright (c) 2007 Trolltech ASA
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+== khash.h =====================================================================
+Copyright (c) 2008, 2009, 2011 by Attractive Chaos <[email protected]>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+== vcs-svn/* ===================================================================
+Copyright (C) 2010 David Barr <[email protected]>.
+All rights reserved.
+
+Copyright (C) 2010 Jonathan Nieder <[email protected]>.
+
+Copyright (C) 2005 Stefan Hegny, hydrografix Consulting GmbH,
+Frankfurt/Main, Germany
+and others, see http://svn2cc.sarovar.org
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice(s), this list of conditions and the following disclaimer
+   unmodified other than the allowable addition of one or more
+   copyright notices.
+2. Redistributions in binary form must reproduce the above copyright
+   notice(s), this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+== xdiff/xhistogram.c ==========================================================
+Copyright (C) 2010, Google Inc.
+and other copyright owners as documented in JGit's IP log.
+
+This program and the accompanying materials are made available
+under the terms of the Eclipse Distribution License v1.0 which
+accompanies this distribution, is reproduced below, and is
+available at http://www.eclipse.org/org/documents/edl-v10.php
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+- Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following
+  disclaimer in the documentation and/or other materials provided
+  with the distribution.
+
+- Neither the name of the Eclipse Foundation, Inc. nor the
+  names of its contributors may be used to endorse or promote
+  products derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- a/components/git/git.p5m	Fri Oct 02 12:19:44 2015 +0200
+++ b/components/git/git.p5m	Mon Oct 12 15:58:48 2015 -0700
@@ -18,11 +18,16 @@
 #
 # CDDL HEADER END
 #
+
+#
 # Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
 #
 
 <transform file path=usr/lib/git-core/.* -> default mode 0555>
 <transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
+<transform file path=usr/perl5/.*/man/(.*) -> emit link \
+    path=/usr/share/man/%<1> target=../../../perl5/$(PERL_VERSION)/man/%<1>>
+#
 set name=pkg.fmri \
     value=pkg:/developer/versioning/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="git - Fast Version Control System"
@@ -36,6 +41,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=org.opensolaris.arc-caseid value=LSARC/2008/360
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
 hardlink path=usr/bin/git target=../lib/git-core/git-cherry-pick
 hardlink path=usr/bin/git-cvsserver target=../lib/git-core/git-cvsserver
 hardlink path=usr/bin/git-receive-pack target=../lib/git-core/git-cherry-pick
@@ -46,7 +52,7 @@
 hardlink path=usr/lib/git-core/git target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-add target=git-cherry-pick
 file path=usr/lib/git-core/git-add--interactive
-file path=usr/lib/git-core/git-am
+hardlink path=usr/lib/git-core/git-am target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-annotate target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-apply target=git-cherry-pick
 file path=usr/lib/git-core/git-archimport
@@ -58,6 +64,8 @@
 hardlink path=usr/lib/git-core/git-bundle target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-cat-file target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-check-attr target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-check-ignore target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-check-mailmap target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-check-ref-format target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-checkout target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-checkout-index target=git-cherry-pick
@@ -66,10 +74,12 @@
 hardlink path=usr/lib/git-core/git-citool target=git-gui
 hardlink path=usr/lib/git-core/git-clean target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-clone target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-column target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-commit target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-commit-tree target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-config target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-count-objects target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-credential target=git-cherry-pick
 file path=usr/lib/git-core/git-credential-cache
 file path=usr/lib/git-core/git-credential-cache--daemon
 file path=usr/lib/git-core/git-credential-store
@@ -109,8 +119,8 @@
 hardlink path=usr/lib/git-core/git-init target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-init-db target=git-cherry-pick
 file path=usr/lib/git-core/git-instaweb
+hardlink path=usr/lib/git-core/git-interpret-trailers target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-log target=git-cherry-pick
-file path=usr/lib/git-core/git-lost-found
 hardlink path=usr/lib/git-core/git-ls-files target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-ls-remote target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-ls-tree target=git-cherry-pick
@@ -134,15 +144,15 @@
 hardlink path=usr/lib/git-core/git-mv target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-name-rev target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-notes target=git-cherry-pick
+file path=usr/lib/git-core/git-p4
 hardlink path=usr/lib/git-core/git-pack-objects target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-pack-redundant target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-pack-refs target=git-cherry-pick
 file path=usr/lib/git-core/git-parse-remote
 hardlink path=usr/lib/git-core/git-patch-id target=git-cherry-pick
-hardlink path=usr/lib/git-core/git-peek-remote target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-prune target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-prune-packed target=git-cherry-pick
-file path=usr/lib/git-core/git-pull
+hardlink path=usr/lib/git-core/git-pull target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-push target=git-cherry-pick
 file path=usr/lib/git-core/git-quiltimport
 hardlink path=usr/lib/git-core/git-read-tree target=git-cherry-pick
@@ -160,10 +170,9 @@
 file path=usr/lib/git-core/git-remote-ftps
 hardlink path=usr/lib/git-core/git-remote-http target=git-remote-ftps
 hardlink path=usr/lib/git-core/git-remote-https target=git-remote-ftps
-file path=usr/lib/git-core/git-remote-testgit
-file path=usr/lib/git-core/git-repack
+file path=usr/lib/git-core/git-remote-testsvn
+hardlink path=usr/lib/git-core/git-repack target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-replace target=git-cherry-pick
-hardlink path=usr/lib/git-core/git-repo-config target=git-cherry-pick
 file path=usr/lib/git-core/git-request-pull
 hardlink path=usr/lib/git-core/git-rerere target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-reset target=git-cherry-pick
@@ -190,7 +199,6 @@
 file path=usr/lib/git-core/git-svn
 hardlink path=usr/lib/git-core/git-symbolic-ref target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-tag target=git-cherry-pick
-hardlink path=usr/lib/git-core/git-tar-tree target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-unpack-file target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-unpack-objects target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-update-index target=git-cherry-pick
@@ -199,17 +207,25 @@
 hardlink path=usr/lib/git-core/git-upload-archive target=git-cherry-pick
 file path=usr/lib/git-core/git-upload-pack
 hardlink path=usr/lib/git-core/git-var target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-verify-commit target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-verify-pack target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-verify-tag target=git-cherry-pick
 file path=usr/lib/git-core/git-web--browse
 hardlink path=usr/lib/git-core/git-whatchanged target=git-cherry-pick
+hardlink path=usr/lib/git-core/git-worktree target=git-cherry-pick
 hardlink path=usr/lib/git-core/git-write-tree target=git-cherry-pick
 file path=usr/lib/git-core/mergetools/araxis
+file path=usr/lib/git-core/mergetools/bc
 file path=usr/lib/git-core/mergetools/bc3
-file path=usr/lib/git-core/mergetools/defaults
+file path=usr/lib/git-core/mergetools/codecompare
+file path=usr/lib/git-core/mergetools/deltawalker
+file path=usr/lib/git-core/mergetools/diffmerge
 file path=usr/lib/git-core/mergetools/diffuse
 file path=usr/lib/git-core/mergetools/ecmerge
 file path=usr/lib/git-core/mergetools/emerge
+file path=usr/lib/git-core/mergetools/gvimdiff
+file path=usr/lib/git-core/mergetools/gvimdiff2
+file path=usr/lib/git-core/mergetools/gvimdiff3
 file path=usr/lib/git-core/mergetools/kdiff3
 file path=usr/lib/git-core/mergetools/kompare
 file path=usr/lib/git-core/mergetools/meld
@@ -217,33 +233,40 @@
 file path=usr/lib/git-core/mergetools/p4merge
 file path=usr/lib/git-core/mergetools/tkdiff
 file path=usr/lib/git-core/mergetools/tortoisemerge
-file path=usr/lib/git-core/mergetools/vim
+file path=usr/lib/git-core/mergetools/vimdiff
+file path=usr/lib/git-core/mergetools/vimdiff2
+file path=usr/lib/git-core/mergetools/vimdiff3
+file path=usr/lib/git-core/mergetools/winmerge
 file path=usr/lib/git-core/mergetools/xxdiff
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers-0.1.0-py$(PYVER).egg-info
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/__init__.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/__init__.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/exporter.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/exporter.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/git.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/git.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/importer.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/importer.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/non_local.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/non_local.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/repo.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/git/repo.pyc
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/util.py
-file path=usr/lib/python$(PYVER)/vendor-packages/git_remote_helpers/util.pyc
-file path=usr/perl5/vendor_perl/$(PERL_VERSION)/$(PERL_ARCH)/Error.pm
-file path=usr/perl5/vendor_perl/$(PERL_VERSION)/$(PERL_ARCH)/Git.pm
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::I18N.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Editor.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Fetcher.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Memoize::YAML.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Prompt.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Ra.3
+file path=usr/perl5/$(PERL_VERSION)/man/man3/Git::SVN::Utils.3
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/$(PERL_ARCH)/auto/Git/.packlist
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/I18N.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/IndexInfo.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Editor.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Fetcher.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/GlobSpec.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Log.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Memoize/YAML.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Migration.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Prompt.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Ra.pm
+file path=usr/perl5/vendor_perl/$(PERL_VERSION)/Git/SVN/Utils.pm
 file path=usr/share/git-core/templates/description
 file path=usr/share/git-core/templates/hooks/applypatch-msg.sample
 file path=usr/share/git-core/templates/hooks/commit-msg.sample
 file path=usr/share/git-core/templates/hooks/post-update.sample
 file path=usr/share/git-core/templates/hooks/pre-applypatch.sample
 file path=usr/share/git-core/templates/hooks/pre-commit.sample
+file path=usr/share/git-core/templates/hooks/pre-push.sample
 file path=usr/share/git-core/templates/hooks/pre-rebase.sample
 file path=usr/share/git-core/templates/hooks/prepare-commit-msg.sample
 file path=usr/share/git-core/templates/hooks/update.sample
@@ -274,6 +297,7 @@
 file path=usr/share/git-gui/lib/logo.tcl
 file path=usr/share/git-gui/lib/merge.tcl
 file path=usr/share/git-gui/lib/mergetool.tcl
+file path=usr/share/git-gui/lib/msgs/bg.msg
 file path=usr/share/git-gui/lib/msgs/de.msg
 file path=usr/share/git-gui/lib/msgs/el.msg
 file path=usr/share/git-gui/lib/msgs/fr.msg
@@ -284,6 +308,7 @@
 file path=usr/share/git-gui/lib/msgs/pt_br.msg
 file path=usr/share/git-gui/lib/msgs/ru.msg
 file path=usr/share/git-gui/lib/msgs/sv.msg
+file path=usr/share/git-gui/lib/msgs/vi.msg
 file path=usr/share/git-gui/lib/msgs/zh_cn.msg
 file path=usr/share/git-gui/lib/option.tcl
 file path=usr/share/git-gui/lib/remote.tcl
@@ -301,6 +326,8 @@
 file path=usr/share/git-gui/lib/transport.tcl
 file path=usr/share/git-gui/lib/win32.tcl
 file path=usr/share/git-gui/lib/win32_shortcut.js
+file path=usr/share/gitk/lib/msgs/bg.msg
+file path=usr/share/gitk/lib/msgs/ca.msg
 file path=usr/share/gitk/lib/msgs/de.msg
 file path=usr/share/gitk/lib/msgs/es.msg
 file path=usr/share/gitk/lib/msgs/fr.msg
@@ -310,12 +337,23 @@
 file path=usr/share/gitk/lib/msgs/pt_br.msg
 file path=usr/share/gitk/lib/msgs/ru.msg
 file path=usr/share/gitk/lib/msgs/sv.msg
+file path=usr/share/gitk/lib/msgs/vi.msg
 file path=usr/share/gitweb/gitweb.cgi
 file path=usr/share/gitweb/static/git-favicon.png
 file path=usr/share/gitweb/static/git-logo.png
 file path=usr/share/gitweb/static/gitweb.css
 file path=usr/share/gitweb/static/gitweb.js
+file path=usr/share/locale/bg/LC_MESSAGES/git.mo
+file path=usr/share/locale/ca/LC_MESSAGES/git.mo
+file path=usr/share/locale/de/LC_MESSAGES/git.mo
+file path=usr/share/locale/fr/LC_MESSAGES/git.mo
 file path=usr/share/locale/is/LC_MESSAGES/git.mo
+file path=usr/share/locale/it/LC_MESSAGES/git.mo
+file path=usr/share/locale/pt_PT/LC_MESSAGES/git.mo
+file path=usr/share/locale/ru/LC_MESSAGES/git.mo
+file path=usr/share/locale/sv/LC_MESSAGES/git.mo
+file path=usr/share/locale/vi/LC_MESSAGES/git.mo
+file path=usr/share/locale/zh_CN/LC_MESSAGES/git.mo
 file path=usr/share/man/man1/git-add.1
 file path=usr/share/man/man1/git-am.1
 file path=usr/share/man/man1/git-annotate.1
@@ -328,6 +366,8 @@
 file path=usr/share/man/man1/git-bundle.1
 file path=usr/share/man/man1/git-cat-file.1
 file path=usr/share/man/man1/git-check-attr.1
+file path=usr/share/man/man1/git-check-ignore.1
+file path=usr/share/man/man1/git-check-mailmap.1
 file path=usr/share/man/man1/git-check-ref-format.1
 file path=usr/share/man/man1/git-checkout-index.1
 file path=usr/share/man/man1/git-checkout.1
@@ -336,6 +376,7 @@
 file path=usr/share/man/man1/git-citool.1
 file path=usr/share/man/man1/git-clean.1
 file path=usr/share/man/man1/git-clone.1
+file path=usr/share/man/man1/git-column.1
 file path=usr/share/man/man1/git-commit-tree.1
 file path=usr/share/man/man1/git-commit.1
 file path=usr/share/man/man1/git-config.1
@@ -343,6 +384,7 @@
 file path=usr/share/man/man1/git-credential-cache--daemon.1
 file path=usr/share/man/man1/git-credential-cache.1
 file path=usr/share/man/man1/git-credential-store.1
+file path=usr/share/man/man1/git-credential.1
 file path=usr/share/man/man1/git-cvsexportcommit.1
 file path=usr/share/man/man1/git-cvsimport.1
 file path=usr/share/man/man1/git-cvsserver.1
@@ -377,8 +419,8 @@
 file path=usr/share/man/man1/git-init-db.1
 file path=usr/share/man/man1/git-init.1
 file path=usr/share/man/man1/git-instaweb.1
+file path=usr/share/man/man1/git-interpret-trailers.1
 file path=usr/share/man/man1/git-log.1
-file path=usr/share/man/man1/git-lost-found.1
 file path=usr/share/man/man1/git-ls-files.1
 file path=usr/share/man/man1/git-ls-remote.1
 file path=usr/share/man/man1/git-ls-tree.1
@@ -403,7 +445,6 @@
 file path=usr/share/man/man1/git-pack-refs.1
 file path=usr/share/man/man1/git-parse-remote.1
 file path=usr/share/man/man1/git-patch-id.1
-file path=usr/share/man/man1/git-peek-remote.1
 file path=usr/share/man/man1/git-prune-packed.1
 file path=usr/share/man/man1/git-prune.1
 file path=usr/share/man/man1/git-pull.1
@@ -416,12 +457,10 @@
 file path=usr/share/man/man1/git-relink.1
 file path=usr/share/man/man1/git-remote-ext.1
 file path=usr/share/man/man1/git-remote-fd.1
-file path=usr/share/man/man1/git-remote-helpers.1
 file path=usr/share/man/man1/git-remote-testgit.1
 file path=usr/share/man/man1/git-remote.1
 file path=usr/share/man/man1/git-repack.1
 file path=usr/share/man/man1/git-replace.1
-file path=usr/share/man/man1/git-repo-config.1
 file path=usr/share/man/man1/git-request-pull.1
 file path=usr/share/man/man1/git-rerere.1
 file path=usr/share/man/man1/git-reset.1
@@ -448,7 +487,6 @@
 file path=usr/share/man/man1/git-svn.1
 file path=usr/share/man/man1/git-symbolic-ref.1
 file path=usr/share/man/man1/git-tag.1
-file path=usr/share/man/man1/git-tar-tree.1
 file path=usr/share/man/man1/git-unpack-file.1
 file path=usr/share/man/man1/git-unpack-objects.1
 file path=usr/share/man/man1/git-update-index.1
@@ -457,14 +495,18 @@
 file path=usr/share/man/man1/git-upload-archive.1
 file path=usr/share/man/man1/git-upload-pack.1
 file path=usr/share/man/man1/git-var.1
+file path=usr/share/man/man1/git-verify-commit.1
 file path=usr/share/man/man1/git-verify-pack.1
 file path=usr/share/man/man1/git-verify-tag.1
 file path=usr/share/man/man1/git-web--browse.1
 file path=usr/share/man/man1/git-whatchanged.1
+file path=usr/share/man/man1/git-worktree.1
 file path=usr/share/man/man1/git-write-tree.1
 file path=usr/share/man/man1/git.1
 file path=usr/share/man/man1/gitk.1
+file path=usr/share/man/man1/gitremote-helpers.1
 file path=usr/share/man/man1/gitweb.1
+# Autogenerated symlinks to the Git man3 pages go here.
 file path=usr/share/man/man4/gitattributes.4
 file path=usr/share/man/man4/githooks.4
 file path=usr/share/man/man4/gitignore.4
@@ -476,10 +518,12 @@
 file path=usr/share/man/man5/gitcredentials.5
 file path=usr/share/man/man5/gitcvs-migration.5
 file path=usr/share/man/man5/gitdiffcore.5
+file path=usr/share/man/man5/giteveryday.5
 file path=usr/share/man/man5/gitglossary.5
 file path=usr/share/man/man5/gitnamespaces.5
 file path=usr/share/man/man5/gitrevisions.5
 file path=usr/share/man/man5/gittutorial-2.5
 file path=usr/share/man/man5/gittutorial.5
 file path=usr/share/man/man5/gitworkflows.5
+#
 license git.license license=GPLv2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/git/patches/barf.patch	Mon Oct 12 15:58:48 2015 -0700
@@ -0,0 +1,16 @@
+Patch to allow the Studio compilers to compile.  Although the existing code
+catches cases where you're using an older gcc that doesn't support the
+feature, it omits the case where gcc is not the compiler and the feature
+is not available.  This is suitable for upstream.
+
+--- git-2.5.3/git-compat-util.h	Thu Sep 17 13:26:50 2015
++++ git-2.5.3/git-compat-util.h	Thu Sep 24 14:32:55 2015
[email protected]@ -32,6 +32,8 @@
+ # else
+ #  define FLEX_ARRAY 0 /* older GNU extension */
+ # endif
++#else
++# define BARF_UNLESS_AN_ARRAY(arr) 0
+ #endif
+ 
+ /*
--- a/components/git/patches/imap-send.patch	Fri Oct 02 12:19:44 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-This patch fixes CVE-2013-0308.
-It was created from a diff between the version 1.8.1.4 of this file
-from the community and the current one.  The only changes to this file
-are for addressing this CVE.
-Here is the community diff:
-https://github.com/gitster/git/commit/0ee7198f457c8ea031b09b528cfd88f0f0e630d8
-
---- git-1.7.9.2/imap-send.c_orig	2012-02-22 18:04:18.000000000 -0800
-+++ git-1.7.9.2/imap-send.c	2015-03-25 12:23:29.465800340 -0700
[email protected]@ -31,6 +31,7 @@
- #else
- #include <openssl/evp.h>
- #include <openssl/hmac.h>
-+#include <openssl/x509v3.h>
- #endif
- 
- struct store_conf {
[email protected]@ -266,12 +267,64 @@
- 	}
- }
- 
-+#ifdef NO_OPENSSL
- static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int verify)
- {
--#ifdef NO_OPENSSL
- 	fprintf(stderr, "SSL requested but SSL support not compiled in\n");
- 	return -1;
-+}
-+
- #else
-+
-+static int host_matches(const char *host, const char *pattern)
-+{
-+	if (pattern[0] == '*' && pattern[1] == '.') {
-+		pattern += 2;
-+		if (!(host = strchr(host, '.')))
-+			return 0;
-+		host++;
-+	}
-+
-+	return *host && *pattern && !strcasecmp(host, pattern);
-+}
-+
-+static int verify_hostname(X509 *cert, const char *hostname)
-+{
-+	int len;
-+	X509_NAME *subj;
-+	char cname[1000];
-+	int i, found;
-+	STACK_OF(GENERAL_NAME) *subj_alt_names;
-+
-+	/* try the DNS subjectAltNames */
-+	found = 0;
-+	if ((subj_alt_names = X509_get_ext_d2i(cert, NID_subject_alt_name, NULL, NULL))) {
-+		int num_subj_alt_names = sk_GENERAL_NAME_num(subj_alt_names);
-+		for (i = 0; !found && i < num_subj_alt_names; i++) {
-+			GENERAL_NAME *subj_alt_name = sk_GENERAL_NAME_value(subj_alt_names, i);
-+			if (subj_alt_name->type == GEN_DNS &&
-+			    strlen((const char *)subj_alt_name->d.ia5->data) == (size_t)subj_alt_name->d.ia5->length &&
-+			    host_matches(hostname, (const char *)(subj_alt_name->d.ia5->data)))
-+				found = 1;
-+		}
-+		sk_GENERAL_NAME_pop_free(subj_alt_names, GENERAL_NAME_free);
-+	}
-+	if (found)
-+		return 0;
-+
-+	/* try the common name */
-+	if (!(subj = X509_get_subject_name(cert)))
-+		return error("cannot get certificate subject");
-+	if ((len = X509_NAME_get_text_by_NID(subj, NID_commonName, cname, sizeof(cname))) < 0)
-+		return error("cannot get certificate common name");
-+	if (strlen(cname) == (size_t)len && host_matches(hostname, cname))
-+		return 0;
-+	return error("certificate owner '%s' does not match hostname '%s'",
-+		     cname, hostname);
-+}
-+
-+static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int verify)
-+{
- #if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
- 	const SSL_METHOD *meth;
- #else
[email protected]@ -279,6 +332,7 @@
- #endif
- 	SSL_CTX *ctx;
- 	int ret;
-+	X509 *cert;
- 
- 	SSL_library_init();
- 	SSL_load_error_strings();
[email protected]@ -322,9 +376,18 @@
- 		return -1;
- 	}
- 
-+	if (verify) {
-+		/* make sure the hostname matches that of the certificate */
-+		cert = SSL_get_peer_certificate(sock->ssl);
-+		if (!cert)
-+			return error("unable to get peer certificate.");
-+		if (verify_hostname(cert, server.host) < 0)
-+			return -1;
-+	}
-+
- 	return 0;
--#endif
- }
-+#endif
- 
- static int socket_read(struct imap_socket *sock, char *buf, int len)
- {
[email protected]@ -1022,7 +1085,7 @@
- 
- 	ret = socket_write(&ctx->imap->buf.sock, response, strlen(response));
- 	if (ret != strlen(response))
--		return error("IMAP error: sending response failed\n");
-+		return error("IMAP error: sending response failed");
- 
- 	free(response);
- 
--- a/components/git/patches/perl_Makefile.patch	Fri Oct 02 12:19:44 2015 +0200
+++ b/components/git/patches/perl_Makefile.patch	Mon Oct 12 15:58:48 2015 -0700
@@ -1,28 +1,14 @@
---- git-1.7.9.2/perl/Makefile.~1~	Wed Feb 22 18:04:18 2012
-+++ git-1.7.9.2/perl/Makefile	Fri Mar  2 14:51:25 2012
[email protected]@ -21,20 +21,18 @@
- 	$(RM) $(makfile).old
- 
- ifdef NO_PERL_MAKEMAKER
--instdir_SQ = $(subst ','\'',$(prefix)/lib)
-+instdir_SQ = $(subst ','\'',$$(PERL_LIB))
- $(makfile): ../GIT-CFLAGS Makefile
- 	echo all: private-Error.pm Git.pm > [email protected]
- 	echo '	mkdir -p blib/lib' >> [email protected]
- 	echo '	$(RM) blib/lib/Git.pm; cp Git.pm blib/lib/' >> [email protected]
- 	echo '	$(RM) blib/lib/Error.pm' >> [email protected]
--	'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
- 	echo '	cp private-Error.pm blib/lib/Error.pm' >> [email protected]
- 	echo install: >> [email protected]
--	echo '	mkdir -p "$$(DESTDIR)$(instdir_SQ)"' >> [email protected]
--	echo '	$(RM) "$$(DESTDIR)$(instdir_SQ)/Git.pm"; cp Git.pm "$$(DESTDIR)$(instdir_SQ)"' >> [email protected]
--	echo '	$(RM) "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> [email protected]
--	'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
--	echo '	cp private-Error.pm "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> [email protected]
-+	echo '	mkdir -p "$$(DESTDIR)/$(instdir_SQ)"' >> [email protected]
-+	echo '	$(RM) "$$(DESTDIR)/$(instdir_SQ)/Git.pm"; cp Git.pm "$$(DESTDIR)/$(instdir_SQ)"' >> [email protected]
-+	echo '	$(RM) "$$(DESTDIR)/$(instdir_SQ)/Error.pm"' >> [email protected]
-+	echo '	cp private-Error.pm "$$(DESTDIR)/$(instdir_SQ)/Error.pm"' >> [email protected]
- 	echo instlibdir: >> [email protected]
+Make sure that the vendor pattern for installation is passed through to
+MakeMaker.  This is not suitable for upstream.
+
+--- git-2.4.5/perl/Makefile	Thu Jun 25 12:15:40 2015
++++ git-2.4.5/perl/Makefile	Sat Jul  4 11:32:21 2015
[email protected]@ -80,7 +80,7 @@
  	echo '	echo $(instdir_SQ)' >> [email protected]
  else
+ $(makfile): Makefile.PL ../GIT-CFLAGS
+-	$(PERL_PATH) $< PREFIX='$(prefix_SQ)' INSTALL_BASE='' --localedir='$(localedir_SQ)'
++	$(PERL_PATH) $< PREFIX='$(prefix_SQ)' INSTALL_BASE='' --localedir='$(localedir_SQ)' INSTALLDIRS=vendor
+ endif
+ 
+ # this is just added comfort for calling make directly in perl dir
--- a/components/git/patches/python_Makefile.patch	Fri Oct 02 12:19:44 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
---- git-1.7.3.2/git_remote_helpers/Makefile.orig	Tue Nov 15 05:25:37 2011
-+++ git-1.7.3.2/git_remote_helpers/Makefile	Tue Nov 15 06:35:06 2011
[email protected]@ -23,13 +23,15 @@
- 
- PYLIBDIR=$(shell $(PYTHON_PATH) -c \
- 	 "import sys; \
--	 print 'lib/python%i.%i/site-packages' % sys.version_info[:2]")
-+	 print 'lib/python%i.%i/vendor-packages' % sys.version_info[:2]")
- 
- all: $(pysetupfile)
- 	$(QUIET)$(PYTHON_PATH) $(pysetupfile) $(QUIETSETUP) build
- 
- install: $(pysetupfile)
--	$(PYTHON_PATH) $(pysetupfile) install --prefix $(DESTDIR_SQ)$(prefix)
-+	$(PYTHON_PATH) $(pysetupfile) install \
-+	--install-lib=$(DESTDIR_SQ)$(prefix)/$(PYLIBDIR) \
-+	--prefix $(DESTDIR_SQ)$(prefix)
- 
- instlibdir: $(pysetupfile)
- 	@echo "$(DESTDIR_SQ)$(prefix)/$(PYLIBDIR)"
--- a/components/git/patches/t_Makefile.patch	Fri Oct 02 12:19:44 2015 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-The ordering to the tests was non-deterministic without sorting the list.
-This will be fed back to the community.
-
---- git-1.7.9.2/t/Makefile_orig	2015-03-26 14:29:33.733092028 -0700
-+++ git-1.7.9.2/t/Makefile	2015-03-26 14:29:53.247281197 -0700
[email protected]@ -17,7 +17,7 @@
- # Shell quote;
- SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
- 
--T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
-+T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
- TSVN = $(wildcard t91[0-9][0-9]-*.sh)
- TGITWEB = $(wildcard t95[0-9][0-9]-*.sh)
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/git/patches/test.patch	Mon Oct 12 15:58:48 2015 -0700
@@ -0,0 +1,40 @@
+A couple of tests need patching:
+
+  - There's a garbled sed command in the clone tests, which works for GNU
+    sed, but not for Solaris.
+
+  - Because we're doing the build in a symlink farm, one of the diff tests
+    thinks that we're changing the type of the files from symlink to file,
+    so the diffs come out wrong.  Rather than cleverly mucking around with
+    the working directory vs the repo directory, we just cat the files as
+    real files into place.
+
+The first patch is probably fine for upstream; the latter perhaps less so.
+
+--- git-2.4.5/t/t5601-clone.sh	Thu Jun 25 12:15:40 2015
++++ git-2.4.5/t/t5601-clone.sh	Thu Jul  2 12:35:08 2015
[email protected]@ -445,7 +445,7 @@
+ #IPv6
+ for tuah in ::1 [::1] [::1]: [email protected]::1 [email protected][::1] [email protected][::1]: [[email protected]::1] [[email protected]::1]:
+ do
+-	ehost=$(echo $tuah | sed -e "s/1]:/1]/ "| tr -d "[]")
++	ehost=$(echo $tuah | sed -e "s/1]:/1]/" | tr -d "[]")
+ 	test_expect_success "clone ssh://$tuah/home/user/repo" "
+ 	  test_clone_url ssh://$tuah/home/user/repo $ehost /home/user/repo
+ 	"
+--- git-2.4.5/t/t4018-diff-funcname.sh	Thu Jun 25 12:15:40 2015
++++ git-2.4.5/t/t4018-diff-funcname.sh	Thu Jul  2 14:11:09 2015
[email protected]@ -79,8 +79,11 @@
+ 
+ 	# add all test files to the index
+ 	(
+-		cd "$TEST_DIRECTORY"/t4018 &&
+-		git --git-dir="$TRASH_DIRECTORY/.git" add .
++		( cd "$TEST_DIRECTORY"/t4018 && printf "%s\n" * ) | while read f
++		do
++			cat "$TEST_DIRECTORY"/t4018/$f > $f
++			git add -v $f
++		done
+ 	) &&
+ 
+ 	# place modified files in the worktree
--- a/components/git/test/results-64.master	Fri Oct 02 12:19:44 2015 +0200
+++ b/components/git/test/results-64.master	Mon Oct 12 15:58:48 2015 -0700
@@ -1,81 +1,274 @@
 make[1]: Entering directory `$(@D)'
-    SUBDIR gitweb
-    SUBDIR ../
-make[3]: `GIT-VERSION-FILE' is up to date.
-    GEN git-instaweb
+    * new prefix flags
+    CC attr.o
+    CC config.o
+    CC exec_cmd.o
+    CC gettext.o
+    AR libgit.a
+    LINK git-credential-store
+    LINK git-daemon
+    LINK git-fast-import
+    LINK git-http-backend
+    LINK git-imap-send
+    LINK git-sh-i18n--envsubst
+    LINK git-shell
+    LINK git-show-index
+    LINK git-upload-pack
+    LINK git-remote-testsvn
+    LINK git-http-fetch
+    LINK git-http-push
+    LINK git-credential-cache
+    LINK git-credential-cache--daemon
+    LINK git-remote-http
+    LN/CP git-remote-https
+    LN/CP git-remote-ftp
+    LN/CP git-remote-ftps
+    SUBDIR perl
+make[2]: `perl.mak' is up to date.
+    GEN git-p4
+    CC git.o
+    CC builtin/help.o
+    CC builtin/init-db.o
+    LINK git
+    BUILTIN git-add
+    BUILTIN git-am
+    BUILTIN git-annotate
+    BUILTIN git-apply
+    BUILTIN git-archive
+    BUILTIN git-bisect--helper
+    BUILTIN git-blame
+    BUILTIN git-branch
+    BUILTIN git-bundle
+    BUILTIN git-cat-file
+    BUILTIN git-check-attr
+    BUILTIN git-check-ignore
+    BUILTIN git-check-mailmap
+    BUILTIN git-check-ref-format
+    BUILTIN git-checkout-index
+    BUILTIN git-checkout
+    BUILTIN git-clean
+    BUILTIN git-clone
+    BUILTIN git-column
+    BUILTIN git-commit-tree
+    BUILTIN git-commit
+    BUILTIN git-config
+    BUILTIN git-count-objects
+    BUILTIN git-credential
+    BUILTIN git-describe
+    BUILTIN git-diff-files
+    BUILTIN git-diff-index
+    BUILTIN git-diff-tree
+    BUILTIN git-diff
+    BUILTIN git-fast-export
+    BUILTIN git-fetch-pack
+    BUILTIN git-fetch
+    BUILTIN git-fmt-merge-msg
+    BUILTIN git-for-each-ref
+    BUILTIN git-fsck
+    BUILTIN git-gc
+    BUILTIN git-get-tar-commit-id
+    BUILTIN git-grep
+    BUILTIN git-hash-object
+    BUILTIN git-help
+    BUILTIN git-index-pack
+    BUILTIN git-init-db
+    BUILTIN git-interpret-trailers
+    BUILTIN git-log
+    BUILTIN git-ls-files
+    BUILTIN git-ls-remote
+    BUILTIN git-ls-tree
+    BUILTIN git-mailinfo
+    BUILTIN git-mailsplit
+    BUILTIN git-merge
+    BUILTIN git-merge-base
+    BUILTIN git-merge-file
+    BUILTIN git-merge-index
+    BUILTIN git-merge-ours
+    BUILTIN git-merge-recursive
+    BUILTIN git-merge-tree
+    BUILTIN git-mktag
+    BUILTIN git-mktree
+    BUILTIN git-mv
+    BUILTIN git-name-rev
+    BUILTIN git-notes
+    BUILTIN git-pack-objects
+    BUILTIN git-pack-redundant
+    BUILTIN git-pack-refs
+    BUILTIN git-patch-id
+    BUILTIN git-prune-packed
+    BUILTIN git-prune
+    BUILTIN git-pull
+    BUILTIN git-push
+    BUILTIN git-read-tree
+    BUILTIN git-receive-pack
+    BUILTIN git-reflog
+    BUILTIN git-remote
+    BUILTIN git-remote-ext
+    BUILTIN git-remote-fd
+    BUILTIN git-repack
+    BUILTIN git-replace
+    BUILTIN git-rerere
+    BUILTIN git-reset
+    BUILTIN git-rev-list
+    BUILTIN git-rev-parse
+    BUILTIN git-revert
+    BUILTIN git-rm
+    BUILTIN git-send-pack
+    BUILTIN git-shortlog
+    BUILTIN git-show-branch
+    BUILTIN git-show-ref
+    BUILTIN git-stripspace
+    BUILTIN git-symbolic-ref
+    BUILTIN git-tag
+    BUILTIN git-unpack-file
+    BUILTIN git-unpack-objects
+    BUILTIN git-update-index
+    BUILTIN git-update-ref
+    BUILTIN git-update-server-info
+    BUILTIN git-upload-archive
+    BUILTIN git-var
+    BUILTIN git-verify-commit
+    BUILTIN git-verify-pack
+    BUILTIN git-verify-tag
+    BUILTIN git-worktree
+    BUILTIN git-write-tree
+    BUILTIN git-cherry
+    BUILTIN git-cherry-pick
+    BUILTIN git-format-patch
+    BUILTIN git-fsck-objects
+    BUILTIN git-init
+    BUILTIN git-merge-subtree
+    BUILTIN git-show
+    BUILTIN git-stage
+    BUILTIN git-status
+    BUILTIN git-whatchanged
     SUBDIR git-gui
     SUBDIR gitk-git
-make[2]: Nothing to be done for `all'.
     SUBDIR perl
-mkdir -p blib/lib
-rm -f blib/lib/Git.pm; cp Git.pm blib/lib/
-rm -f blib/lib/Error.pm
-cp private-Error.pm blib/lib/Error.pm
-    SUBDIR git_remote_helpers
     SUBDIR templates
+    LINK test-chmtime
+    LINK test-ctype
+    LINK test-config
+    LINK test-date
+    LINK test-delta
+    LINK test-dump-cache-tree
+    LINK test-dump-split-index
+    LINK test-dump-untracked-cache
+    LINK test-genrandom
+    LINK test-hashmap
+    LINK test-index-version
+    LINK test-line-buffer
+    LINK test-match-trees
+    LINK test-mergesort
+    LINK test-mktemp
+    LINK test-parse-options
+    LINK test-path-utils
+    LINK test-prio-queue
+    LINK test-read-cache
+    LINK test-regex
+    LINK test-revision-walking
+    LINK test-run-command
+    LINK test-scrap-cache-tree
+    LINK test-sha1
+    LINK test-sha1-array
+    LINK test-sigchain
+    LINK test-string-list
+    LINK test-submodule-config
+    LINK test-subprocess
+    LINK test-svn-fe
+    LINK test-urlmatch-normalization
+    LINK test-wildmatch
 /usr/gnu/bin/make -C t/ all
 make[2]: Entering directory `$(@D)/t'
-rm -f -r test-results
+rm -f -r 'test-results'
 /usr/gnu/bin/make aggregate-results-and-cleanup
 make[3]: Entering directory `$(@D)/t'
 *** t0000-basic.sh ***
-ok 1 - .git/objects should be empty after git init in an empty repo.
-ok 2 - .git/objects should have 3 subdirectories.
+ok 1 - .git/objects should be empty after git init in an empty repo
+ok 2 - .git/objects should have 3 subdirectories
 ok 3 - success is reported like this
-not ok 4 - pretend we have a known breakage # TODO known breakage
-ok 5 - pretend we have fixed a known breakage (run in sub test-lib)
-ok 6 - test runs if prerequisite is satisfied
-ok 7 # skip unmet prerequisite causes test to be skipped (missing DONTHAVEIT)
-ok 8 - test runs if prerequisites are satisfied
-ok 9 # skip unmet prerequisites causes test to be skipped (missing DONTHAVEIT of HAVEIT,DONTHAVEIT)
-ok 10 # skip unmet prerequisites causes test to be skipped (missing DONTHAVEIT of DONTHAVEIT,HAVEIT)
-ok 11 - tests clean up after themselves
-ok 12 - tests clean up even on failures
-ok 13 - git update-index without --add should fail adding.
-ok 14 - git update-index with --add should succeed.
-ok 15 - writing tree out with git write-tree
-ok 16 - validate object ID of a known tree.
-ok 17 - git update-index without --remove should fail removing.
-ok 18 - git update-index with --remove should be able to remove.
-ok 19 - git write-tree should be able to write an empty tree.
-ok 20 - validate object ID of a known tree.
-ok 21 - adding various types of objects with git update-index --add.
-ok 22 - showing stage with git ls-files --stage
-ok 23 - validate git ls-files output for a known tree.
-ok 24 - writing tree out with git write-tree.
-ok 25 - validate object ID for a known tree.
-ok 26 - showing tree with git ls-tree
-ok 27 - git ls-tree output for a known tree.
-ok 28 - showing tree with git ls-tree -r
-ok 29 - git ls-tree -r output for a known tree.
-ok 30 - showing tree with git ls-tree -r -t
-ok 31 - git ls-tree -r output for a known tree.
-ok 32 - writing partial tree out with git write-tree --prefix.
-ok 33 - validate object ID for a known tree.
-ok 34 - writing partial tree out with git write-tree --prefix.
-ok 35 - validate object ID for a known tree.
-ok 36 - put invalid objects into the index.
-ok 37 - writing this tree without --missing-ok.
-ok 38 - writing this tree with --missing-ok.
-ok 39 - git read-tree followed by write-tree should be idempotent.
-ok 40 - validate git diff-files output for a know cache/work tree state.
-ok 41 - git update-index --refresh should succeed.
-ok 42 - no diff after checkout and git update-index --refresh.
-ok 43 - git commit-tree records the correct tree in a commit.
-ok 44 - git commit-tree records the correct parent in a commit.
-ok 45 - git commit-tree omits duplicated parent in a commit.
-ok 46 - update-index D/F conflict
-ok 47 - real path works as expected
-ok 48 - very long name in the index handled sanely
-# still have 1 known breakage(s)
-# passed all remaining 47 test(s)
-1..48
+ok 4 - pretend we have a fully passing test suite
+ok 5 - pretend we have a partially passing test suite
+ok 6 - pretend we have a known breakage
+ok 7 - pretend we have fixed a known breakage
+ok 8 - pretend we have fixed one of two known breakages (run in sub test-lib)
+ok 9 - pretend we have a pass, fail, and known breakage
+ok 10 - pretend we have a mix of all possible results
+ok 11 - test --verbose
+ok 12 - test --verbose-only
+ok 13 - GIT_SKIP_TESTS
+ok 14 - GIT_SKIP_TESTS several tests
+ok 15 - GIT_SKIP_TESTS sh pattern
+ok 16 - --run basic
+ok 17 - --run with a range
+ok 18 - --run with two ranges
+ok 19 - --run with a left open range
+ok 20 - --run with a right open range
+ok 21 - --run with basic negation
+ok 22 - --run with two negations
+ok 23 - --run a range and negation
+ok 24 - --run range negation
+ok 25 - --run include, exclude and include
+ok 26 - --run include, exclude and include, comma separated
+ok 27 - --run exclude and include
+ok 28 - --run empty selectors
+ok 29 - --run invalid range start
+ok 30 - --run invalid range end
+ok 31 - --run invalid selector
+ok 32 - test runs if prerequisite is satisfied
+ok 33 # skip unmet prerequisite causes test to be skipped (missing DONTHAVEIT)
+ok 34 - test runs if prerequisites are satisfied
+ok 35 # skip unmet prerequisites causes test to be skipped (missing DONTHAVEIT of HAVEIT,DONTHAVEIT)
+ok 36 # skip unmet prerequisites causes test to be skipped (missing DONTHAVEIT of DONTHAVEIT,HAVEIT)
+ok 37 - test runs if lazy prereq is satisfied
+ok 38 # skip missing lazy prereqs skip tests (missing !LAZY_TRUE)
+ok 39 - negative lazy prereqs checked
+ok 40 # skip missing negative lazy prereqs will skip (missing LAZY_FALSE)
+ok 41 - tests clean up after themselves
+ok 42 - tests clean up even on failures
+ok 43 - git update-index without --add should fail adding
+ok 44 - git update-index with --add should succeed
+ok 45 - writing tree out with git write-tree
+ok 46 - validate object ID of a known tree
+ok 47 - git update-index without --remove should fail removing
+ok 48 - git update-index with --remove should be able to remove
+ok 49 - git write-tree should be able to write an empty tree
+ok 50 - validate object ID of a known tree
+ok 51 - adding various types of objects with git update-index --add
+ok 52 - showing stage with git ls-files --stage
+ok 53 - validate git ls-files output for a known tree
+ok 54 - writing tree out with git write-tree
+ok 55 - validate object ID for a known tree
+ok 56 - showing tree with git ls-tree
+ok 57 - git ls-tree output for a known tree
+ok 58 - showing tree with git ls-tree -r
+ok 59 - git ls-tree -r output for a known tree
+ok 60 - showing tree with git ls-tree -r -t
+ok 61 - git ls-tree -r output for a known tree
+ok 62 - writing partial tree out with git write-tree --prefix
+ok 63 - validate object ID for a known tree
+ok 64 - writing partial tree out with git write-tree --prefix
+ok 65 - validate object ID for a known tree
+ok 66 - put invalid objects into the index
+ok 67 - writing this tree without --missing-ok
+ok 68 - writing this tree with --missing-ok
+ok 69 - git read-tree followed by write-tree should be idempotent
+ok 70 - validate git diff-files output for a know cache/work tree state
+ok 71 - git update-index --refresh should succeed
+ok 72 - no diff after checkout and git update-index --refresh
+ok 73 - git commit-tree records the correct tree in a commit
+ok 74 - git commit-tree records the correct parent in a commit
+ok 75 - git commit-tree omits duplicated parent in a commit
+ok 76 - update-index D/F conflict
+ok 77 - very long name in the index handled sanely
+# passed all 77 test(s)
+1..77
 *** t0001-init.sh ***
 ok 1 - plain
 ok 2 - plain nested in bare
 ok 3 - plain through aliased command, outside any git repo
-not ok 4 - plain nested through aliased command # TODO known breakage
-not ok 5 - plain nested in bare through aliased command # TODO known breakage
+ok 4 - plain nested through aliased command
+ok 5 - plain nested in bare through aliased command
 ok 6 - plain with GIT_WORK_TREE
 ok 7 - plain bare
 ok 8 - plain bare with GIT_WORK_TREE
@@ -103,12 +296,12 @@
 ok 30 - init creates a new bare directory with global --bare
 ok 31 - init prefers command line to GIT_DIR
 ok 32 - init with separate gitdir
-ok 33 - re-init to update git link
-ok 34 - re-init to move gitdir
-ok 35 - re-init to move gitdir symlink
-# still have 2 known breakage(s)
-# passed all remaining 33 test(s)
-1..35
+ok 33 - re-init on .git file
+ok 34 - re-init to update git link
+ok 35 - re-init to move gitdir
+ok 36 - re-init to move gitdir symlink
+# passed all 36 test(s)
+1..36
 *** t0002-gitfile.sh ***
 ok 1 - initial setup
 ok 2 - bad setup: invalid .git file format
@@ -120,30 +313,35 @@
 ok 8 - check write-tree
 ok 9 - check commit-tree
 ok 10 - check rev-list
-# passed all 10 test(s)
-1..10
+ok 11 - setup_git_dir twice in subdir
+# passed all 11 test(s)
+1..11
 *** t0003-attributes.sh ***
 ok 1 - setup
 ok 2 - command line checks
 ok 3 - attribute test
 ok 4 - attribute matching is case sensitive when core.ignorecase=0
 ok 5 - attribute matching is case insensitive when core.ignorecase=1
-ok 6 - check whether FS is case-insensitive
-ok 7 # skip additional case insensitivity tests (missing CASE_INSENSITIVE_FS)
-ok 8 - unnormalized paths
-ok 9 - relative paths
-ok 10 - prefixes are not confused with leading directories
-ok 11 - core.attributesfile
-ok 12 - attribute test: read paths from stdin
-ok 13 - attribute test: --all option
-ok 14 - attribute test: --cached option
-ok 15 - root subdir attribute test
-ok 16 - setup bare
-ok 17 - bare repository: check that .gitattribute is ignored
-ok 18 - bare repository: check that --cached honors index
-ok 19 - bare repository: test info/attributes
-# passed all 19 test(s)
-1..19
+ok 6 # skip additional case insensitivity tests (missing CASE_INSENSITIVE_FS)
+ok 7 - unnormalized paths
+ok 8 - relative paths
+ok 9 - prefixes are not confused with leading directories
+ok 10 - core.attributesfile
+ok 11 - attribute test: read paths from stdin
+ok 12 - attribute test: --all option
+ok 13 - attribute test: --cached option
+ok 14 - root subdir attribute test
+ok 15 - negative patterns
+ok 16 - patterns starting with exclamation
+ok 17 - "**" test
+ok 18 - "**" with no slashes test
+ok 19 - using --git-dir and --work-tree
+ok 20 - setup bare
+ok 21 - bare repository: check that .gitattribute is ignored
+ok 22 - bare repository: check that --cached honors index
+ok 23 - bare repository: test info/attributes
+# passed all 23 test(s)
+1..23
 *** t0004-unwritable.sh ***
 ok 1 - setup
 ok 2 - write-tree should notice unwritable repository
@@ -154,8 +352,12 @@
 1..5
 *** t0005-signals.sh ***
 ok 1 - sigchain works
-# passed all 1 test(s)
-1..1
+ok 2 - signals are propagated using shell convention
+ok 3 - create blob
+ok 4 - a constipated git dies with SIGPIPE
+ok 5 - a constipated git dies with SIGPIPE even if parent ignores it
+# passed all 5 test(s)
+1..5
 *** t0006-date.sh ***
 ok 1 - relative date (5 seconds ago)
 ok 2 - relative date (5 minutes ago)
@@ -202,8 +404,420 @@
 ok 43 - parse approxidate (Jun 6, 5AM)
 ok 44 - parse approxidate (5AM Jun 6)
 ok 45 - parse approxidate (6AM, June 7, 2009)
-# passed all 45 test(s)
-1..45
+ok 46 - parse approxidate (2008-12-01)
+ok 47 - parse approxidate (2009-12-01)
+# passed all 47 test(s)
+1..47
+*** t0007-git-var.sh ***
+ok 1 - get GIT_AUTHOR_IDENT
+ok 2 - get GIT_COMMITTER_IDENT
+ok 3 - requested identites are strict
+ok 4 - git var -l lists variables
+ok 5 - git var -l lists config
+ok 6 - listing and asking for variables are exclusive
+# passed all 6 test(s)
+1..6
+*** t0008-ignores.sh ***
+ok 1 - setup
+ok 2 - . corner-case
+ok 3 - . corner-case with -q
+ok 4 - . corner-case with --quiet
+ok 5 - . corner-case with -v
+ok 6 - . corner-case with -v -n
+ok 7 - . corner-case with -v --non-matching
+ok 8 - . corner-case with --verbose
+ok 9 - . corner-case with --verbose -n
+ok 10 - . corner-case with --verbose --non-matching
+ok 11 - empty command line
+ok 12 - empty command line with -q
+ok 13 - empty command line with --quiet
+ok 14 - empty command line with -v
+ok 15 - empty command line with -v -n
+ok 16 - empty command line with -v --non-matching
+ok 17 - empty command line with --verbose
+ok 18 - empty command line with --verbose -n
+ok 19 - empty command line with --verbose --non-matching
+ok 20 - --stdin with empty STDIN
+ok 21 - --stdin with empty STDIN with -q
+ok 22 - --stdin with empty STDIN with --quiet
+ok 23 - --stdin with empty STDIN with -v
+ok 24 - --stdin with empty STDIN with -v -n
+ok 25 - --stdin with empty STDIN with -v --non-matching
+ok 26 - --stdin with empty STDIN with --verbose
+ok 27 - --stdin with empty STDIN with --verbose -n
+ok 28 - --stdin with empty STDIN with --verbose --non-matching
+ok 29 - -q with multiple args
+ok 30 - --quiet with multiple args
+ok 31 - -q -v
+ok 32 - --quiet -v
+ok 33 - -q --verbose
+ok 34 - --quiet --verbose
+ok 35 - --quiet with multiple args
+ok 36 - erroneous use of --
+ok 37 - erroneous use of -- with -q
+ok 38 - erroneous use of -- with --quiet
+ok 39 - erroneous use of -- with -v
+ok 40 - erroneous use of -- with -v -n
+ok 41 - erroneous use of -- with -v --non-matching
+ok 42 - erroneous use of -- with --verbose
+ok 43 - erroneous use of -- with --verbose -n
+ok 44 - erroneous use of -- with --verbose --non-matching
+ok 45 - --stdin with superfluous arg
+ok 46 - --stdin with superfluous arg with -q
+ok 47 - --stdin with superfluous arg with --quiet
+ok 48 - --stdin with superfluous arg with -v
+ok 49 - --stdin with superfluous arg with -v -n
+ok 50 - --stdin with superfluous arg with -v --non-matching
+ok 51 - --stdin with superfluous arg with --verbose
+ok 52 - --stdin with superfluous arg with --verbose -n
+ok 53 - --stdin with superfluous arg with --verbose --non-matching
+ok 54 - --stdin -z with superfluous arg
+ok 55 - --stdin -z with superfluous arg with -q
+ok 56 - --stdin -z with superfluous arg with --quiet
+ok 57 - --stdin -z with superfluous arg with -v
+ok 58 - --stdin -z with superfluous arg with -v -n
+ok 59 - --stdin -z with superfluous arg with -v --non-matching
+ok 60 - --stdin -z with superfluous arg with --verbose
+ok 61 - --stdin -z with superfluous arg with --verbose -n
+ok 62 - --stdin -z with superfluous arg with --verbose --non-matching
+ok 63 - -z without --stdin
+ok 64 - -z without --stdin with -q
+ok 65 - -z without --stdin with --quiet
+ok 66 - -z without --stdin with -v
+ok 67 - -z without --stdin with -v -n
+ok 68 - -z without --stdin with -v --non-matching
+ok 69 - -z without --stdin with --verbose
+ok 70 - -z without --stdin with --verbose -n
+ok 71 - -z without --stdin with --verbose --non-matching
+ok 72 - -z without --stdin and superfluous arg
+ok 73 - -z without --stdin and superfluous arg with -q
+ok 74 - -z without --stdin and superfluous arg with --quiet
+ok 75 - -z without --stdin and superfluous arg with -v
+ok 76 - -z without --stdin and superfluous arg with -v -n
+ok 77 - -z without --stdin and superfluous arg with -v --non-matching
+ok 78 - -z without --stdin and superfluous arg with --verbose
+ok 79 - -z without --stdin and superfluous arg with --verbose -n
+ok 80 - -z without --stdin and superfluous arg with --verbose --non-matching
+ok 81 - needs work tree
+ok 82 - needs work tree with -q
+ok 83 - needs work tree with --quiet
+ok 84 - needs work tree with -v
+ok 85 - needs work tree with -v -n
+ok 86 - needs work tree with -v --non-matching
+ok 87 - needs work tree with --verbose
+ok 88 - needs work tree with --verbose -n
+ok 89 - needs work tree with --verbose --non-matching
+ok 90 - non-existent file at top-level not ignored
+ok 91 - non-existent file at top-level not ignored with -q
+ok 92 - non-existent file at top-level not ignored with --quiet
+ok 93 - non-existent file at top-level not ignored with -v
+ok 94 - non-existent file at top-level not ignored with -v -n
+ok 95 - non-existent file at top-level not ignored with -v --non-matching
+ok 96 - non-existent file at top-level not ignored with --verbose
+ok 97 - non-existent file at top-level not ignored with --verbose -n
+ok 98 - non-existent file at top-level not ignored with --verbose --non-matching
+ok 99 - non-existent file at top-level not ignored with --no-index
+ok 100 - non-existent file at top-level not ignored with --no-index -q
+ok 101 - non-existent file at top-level not ignored with --no-index --quiet
+ok 102 - non-existent file at top-level not ignored with --no-index -v
+ok 103 - non-existent file at top-level not ignored with --no-index -v -n
+ok 104 - non-existent file at top-level not ignored with --no-index -v --non-matching
+ok 105 - non-existent file at top-level not ignored with --no-index --verbose
+ok 106 - non-existent file at top-level not ignored with --no-index --verbose -n
+ok 107 - non-existent file at top-level not ignored with --no-index --verbose --non-matching
+ok 108 - non-existent file at top-level ignored
+ok 109 - non-existent file at top-level ignored with -q
+ok 110 - non-existent file at top-level ignored with --quiet
+ok 111 - non-existent file at top-level ignored with -v
+ok 112 - non-existent file at top-level ignored with -v -n
+ok 113 - non-existent file at top-level ignored with -v --non-matching
+ok 114 - non-existent file at top-level ignored with --verbose
+ok 115 - non-existent file at top-level ignored with --verbose -n
+ok 116 - non-existent file at top-level ignored with --verbose --non-matching
+ok 117 - non-existent file at top-level ignored with --no-index
+ok 118 - non-existent file at top-level ignored with --no-index -q
+ok 119 - non-existent file at top-level ignored with --no-index --quiet
+ok 120 - non-existent file at top-level ignored with --no-index -v
+ok 121 - non-existent file at top-level ignored with --no-index -v -n
+ok 122 - non-existent file at top-level ignored with --no-index -v --non-matching
+ok 123 - non-existent file at top-level ignored with --no-index --verbose
+ok 124 - non-existent file at top-level ignored with --no-index --verbose -n
+ok 125 - non-existent file at top-level ignored with --no-index --verbose --non-matching
+ok 126 - existing untracked file at top-level not ignored
+ok 127 - existing untracked file at top-level not ignored with -q
+ok 128 - existing untracked file at top-level not ignored with --quiet
+ok 129 - existing untracked file at top-level not ignored with -v
+ok 130 - existing untracked file at top-level not ignored with -v -n
+ok 131 - existing untracked file at top-level not ignored with -v --non-matching
+ok 132 - existing untracked file at top-level not ignored with --verbose
+ok 133 - existing untracked file at top-level not ignored with --verbose -n
+ok 134 - existing untracked file at top-level not ignored with --verbose --non-matching
+ok 135 - existing untracked file at top-level not ignored with --no-index
+ok 136 - existing untracked file at top-level not ignored with --no-index -q
+ok 137 - existing untracked file at top-level not ignored with --no-index --quiet
+ok 138 - existing untracked file at top-level not ignored with --no-index -v
+ok 139 - existing untracked file at top-level not ignored with --no-index -v -n
+ok 140 - existing untracked file at top-level not ignored with --no-index -v --non-matching
+ok 141 - existing untracked file at top-level not ignored with --no-index --verbose
+ok 142 - existing untracked file at top-level not ignored with --no-index --verbose -n
+ok 143 - existing untracked file at top-level not ignored with --no-index --verbose --non-matching
+ok 144 - existing tracked file at top-level not ignored
+ok 145 - existing tracked file at top-level not ignored with -q
+ok 146 - existing tracked file at top-level not ignored with --quiet
+ok 147 - existing tracked file at top-level not ignored with -v
+ok 148 - existing tracked file at top-level not ignored with -v -n
+ok 149 - existing tracked file at top-level not ignored with -v --non-matching
+ok 150 - existing tracked file at top-level not ignored with --verbose
+ok 151 - existing tracked file at top-level not ignored with --verbose -n
+ok 152 - existing tracked file at top-level not ignored with --verbose --non-matching
+ok 153 - existing tracked file at top-level shown as ignored with --no-index
+ok 154 - existing tracked file at top-level shown as ignored with --no-index -q
+ok 155 - existing tracked file at top-level shown as ignored with --no-index --quiet
+ok 156 - existing tracked file at top-level shown as ignored with --no-index -v
+ok 157 - existing tracked file at top-level shown as ignored with --no-index -v -n
+ok 158 - existing tracked file at top-level shown as ignored with --no-index -v --non-matching
+ok 159 - existing tracked file at top-level shown as ignored with --no-index --verbose
+ok 160 - existing tracked file at top-level shown as ignored with --no-index --verbose -n
+ok 161 - existing tracked file at top-level shown as ignored with --no-index --verbose --non-matching
+ok 162 - existing untracked file at top-level ignored
+ok 163 - existing untracked file at top-level ignored with -q
+ok 164 - existing untracked file at top-level ignored with --quiet
+ok 165 - existing untracked file at top-level ignored with -v
+ok 166 - existing untracked file at top-level ignored with -v -n
+ok 167 - existing untracked file at top-level ignored with -v --non-matching
+ok 168 - existing untracked file at top-level ignored with --verbose
+ok 169 - existing untracked file at top-level ignored with --verbose -n
+ok 170 - existing untracked file at top-level ignored with --verbose --non-matching
+ok 171 - existing untracked file at top-level ignored with --no-index
+ok 172 - existing untracked file at top-level ignored with --no-index -q
+ok 173 - existing untracked file at top-level ignored with --no-index --quiet
+ok 174 - existing untracked file at top-level ignored with --no-index -v
+ok 175 - existing untracked file at top-level ignored with --no-index -v -n
+ok 176 - existing untracked file at top-level ignored with --no-index -v --non-matching
+ok 177 - existing untracked file at top-level ignored with --no-index --verbose
+ok 178 - existing untracked file at top-level ignored with --no-index --verbose -n
+ok 179 - existing untracked file at top-level ignored with --no-index --verbose --non-matching
+ok 180 - mix of file types at top-level
+ok 181 - mix of file types at top-level with -v
+ok 182 - mix of file types at top-level with -v -n
+ok 183 - mix of file types at top-level with -v --non-matching
+ok 184 - mix of file types at top-level with --verbose
+ok 185 - mix of file types at top-level with --verbose -n
+ok 186 - mix of file types at top-level with --verbose --non-matching
+ok 187 - mix of file types at top-level with --no-index
+ok 188 - mix of file types at top-level with --no-index -v
+ok 189 - mix of file types at top-level with --no-index -v -n
+ok 190 - mix of file types at top-level with --no-index -v --non-matching
+ok 191 - mix of file types at top-level with --no-index --verbose
+ok 192 - mix of file types at top-level with --no-index --verbose -n
+ok 193 - mix of file types at top-level with --no-index --verbose --non-matching
+ok 194 - non-existent file in subdir a/ not ignored
+ok 195 - non-existent file in subdir a/ not ignored with -q
+ok 196 - non-existent file in subdir a/ not ignored with --quiet
+ok 197 - non-existent file in subdir a/ not ignored with -v
+ok 198 - non-existent file in subdir a/ not ignored with -v -n
+ok 199 - non-existent file in subdir a/ not ignored with -v --non-matching
+ok 200 - non-existent file in subdir a/ not ignored with --verbose
+ok 201 - non-existent file in subdir a/ not ignored with --verbose -n
+ok 202 - non-existent file in subdir a/ not ignored with --verbose --non-matching
+ok 203 - non-existent file in subdir a/ not ignored with --no-index
+ok 204 - non-existent file in subdir a/ not ignored with --no-index -q
+ok 205 - non-existent file in subdir a/ not ignored with --no-index --quiet
+ok 206 - non-existent file in subdir a/ not ignored with --no-index -v
+ok 207 - non-existent file in subdir a/ not ignored with --no-index -v -n
+ok 208 - non-existent file in subdir a/ not ignored with --no-index -v --non-matching
+ok 209 - non-existent file in subdir a/ not ignored with --no-index --verbose
+ok 210 - non-existent file in subdir a/ not ignored with --no-index --verbose -n
+ok 211 - non-existent file in subdir a/ not ignored with --no-index --verbose --non-matching
+ok 212 - non-existent file in subdir a/ ignored
+ok 213 - non-existent file in subdir a/ ignored with -q
+ok 214 - non-existent file in subdir a/ ignored with --quiet
+ok 215 - non-existent file in subdir a/ ignored with -v
+ok 216 - non-existent file in subdir a/ ignored with -v -n
+ok 217 - non-existent file in subdir a/ ignored with -v --non-matching
+ok 218 - non-existent file in subdir a/ ignored with --verbose
+ok 219 - non-existent file in subdir a/ ignored with --verbose -n
+ok 220 - non-existent file in subdir a/ ignored with --verbose --non-matching
+ok 221 - non-existent file in subdir a/ ignored with --no-index
+ok 222 - non-existent file in subdir a/ ignored with --no-index -q
+ok 223 - non-existent file in subdir a/ ignored with --no-index --quiet
+ok 224 - non-existent file in subdir a/ ignored with --no-index -v
+ok 225 - non-existent file in subdir a/ ignored with --no-index -v -n
+ok 226 - non-existent file in subdir a/ ignored with --no-index -v --non-matching
+ok 227 - non-existent file in subdir a/ ignored with --no-index --verbose
+ok 228 - non-existent file in subdir a/ ignored with --no-index --verbose -n
+ok 229 - non-existent file in subdir a/ ignored with --no-index --verbose --non-matching
+ok 230 - existing untracked file in subdir a/ not ignored
+ok 231 - existing untracked file in subdir a/ not ignored with -q
+ok 232 - existing untracked file in subdir a/ not ignored with --quiet
+ok 233 - existing untracked file in subdir a/ not ignored with -v
+ok 234 - existing untracked file in subdir a/ not ignored with -v -n
+ok 235 - existing untracked file in subdir a/ not ignored with -v --non-matching
+ok 236 - existing untracked file in subdir a/ not ignored with --verbose
+ok 237 - existing untracked file in subdir a/ not ignored with --verbose -n
+ok 238 - existing untracked file in subdir a/ not ignored with --verbose --non-matching
+ok 239 - existing untracked file in subdir a/ not ignored with --no-index
+ok 240 - existing untracked file in subdir a/ not ignored with --no-index -q
+ok 241 - existing untracked file in subdir a/ not ignored with --no-index --quiet
+ok 242 - existing untracked file in subdir a/ not ignored with --no-index -v
+ok 243 - existing untracked file in subdir a/ not ignored with --no-index -v -n
+ok 244 - existing untracked file in subdir a/ not ignored with --no-index -v --non-matching
+ok 245 - existing untracked file in subdir a/ not ignored with --no-index --verbose
+ok 246 - existing untracked file in subdir a/ not ignored with --no-index --verbose -n
+ok 247 - existing untracked file in subdir a/ not ignored with --no-index --verbose --non-matching
+ok 248 - existing tracked file in subdir a/ not ignored
+ok 249 - existing tracked file in subdir a/ not ignored with -q
+ok 250 - existing tracked file in subdir a/ not ignored with --quiet
+ok 251 - existing tracked file in subdir a/ not ignored with -v
+ok 252 - existing tracked file in subdir a/ not ignored with -v -n
+ok 253 - existing tracked file in subdir a/ not ignored with -v --non-matching
+ok 254 - existing tracked file in subdir a/ not ignored with --verbose
+ok 255 - existing tracked file in subdir a/ not ignored with --verbose -n
+ok 256 - existing tracked file in subdir a/ not ignored with --verbose --non-matching
+ok 257 - existing tracked file in subdir a/ shown as ignored with --no-index
+ok 258 - existing tracked file in subdir a/ shown as ignored with --no-index -q
+ok 259 - existing tracked file in subdir a/ shown as ignored with --no-index --quiet
+ok 260 - existing tracked file in subdir a/ shown as ignored with --no-index -v
+ok 261 - existing tracked file in subdir a/ shown as ignored with --no-index -v -n
+ok 262 - existing tracked file in subdir a/ shown as ignored with --no-index -v --non-matching
+ok 263 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose
+ok 264 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose -n
+ok 265 - existing tracked file in subdir a/ shown as ignored with --no-index --verbose --non-matching
+ok 266 - existing untracked file in subdir a/ ignored
+ok 267 - existing untracked file in subdir a/ ignored with -q
+ok 268 - existing untracked file in subdir a/ ignored with --quiet
+ok 269 - existing untracked file in subdir a/ ignored with -v
+ok 270 - existing untracked file in subdir a/ ignored with -v -n
+ok 271 - existing untracked file in subdir a/ ignored with -v --non-matching
+ok 272 - existing untracked file in subdir a/ ignored with --verbose
+ok 273 - existing untracked file in subdir a/ ignored with --verbose -n
+ok 274 - existing untracked file in subdir a/ ignored with --verbose --non-matching
+ok 275 - existing untracked file in subdir a/ ignored with --no-index
+ok 276 - existing untracked file in subdir a/ ignored with --no-index -q
+ok 277 - existing untracked file in subdir a/ ignored with --no-index --quiet
+ok 278 - existing untracked file in subdir a/ ignored with --no-index -v
+ok 279 - existing untracked file in subdir a/ ignored with --no-index -v -n
+ok 280 - existing untracked file in subdir a/ ignored with --no-index -v --non-matching
+ok 281 - existing untracked file in subdir a/ ignored with --no-index --verbose
+ok 282 - existing untracked file in subdir a/ ignored with --no-index --verbose -n
+ok 283 - existing untracked file in subdir a/ ignored with --no-index --verbose --non-matching
+ok 284 - mix of file types in subdir a/
+ok 285 - mix of file types in subdir a/ with -v
+ok 286 - mix of file types in subdir a/ with -v -n
+ok 287 - mix of file types in subdir a/ with -v --non-matching
+ok 288 - mix of file types in subdir a/ with --verbose
+ok 289 - mix of file types in subdir a/ with --verbose -n
+ok 290 - mix of file types in subdir a/ with --verbose --non-matching
+ok 291 - mix of file types in subdir a/ with --no-index
+ok 292 - mix of file types in subdir a/ with --no-index -v
+ok 293 - mix of file types in subdir a/ with --no-index -v -n
+ok 294 - mix of file types in subdir a/ with --no-index -v --non-matching
+ok 295 - mix of file types in subdir a/ with --no-index --verbose
+ok 296 - mix of file types in subdir a/ with --no-index --verbose -n
+ok 297 - mix of file types in subdir a/ with --no-index --verbose --non-matching
+ok 298 - sub-directory local ignore
+ok 299 - sub-directory local ignore with --verbose
+ok 300 - local ignore inside a sub-directory
+ok 301 - local ignore inside a sub-directory with --verbose
+ok 302 - nested include
+ok 303 - nested include with -q
+ok 304 - nested include with --quiet
+ok 305 - nested include with -v
+ok 306 - nested include with -v -n
+ok 307 - nested include with -v --non-matching
+ok 308 - nested include with --verbose
+ok 309 - nested include with --verbose -n
+ok 310 - nested include with --verbose --non-matching
+ok 311 - ignored sub-directory
+ok 312 - ignored sub-directory with -q
+ok 313 - ignored sub-directory with --quiet
+ok 314 - ignored sub-directory with -v
+ok 315 - ignored sub-directory with -v -n
+ok 316 - ignored sub-directory with -v --non-matching
+ok 317 - ignored sub-directory with --verbose
+ok 318 - ignored sub-directory with --verbose -n
+ok 319 - ignored sub-directory with --verbose --non-matching
+ok 320 - multiple files inside ignored sub-directory
+ok 321 - multiple files inside ignored sub-directory with -v
+ok 322 - cd to ignored sub-directory
+ok 323 - cd to ignored sub-directory with -v
+ok 324 - symlink
+ok 325 - symlink with -q
+ok 326 - symlink with --quiet
+ok 327 - symlink with -v
+ok 328 - symlink with -v -n
+ok 329 - symlink with -v --non-matching
+ok 330 - symlink with --verbose
+ok 331 - symlink with --verbose -n
+ok 332 - symlink with --verbose --non-matching
+ok 333 - beyond a symlink
+ok 334 - beyond a symlink with -q
+ok 335 - beyond a symlink with --quiet
+ok 336 - beyond a symlink with -v
+ok 337 - beyond a symlink with -v -n
+ok 338 - beyond a symlink with -v --non-matching
+ok 339 - beyond a symlink with --verbose
+ok 340 - beyond a symlink with --verbose -n
+ok 341 - beyond a symlink with --verbose --non-matching
+ok 342 - beyond a symlink from subdirectory
+ok 343 - beyond a symlink from subdirectory with -q
+ok 344 - beyond a symlink from subdirectory with --quiet
+ok 345 - beyond a symlink from subdirectory with -v
+ok 346 - beyond a symlink from subdirectory with -v -n
+ok 347 - beyond a symlink from subdirectory with -v --non-matching
+ok 348 - beyond a symlink from subdirectory with --verbose
+ok 349 - beyond a symlink from subdirectory with --verbose -n
+ok 350 - beyond a symlink from subdirectory with --verbose --non-matching
+ok 351 - submodule
+ok 352 - submodule with -q
+ok 353 - submodule with --quiet
+ok 354 - submodule with -v
+ok 355 - submodule with -v -n
+ok 356 - submodule with -v --non-matching
+ok 357 - submodule with --verbose
+ok 358 - submodule with --verbose -n
+ok 359 - submodule with --verbose --non-matching
+ok 360 - submodule from subdirectory
+ok 361 - submodule from subdirectory with -q
+ok 362 - submodule from subdirectory with --quiet
+ok 363 - submodule from subdirectory with -v
+ok 364 - submodule from subdirectory with -v -n
+ok 365 - submodule from subdirectory with -v --non-matching
+ok 366 - submodule from subdirectory with --verbose
+ok 367 - submodule from subdirectory with --verbose -n
+ok 368 - submodule from subdirectory with --verbose --non-matching
+ok 369 - global ignore not yet enabled
+ok 370 - global ignore
+ok 371 - global ignore with -v
+ok 372 - --stdin
+ok 373 - --stdin -q
+ok 374 - --stdin -v
+ok 375 - --stdin -z
+ok 376 - --stdin -z -q
+ok 377 - --stdin -z -v
+ok 378 - -z --stdin
+ok 379 - -z --stdin -q
+ok 380 - -z --stdin -v
+ok 381 - --stdin from subdirectory
+ok 382 - --stdin from subdirectory with -v
+ok 383 - --stdin from subdirectory with -v -n
+ok 384 - --stdin -z from subdirectory
+ok 385 - --stdin -z from subdirectory with -v
+ok 386 - -z --stdin from subdirectory
+ok 387 - -z --stdin from subdirectory with -v
+ok 388 - streaming support for --stdin
+ok 389 - trailing whitespace is ignored
+ok 390 - quoting allows trailing whitespace
+ok 391 - correct handling of backslashes
+ok 392 - info/exclude trumps core.excludesfile
+# passed all 392 test(s)
+1..392
+*** t0009-prio-queue.sh ***
+ok 1 - basic ordering
+ok 2 - mixed put and get
+ok 3 - notice empty queue
+# passed all 3 test(s)
+1..3
 *** t0010-racy-git.sh ***
 ok 1 - Racy GIT trial #0 part A
 ok 2 - Racy GIT trial #0 part B
@@ -217,6 +831,24 @@
 ok 10 - Racy GIT trial #4 part B
 # passed all 10 test(s)
 1..10
+*** t0011-hashmap.sh ***
+ok 1 - hash functions
+ok 2 - put
+ok 3 - put (case insensitive)
+ok 4 - replace
+ok 5 - replace (case insensitive)
+ok 6 - get
+ok 7 - get (case insensitive)
+ok 8 - add
+ok 9 - add (case insensitive)
+ok 10 - remove
+ok 11 - remove (case insensitive)
+ok 12 - iterate
+ok 13 - iterate (case insensitive)
+ok 14 - grow / shrink
+ok 15 - string interning
+# passed all 15 test(s)
+1..15
 *** t0020-crlf.sh ***
 ok 1 - setup
 ok 2 - safecrlf: autocrlf=input, all CRLF
@@ -224,43 +856,52 @@
 ok 4 - safecrlf: autocrlf=true, all LF
 ok 5 - safecrlf: autocrlf=true mixed LF/CRLF
 ok 6 - safecrlf: print warning only once
-ok 7 - switch off autocrlf, safecrlf, reset HEAD
-ok 8 - update with autocrlf=input
-ok 9 - update with autocrlf=true
-ok 10 - checkout with autocrlf=true
-ok 11 - checkout with autocrlf=input
-ok 12 - apply patch (autocrlf=input)
-ok 13 - apply patch --cached (autocrlf=input)
-ok 14 - apply patch --index (autocrlf=input)
-ok 15 - apply patch (autocrlf=true)
-ok 16 - apply patch --cached (autocrlf=true)
-ok 17 - apply patch --index (autocrlf=true)
-ok 18 - .gitattributes says two is binary
-ok 19 - .gitattributes says two is input
-ok 20 - .gitattributes says two and three are text
-ok 21 - in-tree .gitattributes (1)
-ok 22 - in-tree .gitattributes (2)
-ok 23 - in-tree .gitattributes (3)
-ok 24 - in-tree .gitattributes (4)
-ok 25 - checkout with existing .gitattributes
-ok 26 - checkout when deleting .gitattributes
-ok 27 - invalid .gitattributes (must not crash)
-ok 28 - setting up for new autocrlf tests
-ok 29 - report no change after setting autocrlf
-ok 30 - files are clean after checkout
-ok 31 - LF only file gets CRLF with autocrlf
-ok 32 - Mixed file is still mixed with autocrlf
-ok 33 - CRLF only file has CRLF with autocrlf
-ok 34 - New CRLF file gets LF in repo
-# passed all 34 test(s)
-1..34
+ok 7 - safecrlf: git diff demotes safecrlf=true to warn
+ok 8 - switch off autocrlf, safecrlf, reset HEAD
+ok 9 - update with autocrlf=input
+ok 10 - update with autocrlf=true
+ok 11 - checkout with autocrlf=true
+ok 12 - checkout with autocrlf=input
+ok 13 - apply patch (autocrlf=input)
+ok 14 - apply patch --cached (autocrlf=input)
+ok 15 - apply patch --index (autocrlf=input)
+ok 16 - apply patch (autocrlf=true)
+ok 17 - apply patch --cached (autocrlf=true)
+ok 18 - apply patch --index (autocrlf=true)
+ok 19 - .gitattributes says two is binary
+ok 20 - .gitattributes says two is input
+ok 21 - .gitattributes says two and three are text
+ok 22 - in-tree .gitattributes (1)
+ok 23 - in-tree .gitattributes (2)
+ok 24 - in-tree .gitattributes (3)
+ok 25 - in-tree .gitattributes (4)
+ok 26 - checkout with existing .gitattributes
+ok 27 - checkout when deleting .gitattributes
+ok 28 - invalid .gitattributes (must not crash)
+ok 29 - setting up for new autocrlf tests
+ok 30 - report no change after setting autocrlf
+ok 31 - files are clean after checkout
+ok 32 - LF only file gets CRLF with autocrlf
+ok 33 - Mixed file is still mixed with autocrlf
+ok 34 - CRLF only file has CRLF with autocrlf
+ok 35 - New CRLF file gets LF in repo
+# passed all 35 test(s)
+1..35
 *** t0021-conversion.sh ***
 ok 1 - setup
 ok 2 - check
 ok 3 - expanded_in_repo
 ok 4 - filter shell-escaped filenames
-# passed all 4 test(s)
-1..4
+ok 5 - required filter should filter data
+ok 6 - required filter smudge failure
+ok 7 - required filter clean failure
+ok 8 - filtering large input to small output should use little memory
+ok 9 - filter that does not read is fine
+ok 10 # skip filter large file (missing EXPENSIVE)
+ok 11 - filter: clean empty file
+ok 12 - filter: smudge empty file
+# passed all 12 test(s)
+1..12
 *** t0022-crlf-rename.sh ***
 ok 1 - setup
 ok 2 - diff -M
@@ -297,8 +938,11 @@
 ok 3 - eol=crlf puts CRLFs in normalized file
 ok 4 - autocrlf=true overrides eol=lf
 ok 5 - autocrlf=true overrides unset eol
-# passed all 5 test(s)
-1..5
+ok 6 # skip eol native is crlf (missing NATIVE_CRLF)
+# passed all 6 test(s)
+1..6
+*** t0027-auto-crlf.sh ***
+1..0 # SKIP EXPENSIVE not set
 *** t0030-stripspace.sh ***
 ok 1 - long lines without spaces should be unchanged
 ok 2 - lines with spaces at the beginning should be unchanged
@@ -318,54 +962,92 @@
 ok 16 - spaces without newline at end should be replaced with empty string
 ok 17 - consecutive text lines should be unchanged
 ok 18 - strip comments, too
-# passed all 18 test(s)
-1..18
+ok 19 - strip comments with changed comment char
+ok 20 - -c with single line
+ok 21 - -c with single line followed by empty line
+ok 22 - -c with newline only
+ok 23 - --comment-lines with single line
+ok 24 - -c with changed comment char
+ok 25 - avoid SP-HT sequence in commented line
+# passed all 25 test(s)
+1..25
 *** t0040-parse-options.sh ***
 ok 1 - test help
-ok 2 - short options
-ok 3 - long options
-ok 4 - missing required value
-ok 5 - intermingled arguments
-ok 6 - unambiguously abbreviated option
-ok 7 - unambiguously abbreviated option with "="
-ok 8 - ambiguously abbreviated option
-ok 9 - non ambiguous option (after two options it abbreviates)
-ok 10 - detect possible typos
-ok 11 - keep some options as arguments
-ok 12 - OPT_DATE() and OPT_SET_PTR() work
-ok 13 - OPT_CALLBACK() and OPT_BIT() work
-ok 14 - OPT_CALLBACK() and callback errors work
-ok 15 - OPT_BIT() and OPT_SET_INT() work
-ok 16 - OPT_NEGBIT() and OPT_SET_INT() work
-ok 17 - OPT_BIT() works
-ok 18 - OPT_NEGBIT() works
-ok 19 - OPT_BOOLEAN() with PARSE_OPT_NODASH works
-ok 20 - OPT_NUMBER_CALLBACK() works
-ok 21 - negation of OPT_NONEG flags is not ambiguous
-ok 22 - --list keeps list of strings
-ok 23 - --no-list resets list
-# passed all 23 test(s)
-1..23
+ok 2 - OPT_BOOL() #1
+ok 3 - OPT_BOOL() #2
+ok 4 - OPT_BOOL() #3
+ok 5 - OPT_BOOL() #4
+ok 6 - OPT_BOOL() #5
+ok 7 - OPT_BOOL() is idempotent #1
+ok 8 - OPT_BOOL() is idempotent #2
+ok 9 - OPT_BOOL() negation #1
+ok 10 - OPT_BOOL() negation #2
+ok 11 - OPT_BOOL() no negation #1
+ok 12 - OPT_BOOL() no negation #2
+ok 13 - OPT_BOOL() positivation
+ok 14 - OPT_INT() negative
+ok 15 - OPT_MAGNITUDE() simple
+ok 16 - OPT_MAGNITUDE() kilo
+ok 17 - OPT_MAGNITUDE() mega
+ok 18 - OPT_MAGNITUDE() giga
+ok 19 - OPT_MAGNITUDE() 3giga
+ok 20 - short options
+ok 21 - long options
+ok 22 - missing required value
+ok 23 - intermingled arguments
+ok 24 - unambiguously abbreviated option
+ok 25 - unambiguously abbreviated option with "="
+ok 26 - ambiguously abbreviated option
+ok 27 - non ambiguous option (after two options it abbreviates)
+ok 28 - detect possible typos
+ok 29 - detect possible typos
+ok 30 - keep some options as arguments
+ok 31 - OPT_DATE() works
+ok 32 - OPT_CALLBACK() and OPT_BIT() work
+ok 33 - OPT_CALLBACK() and callback errors work
+ok 34 - OPT_BIT() and OPT_SET_INT() work
+ok 35 - OPT_NEGBIT() and OPT_SET_INT() work
+ok 36 - OPT_BIT() works
+ok 37 - OPT_NEGBIT() works
+ok 38 - OPT_COUNTUP() with PARSE_OPT_NODASH works
+ok 39 - OPT_NUMBER_CALLBACK() works
+ok 40 - negation of OPT_NONEG flags is not ambiguous
+ok 41 - --list keeps list of strings
+ok 42 - --no-list resets list
+# passed all 42 test(s)
+1..42
 *** t0050-filesystem.sh ***
-ok 1 - see what we expect
-ok 2 - detection of case insensitive filesystem during repo init
-ok 3 - detection of filesystem w/o symlink support during repo init
-ok 4 - setup case tests
-ok 5 - rename (case change)
-ok 6 - merge (case change)
-not ok 7 - add (with different case) # TODO known breakage
-ok 8 - setup unicode normalization tests
-ok 9 - rename (silent unicode normalization)
-ok 10 - merge (silent unicode normalization)
-# still have 1 known breakage(s)
-# passed all remaining 9 test(s)
-1..10
+ok 1 - detection of case insensitive filesystem during repo init
+ok 2 - detection of filesystem w/o symlink support during repo init
+ok 3 - setup case tests
+ok 4 - rename (case change)
+ok 5 - merge (case change)
+ok 6 # skip add (with different case) (missing CASE_INSENSITIVE_FS)
+ok 7 - setup unicode normalization tests
+ok 8 - rename (silent unicode normalization)
+ok 9 - merge (silent unicode normalization)
+# passed all 9 test(s)
+1..9
 *** t0055-beyond-symlinks.sh ***
 ok 1 - setup
 ok 2 - update-index --add beyond symlinks
 ok 3 - add beyond symlinks
 # passed all 3 test(s)
 1..3
+*** t0056-git-C.sh ***
+ok 1 - "git -C <path>" runs git from the directory <path>
+ok 2 - "git -C <path>" with an empty <path> is a no-op
+ok 3 - Multiple -C options: "-C dir1 -C dir2" is equivalent to "-C dir1/dir2"
+ok 4 - Effect on --git-dir option: "-C c --git-dir=a.git" is equivalent to "--git-dir c/a.git"
+ok 5 - Order should not matter: "--git-dir=a.git -C c" is equivalent to "-C c --git-dir=a.git"
+ok 6 - Effect on --work-tree option: "-C c/a.git --work-tree=../a"  is equivalent to "--work-tree=c/a --git-dir=c/a.git"
+ok 7 - Order should not matter: "--work-tree=../a -C c/a.git" is equivalent to "-C c/a.git --work-tree=../a"
+ok 8 - Effect on --git-dir and --work-tree options - "-C c --git-dir=a.git --work-tree=a" is equivalent to "--git-dir=c/a.git --work-tree=c/a"
+ok 9 - Order should not matter: "-C c --git-dir=a.git --work-tree=a" is equivalent to "--git-dir=a.git -C c --work-tree=a"
+ok 10 - Order should not matter: "-C c --git-dir=a.git --work-tree=a" is equivalent to "--git-dir=a.git --work-tree=a -C c"
+ok 11 - Relative followed by fullpath: "-C ./here -C /there" is equivalent to "-C /there"
+# passed all 11 test(s)
+1..11
 *** t0060-path-utils.sh ***
 ok 1 - normalize path:  => 
 ok 2 - normalize path: . => 
@@ -414,71 +1096,148 @@
 ok 45 - normalize path: /d1/s1//../s2/../../d2 => /d2
 ok 46 - normalize path: /d1/.../d2 => /d1/.../d2
 ok 47 - normalize path: /d1/..././../d2 => /d1/d2
-ok 48 - longest ancestor: /  => -1
-ok 49 - longest ancestor: / / => -1
-ok 50 - longest ancestor: /foo  => -1
-ok 51 - longest ancestor: /foo : => -1
-ok 52 - longest ancestor: /foo ::. => -1
-ok 53 - longest ancestor: /foo ::..:: => -1
-ok 54 - longest ancestor: /foo / => 0
-ok 55 - longest ancestor: /foo /fo => -1
-ok 56 - longest ancestor: /foo /foo => -1
-ok 57 - longest ancestor: /foo /foo/ => -1
-ok 58 - longest ancestor: /foo /bar => -1
-ok 59 - longest ancestor: /foo /bar/ => -1
-ok 60 - longest ancestor: /foo /foo/bar => -1
-ok 61 - longest ancestor: /foo /foo:/bar/ => -1
-ok 62 - longest ancestor: /foo /foo/:/bar/ => -1
-ok 63 - longest ancestor: /foo /foo::/bar/ => -1
-ok 64 - longest ancestor: /foo /:/foo:/bar/ => 0
-ok 65 - longest ancestor: /foo /foo:/:/bar/ => 0
-ok 66 - longest ancestor: /foo /:/bar/:/foo => 0
-ok 67 - longest ancestor: /foo/bar  => -1
-ok 68 - longest ancestor: /foo/bar / => 0
-ok 69 - longest ancestor: /foo/bar /fo => -1
-ok 70 - longest ancestor: /foo/bar foo => -1
+ok 48 - longest ancestor: / / => -1
+ok 49 - longest ancestor: /foo / => 0
+ok 50 - longest ancestor: /foo /fo => -1
+ok 51 - longest ancestor: /foo /foo => -1
+ok 52 - longest ancestor: /foo /bar => -1
+ok 53 - longest ancestor: /foo /foo/bar => -1
+ok 54 - longest ancestor: /foo /foo:/bar => -1
+ok 55 - longest ancestor: /foo /:/foo:/bar => 0
+ok 56 - longest ancestor: /foo /foo:/:/bar => 0
+ok 57 - longest ancestor: /foo /:/bar:/foo => 0
+ok 58 - longest ancestor: /foo/bar / => 0
+ok 59 - longest ancestor: /foo/bar /fo => -1
+ok 60 - longest ancestor: /foo/bar /foo => 4
+ok 61 - longest ancestor: /foo/bar /foo/ba => -1
+ok 62 - longest ancestor: /foo/bar /:/fo => 0
+ok 63 - longest ancestor: /foo/bar /foo:/foo/ba => 4
+ok 64 - longest ancestor: /foo/bar /bar => -1
+ok 65 - longest ancestor: /foo/bar /fo => -1
+ok 66 - longest ancestor: /foo/bar /foo:/bar => 4
+ok 67 - longest ancestor: /foo/bar /:/foo:/bar => 4
+ok 68 - longest ancestor: /foo/bar /foo:/:/bar => 4
+ok 69 - longest ancestor: /foo/bar /:/bar:/fo => 0
+ok 70 - longest ancestor: /foo/bar /:/bar => 0
 ok 71 - longest ancestor: /foo/bar /foo => 4
-ok 72 - longest ancestor: /foo/bar /foo/ => 4
-ok 73 - longest ancestor: /foo/bar /foo/ba => -1
-ok 74 - longest ancestor: /foo/bar /:/fo => 0
-ok 75 - longest ancestor: /foo/bar /foo:/foo/ba => 4
-ok 76 - longest ancestor: /foo/bar /bar => -1
-ok 77 - longest ancestor: /foo/bar /bar/ => -1
-ok 78 - longest ancestor: /foo/bar /fo: => -1
-ok 79 - longest ancestor: /foo/bar :/fo => -1
-ok 80 - longest ancestor: /foo/bar /foo:/bar/ => 4
-ok 81 - longest ancestor: /foo/bar /:/foo:/bar/ => 4
-ok 82 - longest ancestor: /foo/bar /foo:/:/bar/ => 4
-ok 83 - longest ancestor: /foo/bar /:/bar/:/fo => 0
-ok 84 - longest ancestor: /foo/bar /:/bar/ => 0
-ok 85 - longest ancestor: /foo/bar .:/foo/. => 4
-ok 86 - longest ancestor: /foo/bar .:/foo/.:.: => 4
-ok 87 - longest ancestor: /foo/bar /foo/./:.:/bar => 4
-ok 88 - longest ancestor: /foo/bar .:/bar => -1
-ok 89 - strip_path_suffix
-# passed all 89 test(s)
-1..89
+ok 72 - longest ancestor: /foo/bar /foo:/bar => 4
+ok 73 - longest ancestor: /foo/bar /bar => -1
+ok 74 - strip_path_suffix
+ok 75 - absolute path rejects the empty string
+ok 76 - real path rejects the empty string
+ok 77 - real path works on absolute paths 1
+ok 78 - real path works on absolute paths 2
+ok 79 - real path removes extra leading slashes
+ok 80 - real path removes other extra slashes
+ok 81 - real path works on symlinks
+ok 82 - prefix_path works with absolute paths to work tree symlinks
+ok 83 - prefix_path works with only absolute path to work tree
+ok 84 - prefix_path rejects absolute path to dir with same beginning as work tree
+ok 85 - prefix_path works with absolute path to a symlink to work tree having  same beginning as work tree
+ok 86 - relative path: /foo/a/b/c/ /foo/a/b/ => c/
+ok 87 - relative path: /foo/a/b/c/ /foo/a/b => c/
+ok 88 - relative path: /foo/a//b//c/ ///foo/a/b// => c/
+ok 89 - relative path: /foo/a/b /foo/a/b => ./
+ok 90 - relative path: /foo/a/b/ /foo/a/b => ./
+ok 91 - relative path: /foo/a /foo/a/b => ../
+ok 92 - relative path: / /foo/a/b/ => ../../../
+ok 93 - relative path: /foo/a/c /foo/a/b/ => ../c
+ok 94 - relative path: /foo/a/c /foo/a/b => ../c
+ok 95 - relative path: /foo/x/y /foo/a/b/ => ../../x/y
+ok 96 - relative path: /foo/a/b <empty> => /foo/a/b
+ok 97 - relative path: /foo/a/b <null> => /foo/a/b
+ok 98 - relative path: foo/a/b/c/ foo/a/b/ => c/
+ok 99 - relative path: foo/a/b/c/ foo/a/b => c/
+ok 100 - relative path: foo/a/b//c foo/a//b => c
+ok 101 - relative path: foo/a/b/ foo/a/b/ => ./
+ok 102 - relative path: foo/a/b/ foo/a/b => ./
+ok 103 - relative path: foo/a foo/a/b => ../
+ok 104 - relative path: foo/x/y foo/a/b => ../../x/y
+ok 105 - relative path: foo/a/c foo/a/b => ../c
+ok 106 - relative path: foo/a/b /foo/x/y => foo/a/b
+ok 107 - relative path: /foo/a/b foo/x/y => /foo/a/b
+ok 108 # skip relative path: d:/a/b D:/a/c => ../b (missing MINGW)
+ok 109 # skip relative path: C:/a/b D:/a/c => C:/a/b (missing MINGW)
+ok 110 - relative path: foo/a/b <empty> => foo/a/b
+ok 111 - relative path: foo/a/b <null> => foo/a/b
+ok 112 - relative path: <empty> /foo/a/b => ./
+ok 113 - relative path: <empty> <empty> => ./
+ok 114 - relative path: <empty> <null> => ./
+ok 115 - relative path: <null> <empty> => ./
+ok 116 - relative path: <null> <null> => ./
+ok 117 - relative path: <null> /foo/a/b => ./
+ok 118 - git-path A=B info/grafts => .git/info/grafts
+ok 119 - git-path GIT_GRAFT_FILE=foo info/grafts => foo
+ok 120 - git-path GIT_GRAFT_FILE=foo info/////grafts => foo
+ok 121 - git-path GIT_INDEX_FILE=foo index => foo
+ok 122 - git-path GIT_INDEX_FILE=foo index/foo => .git/index/foo
+ok 123 - git-path GIT_INDEX_FILE=foo index2 => .git/index2
+ok 124 - setup fake objects directory foo
+ok 125 - git-path GIT_OBJECT_DIRECTORY=foo objects => foo
+ok 126 - git-path GIT_OBJECT_DIRECTORY=foo objects/foo => foo/foo
+ok 127 - git-path GIT_OBJECT_DIRECTORY=foo objects2 => .git/objects2
+ok 128 - setup common repository
+ok 129 - git-path GIT_COMMON_DIR=bar index => .git/index
+ok 130 - git-path GIT_COMMON_DIR=bar HEAD => .git/HEAD
+ok 131 - git-path GIT_COMMON_DIR=bar logs/HEAD => .git/logs/HEAD
+ok 132 - git-path GIT_COMMON_DIR=bar objects => bar/objects
+ok 133 - git-path GIT_COMMON_DIR=bar objects/bar => bar/objects/bar
+ok 134 - git-path GIT_COMMON_DIR=bar info/exclude => bar/info/exclude
+ok 135 - git-path GIT_COMMON_DIR=bar info/grafts => bar/info/grafts
+ok 136 - git-path GIT_COMMON_DIR=bar info/sparse-checkout => .git/info/sparse-checkout
+ok 137 - git-path GIT_COMMON_DIR=bar remotes/bar => bar/remotes/bar
+ok 138 - git-path GIT_COMMON_DIR=bar branches/bar => bar/branches/bar
+ok 139 - git-path GIT_COMMON_DIR=bar logs/refs/heads/master => bar/logs/refs/heads/master
+ok 140 - git-path GIT_COMMON_DIR=bar refs/heads/master => bar/refs/heads/master
+ok 141 - git-path GIT_COMMON_DIR=bar hooks/me => bar/hooks/me
+ok 142 - git-path GIT_COMMON_DIR=bar config => bar/config
+ok 143 - git-path GIT_COMMON_DIR=bar packed-refs => bar/packed-refs
+ok 144 - git-path GIT_COMMON_DIR=bar shallow => bar/shallow
+# passed all 144 test(s)
+1..144
 *** t0061-run-command.sh ***
 ok 1 - start_command reports ENOENT
 ok 2 - run_command can run a command
 ok 3 - run_command reports EACCES
-# passed all 3 test(s)
-1..3
+ok 4 - unreadable directory in PATH
+# passed all 4 test(s)
+1..4
+*** t0062-revision-walking.sh ***
+ok 1 - setup
+ok 2 - revision walking can be done twice
+# passed all 2 test(s)
+1..2
+*** t0063-string-list.sh ***
+ok 1 - split foo:bar:baz at :, max -1
+ok 2 - split foo:bar:baz at :, max 0
+ok 3 - split foo:bar:baz at :, max 1
+ok 4 - split foo:bar:baz at :, max 2
+ok 5 - split foo:bar: at :, max -1
+ok 6 - split  at :, max -1
+ok 7 - split : at :, max -1
+ok 8 - test filter_string_list
+ok 9 - test remove_duplicates
+# passed all 9 test(s)
+1..9
+*** t0064-sha1-array.sh ***
+ok 1 - ordered enumeration
+ok 2 - ordered enumeration with duplicate suppression
+ok 3 - lookup
+ok 4 - lookup non-existing entry
+ok 5 - lookup with duplicates
+ok 6 - lookup non-existing entry with duplicates
+ok 7 - lookup with almost duplicate values
+ok 8 - lookup with single duplicate value
+# passed all 8 test(s)
+1..8
 *** t0070-fundamental.sh ***
 ok 1 - character classes (isspace, isalpha etc.)
 ok 2 - mktemp to nonexistent directory prints filename
 ok 3 - mktemp to unwritable directory prints filename
-# passed all 3 test(s)
-1..3
-*** t0080-vcs-svn.sh ***
-ok 1 - obj pool: store data
-ok 2 - obj pool: NULL is offset ~0
-ok 3 - obj pool: out-of-bounds access
-ok 4 - obj pool: high-water mark
-ok 5 - string pool
-ok 6 - treap sort
-# passed all 6 test(s)
-1..6
+ok 4 - git_mkstemps_mode does not fail if fd 0 is not open
+ok 5 - check for a bug in the regex routines
+# passed all 5 test(s)
+1..5
 *** t0081-line-buffer.sh ***
 ok 1 - hello world
 ok 2 - 0-length read, send along greeting
@@ -491,26 +1250,37 @@
 # passed all 8 test(s)
 1..8
 *** t0090-cache-tree.sh ***
-not ok 1 - initial commit has cache-tree # TODO known breakage
+ok 1 - initial commit has cache-tree
 ok 2 - read-tree HEAD establishes cache-tree
 ok 3 - git-add invalidates cache-tree
-ok 4 - update-index invalidates cache-tree
-ok 5 - write-tree establishes cache-tree
-ok 6 - test-scrap-cache-tree works
-ok 7 - second commit has cache-tree
-ok 8 - reset --hard gives cache-tree
-ok 9 - reset --hard without index gives cache-tree
-not ok 10 - checkout gives cache-tree # TODO known breakage
-# still have 2 known breakage(s)
-# passed all remaining 8 test(s)
-1..10
+ok 4 - git-add in subdir invalidates cache-tree
+ok 5 - git-add in subdir does not invalidate sibling cache-tree
+ok 6 - update-index invalidates cache-tree
+ok 7 - write-tree establishes cache-tree
+ok 8 - test-scrap-cache-tree works
+ok 9 - second commit has cache-tree
+ok 10 - commit --interactive gives cache-tree on partial commit
+ok 11 - commit in child dir has cache-tree
+ok 12 - reset --hard gives cache-tree
+ok 13 - reset --hard without index gives cache-tree
+ok 14 - checkout gives cache-tree
+ok 15 - checkout -b gives cache-tree
+ok 16 - checkout -B gives cache-tree
+ok 17 - merge --ff-only maintains cache-tree
+ok 18 - merge maintains cache-tree
+ok 19 - partial commit gives cache-tree
+ok 20 - no phantom error when switching trees
+ok 21 - switching trees does not invalidate shared index
+# passed all 21 test(s)
+1..21
 *** t0100-previous.sh ***
 ok 1 - branch -d @{-1}
 ok 2 - branch -d @{-12} when there is not enough switches yet
 ok 3 - merge @{-1}
-ok 4 - merge @{-1} when there is not enough switches yet
-# passed all 4 test(s)
-1..4
+ok 4 - merge @{-1}~1
+ok 5 - merge @{-100} before checking out that many branches yet
+# passed all 5 test(s)
+1..5
 *** t0101-at-syntax.sh ***
 ok 1 - setup
 ok 2 - @{0} shows current
@@ -522,6 +1292,20 @@
 ok 8 - complain about total nonsense
 # passed all 8 test(s)
 1..8
+*** t0110-urlmatch-normalization.sh ***
+ok 1 - url scheme
+ok 2 - url authority
+ok 3 - url port checks
+ok 4 - url port normalization
+ok 5 - url general escapes
+ok 6 - url high-bit escapes
+ok 7 - url utf-8 escapes
+ok 8 - url username/password escapes
+ok 9 - url normalized lengths
+ok 10 - url . and .. segments
+ok 11 - url equivalents
+# passed all 11 test(s)
+1..11
 *** t0200-gettext-basic.sh ***
 # lib-gettext: Found 'is_IS.UTF-8' as an is_IS UTF-8 locale
 # lib-gettext: Found 'is_IS.ISO8859-1' as an is_IS ISO-8859-1 locale
@@ -559,11 +1343,18 @@
 *** t0202-gettext-perl.sh ***
 # lib-gettext: Found 'is_IS.UTF-8' as an is_IS UTF-8 locale
 # lib-gettext: Found 'is_IS.ISO8859-1' as an is_IS ISO-8859-1 locale
-# run 1: Perl Git::I18N API ($(PERL) $(@D)/t/t0202/test.pl)
+# run 0: Perl Git::I18N API (perl $(@D)/t/t0202/test.pl)
 1..8
-# test_external test Perl Git::I18N API failed: $(PERL) $(@D)/t/t0202/test.pl
-# test_external_without_stderr test no stderr: Perl Git::I18N API failed: $(PERL) $(@D)/t/t0202/test.pl: 
-make[3]: [t0202-gettext-perl.sh] Error 1 (ignored)
+ok 1 - Testing Git::I18N with NO Perl gettext library
+ok 2 - Git::I18N is located at $(@D)/t/../perl/blib/lib/Git/I18N.pm
+ok 3 - sanity: Git::I18N has 1 export(s)
+ok 4 - sanity: Git::I18N exports everything by default
+ok 5 - sanity: __ has a $ prototype
+ok 6 - Passing a string through __() in the C locale works
+ok 7 - Without a gettext library + <C> locale <TEST: A Perl test string> turns into <TEST: A Perl test string>
+ok 8 - Without a gettext library + <is> locale <TEST: A Perl test string> turns into <TEST: A Perl test string>
+# test_external test Perl Git::I18N API was ok
+# test_external_without_stderr test no stderr: Perl Git::I18N API was ok
 *** t0203-gettext-setlocale-sanity.sh ***
 # lib-gettext: Found 'is_IS.UTF-8' as an is_IS UTF-8 locale
 # lib-gettext: Found 'is_IS.ISO8859-1' as an is_IS ISO-8859-1 locale
@@ -577,14 +1368,14 @@
 ok 1 - gettext: Emitting UTF-8 from our UTF-8 *.mo files / Icelandic
 ok 2 - gettext: Emitting UTF-8 from our UTF-8 *.mo files / Runes
 ok 3 - gettext: Emitting ISO-8859-1 from our UTF-8 *.mo files / Icelandic
-ok 4 - gettext: Emitting ISO-8859-1 from our UTF-8 *.mo files / Runes
-not ok - 5 gettext: Fetching a UTF-8 msgid -> UTF-8
+ok 4 - gettext: impossible ISO-8859-1 output
+not ok 5 - gettext: Fetching a UTF-8 msgid -> UTF-8
 #	
 #	    printf "TILRAUN: ‚einfaldar‘ og „tvöfaldar“ gæsalappir" >expect &&
 #	    LANGUAGE=is LC_ALL="$is_IS_locale" gettext "TEST: ‘single’ and “double” quotes" >actual &&
 #	    test_cmp expect actual
 #	
-not ok - 6 gettext: Fetching a UTF-8 msgid -> ISO-8859-1
+not ok 6 - gettext: Fetching a UTF-8 msgid -> ISO-8859-1
 #	
 #	    LANGUAGE=is LC_ALL="$is_IS_iso_locale" gettext "TEST: ‘single’ and “double” quotes" >actual &&
 #	    grep "einfaldar" actual &&
@@ -624,8 +1415,9 @@
 ok 17 - do not match configured credential
 ok 18 - pull username from config
 ok 19 - http paths can be part of context
-# passed all 19 test(s)
-1..19
+ok 20 - helpers can abort the process
+# passed all 20 test(s)
+1..20
 *** t0301-credential-cache.sh ***
 ok 1 - helper (cache) has no existing data
 ok 2 - helper (cache) stores password
@@ -653,13 +1445,42 @@
 ok 9 - helper (store) can store multiple users
 ok 10 - helper (store) can forget user
 ok 11 - helper (store) remembers other user
-# passed all 11 test(s)
-1..11
+ok 12 - when xdg file does not exist, xdg file not created
+ok 13 - setup xdg file
+ok 14 - helper (store) has no existing data
+ok 15 - helper (store) stores password
+ok 16 - helper (store) can retrieve password
+ok 17 - helper (store) requires matching protocol
+ok 18 - helper (store) requires matching host
+ok 19 - helper (store) requires matching username
+ok 20 - helper (store) requires matching path
+ok 21 - helper (store) can forget host
+ok 22 - helper (store) can store multiple users
+ok 23 - helper (store) can forget user
+ok 24 - helper (store) remembers other user
+ok 25 - when xdg file exists, home file not created
+ok 26 - setup custom xdg file
+ok 27 - helper (store) has no existing data
+ok 28 - helper (store) stores password
+ok 29 - helper (store) can retrieve password
+ok 30 - helper (store) requires matching protocol
+ok 31 - helper (store) requires matching host
+ok 32 - helper (store) requires matching username
+ok 33 - helper (store) requires matching path
+ok 34 - helper (store) can forget host
+ok 35 - helper (store) can store multiple users
+ok 36 - helper (store) can forget user
+ok 37 - helper (store) remembers other user
+ok 38 - if custom xdg file exists, home and xdg files not created
+ok 39 - get: use home file if both home and xdg files have matches
+ok 40 - get: use xdg file if home file has no matches
+ok 41 - get: use xdg file if home file is unreadable
+ok 42 - store: if both xdg and home files exist, only store in home file
+ok 43 - erase: erase matching credentials from both xdg and home files
+# passed all 43 test(s)
+1..43
 *** t0303-credential-external.sh ***
-# skipping external helper tests (set GIT_TEST_CREDENTIAL_HELPER)
-# skipping external helper timeout tests
-# passed all 0 test(s)
-1..0
+1..0 # SKIP used to test external credential helpers
 *** t1000-read-tree-m-3way.sh ***
 ok 1 - adding test file NN and Z/NN
 ok 2 - adding test file ND and Z/ND
@@ -831,70 +1652,125 @@
 ok 1 - setup
 ok 2 - reset should work
 ok 3 - reset should remove remnants from a failed merge
-ok 4 - Porcelain reset should remove remnants too
-ok 5 - Porcelain checkout -f should remove remnants too
-ok 6 - Porcelain checkout -f HEAD should remove remnants too
-# passed all 6 test(s)
-1..6
+ok 4 - two-way reset should remove remnants too
+ok 5 - Porcelain reset should remove remnants too
+ok 6 - Porcelain checkout -f should remove remnants too
+ok 7 - Porcelain checkout -f HEAD should remove remnants too
+# passed all 7 test(s)
+1..7
 *** t1006-cat-file.sh ***
 ok 1 - setup
 ok 2 - blob exists
 ok 3 - Type of blob is correct
 ok 4 - Size of blob is correct
-ok 5 - Content of blob is correct
-ok 6 - Pretty content of blob is correct
-ok 7 - --batch output of blob is correct
-ok 8 - --batch-check output of blob is correct
-ok 9 - tree exists
-ok 10 - Type of tree is correct
-ok 11 - Size of tree is correct
-ok 12 - Pretty content of tree is correct
-ok 13 - --batch-check output of tree is correct
-ok 14 - commit exists
-ok 15 - Type of commit is correct
-ok 16 - Size of commit is correct
-ok 17 - Content of commit is correct
-ok 18 - Pretty content of commit is correct
-ok 19 - --batch output of commit is correct
-ok 20 - --batch-check output of commit is correct
-ok 21 - tag exists
-ok 22 - Type of tag is correct
-ok 23 - Size of tag is correct
-ok 24 - Content of tag is correct
-ok 25 - Pretty content of tag is correct
-ok 26 - --batch output of tag is correct
-ok 27 - --batch-check output of tag is correct
-ok 28 - Reach a blob from a tag pointing to it
-ok 29 - Passing -t with --batch fails
-ok 30 - Passing --batch with -t fails
-ok 31 - Passing -s with --batch fails
-ok 32 - Passing --batch with -s fails
-ok 33 - Passing -e with --batch fails
-ok 34 - Passing --batch with -e fails
-ok 35 - Passing -p with --batch fails
-ok 36 - Passing --batch with -p fails
-ok 37 - Passing <type> with --batch fails
-ok 38 - Passing --batch with <type> fails
-ok 39 - Passing sha1 with --batch fails
-ok 40 - Passing -t with --batch-check fails
-ok 41 - Passing --batch-check with -t fails
-ok 42 - Passing -s with --batch-check fails
-ok 43 - Passing --batch-check with -s fails
-ok 44 - Passing -e with --batch-check fails
-ok 45 - Passing --batch-check with -e fails
-ok 46 - Passing -p with --batch-check fails
-ok 47 - Passing --batch-check with -p fails
-ok 48 - Passing <type> with --batch-check fails
-ok 49 - Passing --batch-check with <type> fails
-ok 50 - Passing sha1 with --batch-check fails
-ok 51 - --batch-check for a non-existent named object
-ok 52 - --batch-check for a non-existent hash
-ok 53 - --batch for an existent and a non-existent hash
-ok 54 - --batch-check for an emtpy line
-ok 55 - --batch with multiple sha1s gives correct format
-ok 56 - --batch-check with multiple sha1s gives correct format
-# passed all 56 test(s)
-1..56
+ok 5 - Type of blob is correct using --allow-unknown-type
+ok 6 - Size of blob is correct using --allow-unknown-type
+ok 7 - Content of blob is correct
+ok 8 - Pretty content of blob is correct
+ok 9 - --batch output of blob is correct
+ok 10 - --batch-check output of blob is correct
+ok 11 - custom --batch-check format
+ok 12 - --batch-check with %(rest)
+ok 13 - --batch without type (blob)
+ok 14 - --batch without size (blob)
+ok 15 - --batch-check without %(rest) considers whole line
+ok 16 - tree exists
+ok 17 - Type of tree is correct
+ok 18 - Size of tree is correct
+ok 19 - Type of tree is correct using --allow-unknown-type
+ok 20 - Size of tree is correct using --allow-unknown-type
+ok 21 - Pretty content of tree is correct
+ok 22 - --batch-check output of tree is correct
+ok 23 - custom --batch-check format
+ok 24 - --batch-check with %(rest)
+ok 25 - commit exists
+ok 26 - Type of commit is correct
+ok 27 - Size of commit is correct
+ok 28 - Type of commit is correct using --allow-unknown-type
+ok 29 - Size of commit is correct using --allow-unknown-type
+ok 30 - Content of commit is correct
+ok 31 - Pretty content of commit is correct
+ok 32 - --batch output of commit is correct
+ok 33 - --batch-check output of commit is correct
+ok 34 - custom --batch-check format
+ok 35 - --batch-check with %(rest)
+ok 36 - --batch without type (commit)
+ok 37 - --batch without size (commit)
+ok 38 - tag exists
+ok 39 - Type of tag is correct
+ok 40 - Size of tag is correct
+ok 41 - Type of tag is correct using --allow-unknown-type
+ok 42 - Size of tag is correct using --allow-unknown-type
+ok 43 - Content of tag is correct
+ok 44 - Pretty content of tag is correct
+ok 45 - --batch output of tag is correct
+ok 46 - --batch-check output of tag is correct
+ok 47 - custom --batch-check format
+ok 48 - --batch-check with %(rest)
+ok 49 - --batch without type (tag)
+ok 50 - --batch without size (tag)
+ok 51 - Reach a blob from a tag pointing to it
+ok 52 - Passing -t with --batch fails
+ok 53 - Passing --batch with -t fails
+ok 54 - Passing -s with --batch fails
+ok 55 - Passing --batch with -s fails
+ok 56 - Passing -e with --batch fails
+ok 57 - Passing --batch with -e fails
+ok 58 - Passing -p with --batch fails
+ok 59 - Passing --batch with -p fails
+ok 60 - Passing <type> with --batch fails
+ok 61 - Passing --batch with <type> fails
+ok 62 - Passing sha1 with --batch fails
+ok 63 - Passing -t with --batch-check fails
+ok 64 - Passing --batch-check with -t fails
+ok 65 - Passing -s with --batch-check fails
+ok 66 - Passing --batch-check with -s fails
+ok 67 - Passing -e with --batch-check fails
+ok 68 - Passing --batch-check with -e fails
+ok 69 - Passing -p with --batch-check fails
+ok 70 - Passing --batch-check with -p fails
+ok 71 - Passing <type> with --batch-check fails
+ok 72 - Passing --batch-check with <type> fails
+ok 73 - Passing sha1 with --batch-check fails
+ok 74 - Passing -t with --follow-symlinks fails
+ok 75 - Passing -s with --follow-symlinks fails
+ok 76 - Passing -e with --follow-symlinks fails
+ok 77 - Passing -p with --follow-symlinks fails
+ok 78 - --batch-check for a non-existent named object
+ok 79 - --batch-check for a non-existent hash
+ok 80 - --batch for an existent and a non-existent hash
+ok 81 - --batch-check for an emtpy line
+ok 82 - empty --batch-check notices missing object
+ok 83 - --batch with multiple sha1s gives correct format
+ok 84 - --batch-check with multiple sha1s gives correct format
+ok 85 - setup blobs which are likely to delta
+ok 86 - confirm that neither loose blob is a delta
+ok 87 - %(deltabase) reports packed delta bases
+ok 88 - Type of broken object is correct
+ok 89 - Size of broken object is correct
+ok 90 - Type of broken object is correct when type is large
+ok 91 - Size of large broken object is correct when type is large
+ok 92 - prep for symlink tests
+ok 93 - git cat-file --batch-check --follow-symlinks works for non-links
+ok 94 - git cat-file --batch-check --follow-symlinks works for in-repo, same-dir links
+ok 95 - git cat-file --batch-check --follow-symlinks works for in-repo, links to dirs
+ok 96 - git cat-file --batch-check --follow-symlinks works for broken in-repo, same-dir links
+ok 97 - git cat-file --batch-check --follow-symlinks works for same-dir links-to-links
+ok 98 - git cat-file --batch-check --follow-symlinks works for parent-dir links
+ok 99 - git cat-file --batch-check --follow-symlinks works for .. links
+ok 100 - git cat-file --batch-check --follow-symlinks works for ../.. links
+ok 101 - git cat-file --batch-check --follow-symlinks works for dir/ links
+ok 102 - git cat-file --batch-check --follow-symlinks works for dir/subdir links
+ok 103 - git cat-file --batch-check --follow-symlinks works for dir ->subdir links
+ok 104 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks
+ok 105 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in dirs
+ok 106 - git cat-file --batch-check --follow-symlinks works for out-of-repo symlinks in subdirs
+ok 107 - git cat-file --batch-check --follow-symlinks works for symlinks with internal ..
+ok 108 - git cat-file --batch-check --follow-symlink breaks loops
+ok 109 - git cat-file --batch --follow-symlink returns correct sha and mode
+ok 110 - cat-file --batch-all-objects shows all objects
+# passed all 110 test(s)
+1..110
 *** t1007-hash-object.sh ***
 ok 1 - multiple '--stdin's are rejected
 ok 2 - Can't use --stdin and --stdin-paths together
@@ -925,8 +1801,12 @@
 ok 27 - corrupt tree
 ok 28 - corrupt commit
 ok 29 - corrupt tag
-# passed all 29 test(s)
-1..29
+ok 30 - hash-object complains about bogus type name
+ok 31 - hash-object complains about truncated type name
+ok 32 - --literally
+ok 33 - --literally with extra-long type
+# passed all 33 test(s)
+1..33
 *** t1008-read-tree-overlay.sh ***
 ok 1 - setup
 ok 2 - multi-read
@@ -969,8 +1849,10 @@
 ok 17 - index removal and worktree narrowing at the same time
 ok 18 - read-tree --reset removes outside worktree
 ok 19 - print errors when failed to update worktree
-# passed all 19 test(s)
-1..19
+ok 20 - checkout without --ignore-skip-worktree-bits
+ok 21 - checkout with --ignore-skip-worktree-bits
+# passed all 21 test(s)
+1..21
 *** t1012-read-tree-df.sh ***
 ok 1 - setup
 ok 2 - 3-way (1)
@@ -979,13 +1861,67 @@
 ok 5 - 2-way (1)
 # passed all 5 test(s)
 1..5
-*** t1013-loose-object-format.sh ***
-ok 1 - setup
-ok 2 - read standard-format loose objects
-ok 3 - read experimental-format loose objects
-ok 4 - read standard-format objects deflated with smaller window buffer
-# passed all 4 test(s)
-1..4
+*** t1013-read-tree-submodule.sh ***
+ok 1 - git read-tree -u -m: added submodule creates empty directory
+ok 2 - git read-tree -u -m: added submodule leaves existing empty directory alone
+ok 3 - git read-tree -u -m: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git read-tree -u -m: replace tracked file with submodule creates empty directory
+ok 5 - git read-tree -u -m: replace directory with submodule
+ok 6 - git read-tree -u -m: removed submodule leaves submodule directory and its contents in place
+ok 7 - git read-tree -u -m: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git read-tree -u -m: replace submodule with a directory must fail
+ok 9 - git read-tree -u -m: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git read-tree -u -m: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git read-tree -u -m: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git read-tree -u -m: modified submodule does not update submodule work tree
+ok 13 - git read-tree -u -m: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git read-tree -u -m: modified submodule does not update submodule work tree from invalid commit
+ok 15 - git read-tree -u --reset: added submodule creates empty directory
+ok 16 - git read-tree -u --reset: added submodule leaves existing empty directory alone
+ok 17 - git read-tree -u --reset: added submodule does remove untracked unignored file with same name when forced
+ok 18 - git read-tree -u --reset: replace tracked file with submodule creates empty directory
+ok 19 - git read-tree -u --reset: replace directory with submodule
+ok 20 - git read-tree -u --reset: removed submodule leaves submodule directory and its contents in place
+ok 21 - git read-tree -u --reset: removed submodule leaves submodule containing a .git directory alone
+not ok 22 - git read-tree -u --reset: replace submodule with a directory must fail # TODO known breakage
+not ok 23 - git read-tree -u --reset: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 24 - git read-tree -u --reset: replace submodule with a file must fail # TODO known breakage
+not ok 25 - git read-tree -u --reset: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - git read-tree -u --reset: modified submodule does not update submodule work tree
+ok 27 - git read-tree -u --reset: modified submodule does not update submodule work tree to invalid commit
+ok 28 - git read-tree -u --reset: modified submodule does not update submodule work tree from invalid commit
+# still have 6 known breakage(s)
+# passed all remaining 22 test(s)
+1..28
+*** t1014-read-tree-confusing.sh ***
+ok 1 - create base tree
+ok 2 - enable core.protectHFS for rejection tests
+ok 3 - enable core.protectNTFS for rejection tests
+ok 4 - reject . at end of path
+ok 5 - reject . as subtree
+ok 6 - reject .. at end of path
+ok 7 - reject .. as subtree
+ok 8 - reject .git at end of path
+ok 9 - reject .git as subtree
+ok 10 - reject .GIT at end of path
+ok 11 - reject .GIT as subtree
+ok 12 - reject {u200c}.Git at end of path
+ok 13 - reject {u200c}.Git as subtree
+ok 14 - reject .gI{u200c}T at end of path
+ok 15 - reject .gI{u200c}T as subtree
+ok 16 - reject .GiT{u200c} at end of path
+ok 17 - reject .GiT{u200c} as subtree
+ok 18 - reject git~1 at end of path
+ok 19 - reject git~1 as subtree
+ok 20 - reject .git.{space} at end of path
+ok 21 - reject .git.{space} as subtree
+ok 22 - reject backslashes at end of path
+ok 23 - reject backslashes as subtree
+ok 24 - reject backslashes2 at end of path
+ok 25 - reject backslashes2 as subtree
+ok 26 - utf-8 paths allowed with core.protectHFS off
+# passed all 26 test(s)
+1..26
 *** t1020-subdirectory.sh ***
 ok 1 - setup
 ok 2 - update-index and ls-files
@@ -999,10 +1935,11 @@
 ok 10 - GIT_PREFIX for !alias
 ok 11 - GIT_PREFIX for built-ins
 ok 12 - no file/rev ambiguity check inside .git
-ok 13 - no file/rev ambiguity check inside a bare repo
-ok 14 - detection should not be fooled by a symlink
-# passed all 14 test(s)
-1..14
+ok 13 - no file/rev ambiguity check inside a bare repo (explicit GIT_DIR)
+ok 14 - no file/rev ambiguity check inside a bare repo
+ok 15 - detection should not be fooled by a symlink
+# passed all 15 test(s)
+1..15
 *** t1021-rerere-in-workdir.sh ***
 ok 1 - setup
 ok 2 - rerere in workdir
@@ -1015,15 +1952,69 @@
 ok 2 - add a large file or two
 ok 3 - checkout a large file
 ok 4 - packsize limit
-# passed all 4 test(s)
-1..4
+ok 5 - diff --raw
+ok 6 - diff --stat
+ok 7 - diff
+ok 8 - diff --cached
+ok 9 - hash-object
+ok 10 - cat-file a large file
+ok 11 - cat-file a large file from a tag
+ok 12 - git-show a large file
+ok 13 - index-pack
+ok 14 - repack
+ok 15 - pack-objects with large loose object
+ok 16 - tar achiving
+ok 17 - zip achiving, store only
+ok 18 - zip achiving, deflate
+ok 19 - fsck
+# passed all 19 test(s)
+1..19
+*** t1051-large-conversion.sh ***
+ok 1 - setup input tests
+ok 2 - autocrlf=true converts on input
+ok 3 - eol=crlf converts on input
+ok 4 - ident converts on input
+ok 5 - user-defined filters convert on input
+ok 6 - setup output tests
+ok 7 - autocrlf=true converts on output
+ok 8 - eol=crlf converts on output
+ok 9 - user-defined filters convert on output
+ok 10 - ident converts on output
+# passed all 10 test(s)
+1..10
+*** t1060-object-corruption.sh ***
+ok 1 - setup corrupt repo
+ok 2 - setup repo with missing object
+ok 3 - setup repo with misnamed object
+ok 4 - streaming a corrupt blob fails
+ok 5 - read-tree -u detects bit-errors in blobs
+ok 6 - read-tree -u detects missing objects
+ok 7 - clone --no-local --bare detects corruption
+ok 8 - clone --no-local --bare detects missing object
+ok 9 - clone --no-local --bare detects misnamed object
+ok 10 - clone --local detects corruption
+ok 11 - error detected during checkout leaves repo intact
+ok 12 - clone --local detects missing objects
+not ok 13 - clone --local detects misnamed objects # TODO known breakage
+# still have 1 known breakage(s)
+# passed all remaining 12 test(s)
+1..13
+*** t1090-sparse-checkout-scope.sh ***
+ok 1 - setup
+ok 2 - create feature branch
+ok 3 - perform sparse checkout of master
+ok 4 - merge feature branch into sparse checkout of master
+ok 5 - return to full checkout of master
+# passed all 5 test(s)
+1..5
 *** t1100-commit-tree-options.sh ***
 ok 1 - test preparation: write empty tree
 ok 2 - construct commit
 ok 3 - read commit
 ok 4 - compare commit
-# passed all 4 test(s)
-1..4
+ok 5 - flags and then non flags
+# passed all 5 test(s)
+1..5
 *** t1200-tutorial.sh ***
 ok 1 - blob
 ok 2 - blob 557db03
@@ -1080,79 +2071,99 @@
 ok 23 - multivar
 ok 24 - non-match
 ok 25 - non-match value
-ok 26 - ambiguous get
-ok 27 - get multivar
+ok 26 - multi-valued get returns final one
+ok 27 - multi-valued get-all returns all
 ok 28 - multivar replace
-ok 29 - ambiguous value
-ok 30 - ambiguous unset
-ok 31 - invalid unset
-ok 32 - multivar unset
-ok 33 - invalid key
-ok 34 - correct key
-ok 35 - hierarchical section
-ok 36 - hierarchical section value
-ok 37 - working --list
-ok 38 - --list without repo produces empty output
+ok 29 - ambiguous unset
+ok 30 - invalid unset
+ok 31 - multivar unset
+ok 32 - invalid key
+ok 33 - correct key
+ok 34 - hierarchical section
+ok 35 - hierarchical section value
+ok 36 - working --list
+ok 37 - --list without repo produces empty output
+ok 38 - --name-only --list
 ok 39 - --get-regexp
-ok 40 - --add
-ok 41 - get variable with no value
-ok 42 - get variable with empty value
-ok 43 - get-regexp variable with no value
-ok 44 - get-regexp --bool variable with no value
-ok 45 - get-regexp variable with empty value
-ok 46 - get bool variable with no value
-ok 47 - get bool variable with empty value
-ok 48 - no arguments, but no crash
-ok 49 - new section is partial match of another
-ok 50 - new variable inserts into proper section
-ok 51 - alternative GIT_CONFIG (non-existing file should fail)
-ok 52 - alternative GIT_CONFIG
-ok 53 - alternative GIT_CONFIG (--file)
-ok 54 - refer config from subdirectory
-ok 55 - --set in alternative GIT_CONFIG
-ok 56 - rename section
-ok 57 - rename succeeded
-ok 58 - rename non-existing section
-ok 59 - rename succeeded
-ok 60 - rename another section
-ok 61 - rename succeeded
-ok 62 - rename a section with a var on the same line
-ok 63 - rename succeeded
-ok 64 - remove section
-ok 65 - section was removed properly
-ok 66 - section ending
-ok 67 - numbers
-ok 68 - invalid unit
-ok 69 - bool
-ok 70 - invalid bool (--get)
-ok 71 - invalid bool (set)
-ok 72 - set --bool
-ok 73 - set --int
-ok 74 - get --bool-or-int
-ok 75 - set --bool-or-int
-ok 76 - set --path
-ok 77 - get --path
-ok 78 - get --path copes with unset $HOME
-ok 79 - quoting
-ok 80 - key with newline
-ok 81 - value with newline
-ok 82 - value continued on next line
-ok 83 - --null --list
-ok 84 - --null --get-regexp
-ok 85 - inner whitespace kept verbatim
-ok 86 - symlinked configuration
-ok 87 - nonexistent configuration
-ok 88 - symlink to nonexistent configuration
-ok 89 - check split_cmdline return
-ok 90 - git -c "key=value" support
-ok 91 - key sanity-checking
-ok 92 - git -c works with aliases of builtins
-ok 93 - git -c does not split values on equals
-ok 94 - git -c dies on bogus config
-ok 95 - git -c complains about empty key
-ok 96 - git -c complains about empty key and value
-# passed all 96 test(s)
-1..96
+ok 40 - --name-only --get-regexp
+ok 41 - --add
+ok 42 - get variable with no value
+ok 43 - get variable with empty value
+ok 44 - get-regexp variable with no value
+ok 45 - get-regexp --bool variable with no value
+ok 46 - get-regexp variable with empty value
+ok 47 - get bool variable with no value
+ok 48 - get bool variable with empty value
+ok 49 - no arguments, but no crash
+ok 50 - new section is partial match of another
+ok 51 - new variable inserts into proper section
+ok 52 - alternative --file (non-existing file should fail)
+ok 53 - alternative GIT_CONFIG
+ok 54 - alternative GIT_CONFIG (--file)
+ok 55 - alternative GIT_CONFIG (--file=-)
+ok 56 - setting a value in stdin is an error
+ok 57 - editing stdin is an error
+ok 58 - refer config from subdirectory
+ok 59 - refer config from subdirectory via --file
+ok 60 - --set in alternative file
+ok 61 - rename section
+ok 62 - rename succeeded
+ok 63 - rename non-existing section
+ok 64 - rename succeeded
+ok 65 - rename another section
+ok 66 - rename succeeded
+ok 67 - rename a section with a var on the same line
+ok 68 - rename succeeded
+ok 69 - renaming empty section name is rejected
+ok 70 - renaming to bogus section is rejected
+ok 71 - remove section
+ok 72 - section was removed properly
+ok 73 - section ending
+ok 74 - numbers
+ok 75 - --int is at least 64 bits
+ok 76 - invalid unit
+ok 77 - bool
+ok 78 - invalid bool (--get)
+ok 79 - invalid bool (set)
+ok 80 - set --bool
+ok 81 - set --int
+ok 82 - get --bool-or-int
+ok 83 - set --bool-or-int
+ok 84 - set --path
+ok 85 - get --path
+ok 86 - get --path copes with unset $HOME
+ok 87 - get --path barfs on boolean variable
+ok 88 - quoting
+ok 89 - key with newline
+ok 90 - value with newline
+ok 91 - value continued on next line
+ok 92 - --null --list
+ok 93 - --null --get-regexp
+ok 94 - inner whitespace kept verbatim
+ok 95 - symlinked configuration
+ok 96 - nonexistent configuration
+ok 97 - symlink to nonexistent configuration
+ok 98 - check split_cmdline return
+ok 99 - git -c "key=value" support
+ok 100 - git -c can represent empty string
+ok 101 - key sanity-checking
+ok 102 - git -c works with aliases of builtins
+ok 103 - git -c does not split values on equals
+ok 104 - git -c dies on bogus config
+ok 105 - git -c complains about empty key
+ok 106 - git -c complains about empty key and value
+ok 107 - git config --edit works
+ok 108 - git config --edit respects core.editor
+ok 109 - barf on syntax error
+ok 110 - barf on incomplete section header
+ok 111 - barf on incomplete string
+ok 112 - urlmatch
+not ok 113 - unsetting the last key in a section removes header # TODO known breakage
+not ok 114 - adding a key into an empty section reuses header # TODO known breakage
+ok 115 - preserves existing permissions
+# still have 2 known breakage(s)
+# passed all remaining 113 test(s)
+1..115
 *** t1301-shared-repo.sh ***
 ok 1 - shared = 0400 (faulty permission u-w)
 ok 2 - shared=1 does not clear bits preset by umask 002
@@ -1169,10 +2180,11 @@
 ok 13 - shared = 0666 (rw-rw-rw-) rw
 ok 14 - shared = 0664 (r--r--r--) ro
 ok 15 - shared = 0664 (rw-rw-r--) rw
-ok 16 - git reflog expire honors core.sharedRepository
-ok 17 - forced modes
-# passed all 17 test(s)
-1..17
+ok 16 - info/refs respects umask in unshared repo
+ok 17 - git reflog expire honors core.sharedRepository
+ok 18 - forced modes
+# passed all 18 test(s)
+1..18
 *** t1302-repo-version.sh ***
 ok 1 - setup
 ok 2 - gitdir selection on normal repos
@@ -1187,16 +2199,110 @@
 ok 3 - add key in different section
 ok 4 - make sure git config escapes section names properly
 ok 5 - do not crash on special long config line
-# passed all 5 test(s)
-1..5
+ok 6 - get many entries
+ok 7 - get many entries by regex
+ok 8 - add and replace one of many entries
+ok 9 - replace many entries
+ok 10 - unset many entries
+ok 11 - --add appends new value after existing empty value
+# passed all 11 test(s)
+1..11
 *** t1304-default-acl.sh ***
-Unable to use setfacl (output: 'File system doesn't support aclent_t style ACL's.
-See acl(5) for more information on ACL styles support by Solaris.'; return code: '2')
-ok 1 # skip Setup test repo (missing SETFACL)
-ok 2 # skip Objects creation does not break ACLs with restrictive umask (missing SETFACL)
-ok 3 # skip git gc does not break ACLs with restrictive umask (missing SETFACL)
-# passed all 3 test(s)
-1..3
+ok 1 - checking for a working acl setup
+ok 2 # skip Setup test repo (missing SETFACL)
+ok 3 # skip Objects creation does not break ACLs with restrictive umask (missing SETFACL)
+ok 4 # skip git gc does not break ACLs with restrictive umask (missing SETFACL)
+# passed all 4 test(s)
+1..4
+*** t1305-config-include.sh ***
+ok 1 - include file by absolute path
+ok 2 - include file by relative path
+ok 3 - chained relative paths
+ok 4 - include paths get tilde-expansion
+ok 5 - include options can still be examined
+ok 6 - listing includes option and expansion
+ok 7 - single file lookup does not expand includes by default
+ok 8 - single file list does not expand includes by default
+ok 9 - writing config file does not expand includes
+ok 10 - config modification does not affect includes
+ok 11 - missing include files are ignored
+ok 12 - absolute includes from command line work
+ok 13 - relative includes from command line fail
+ok 14 - absolute includes from blobs work
+ok 15 - relative includes from blobs fail
+ok 16 - absolute includes from stdin work
+ok 17 - relative includes from stdin line fail
+ok 18 - include cycles are detected
+# passed all 18 test(s)
+1..18
+*** t1306-xdg-files.sh ***
+ok 1 - read config: xdg file exists and ~/.gitconfig doesn't
+ok 2 - read config: xdg file exists and ~/.gitconfig exists
+ok 3 - read with --get: xdg file exists and ~/.gitconfig doesn't
+ok 4 - "$XDG_CONFIG_HOME overrides $HOME/.config/git
+ok 5 - read with --get: xdg file exists and ~/.gitconfig exists
+ok 6 - read with --list: xdg file exists and ~/.gitconfig doesn't
+ok 7 - read with --list: xdg file exists and ~/.gitconfig exists
+ok 8 - Setup
+ok 9 - Exclusion of a file in the XDG ignore file
+ok 10 - $XDG_CONFIG_HOME overrides $HOME/.config/git/ignore
+ok 11 - Exclusion in both XDG and local ignore files
+ok 12 - Exclusion in a non-XDG global ignore file
+ok 13 - Checking XDG ignore file when HOME is unset
+ok 14 - Checking attributes in the XDG attributes file
+ok 15 - Checking XDG attributes when HOME is unset
+ok 16 - $XDG_CONFIG_HOME overrides $HOME/.config/git/attributes
+ok 17 - Checking attributes in both XDG and local attributes files
+ok 18 - Checking attributes in a non-XDG global attributes file
+ok 19 - write: xdg file exists and ~/.gitconfig doesn't
+ok 20 - write: xdg file exists and ~/.gitconfig exists
+ok 21 - write: ~/.config/git/ exists and config file doesn't
+# passed all 21 test(s)
+1..21
+*** t1307-config-blob.sh ***
+ok 1 - create config blob
+ok 2 - list config blob contents
+ok 3 - fetch value from blob
+ok 4 - reading non-existing value from blob is an error
+ok 5 - reading from blob and file is an error
+ok 6 - reading from missing ref is an error
+ok 7 - reading from non-blob is an error
+ok 8 - setting a value in a blob is an error
+ok 9 - deleting a value in a blob is an error
+ok 10 - editing a blob is an error
+ok 11 - parse errors in blobs are properly attributed
+ok 12 - can parse blob ending with CR
+# passed all 12 test(s)
+1..12
+*** t1308-config-set.sh ***
+ok 1 - setup default config
+ok 2 - get value for a simple key
+ok 3 - get value for a key with value as an empty string
+ok 4 - get value for a key with value as NULL
+ok 5 - upper case key
+ok 6 - mixed case key
+ok 7 - key and value with mixed case
+ok 8 - key with case sensitive subsection
+ok 9 - key with case insensitive section header
+ok 10 - key with case insensitive section header & variable
+ok 11 - find value with misspelled key
+ok 12 - find value with the highest priority
+ok 13 - find integer value for a key
+ok 14 - find string value for a key
+ok 15 - check line error when NULL string is queried
+ok 16 - find integer if value is non parse-able
+ok 17 - find bool value for the entered key
+ok 18 - find multiple values
+ok 19 - find value from a configset
+ok 20 - find value with highest priority from a configset
+ok 21 - find value_list for a key from a configset
+ok 22 - proper error on non-existent files
+ok 23 - proper error on non-accessible files
+ok 24 - proper error on error in default config files
+ok 25 - proper error on error in custom config files
+ok 26 - check line errors for malformed values
+# passed all 26 test(s)
+1..26
 *** t1400-update-ref.sh ***
 ok 1 - setup
 ok 2 - create refs/heads/master
@@ -1209,45 +2315,156 @@
 ok 9 - create refs/heads/master (by HEAD)
 ok 10 - fail to delete refs/heads/master (by HEAD) with stale ref
 ok 11 - delete refs/heads/master (by HEAD)
-ok 12 - delete symref without dereference
-ok 13 - delete symref without dereference when the referred ref is packed
-ok 14 - (not) create HEAD with old sha1
-ok 15 - (not) prior created .git/refs/heads/master
-ok 16 - create HEAD
-ok 17 - (not) change HEAD with wrong SHA1
-ok 18 - (not) changed .git/refs/heads/master
-ok 19 - create refs/heads/master (logged by touch)
-ok 20 - update refs/heads/master (logged by touch)
-ok 21 - set refs/heads/master (logged by touch)
-ok 22 - verifying refs/heads/master's log
-ok 23 - enable core.logAllRefUpdates
-ok 24 - create refs/heads/master (logged by config)
-ok 25 - update refs/heads/master (logged by config)
-ok 26 - set refs/heads/master (logged by config)
-ok 27 - verifying refs/heads/master's log
-ok 28 - Query "[email protected]{May 25 2005}" (before history)
-ok 29 - Query [email protected]{2005-05-25} (before history)
-ok 30 - Query "[email protected]{May 26 2005 23:31:59}" (1 second before history)
-ok 31 - Query "[email protected]{May 26 2005 23:32:00}" (exactly history start)
-ok 32 - Query "[email protected]{May 26 2005 23:32:30}" (first non-creation change)
-ok 33 - Query "[email protected]{2005-05-26 23:33:01}" (middle of history with gap)
-ok 34 - Query "[email protected]{2005-05-26 23:38:00}" (middle of history)
-ok 35 - Query "[email protected]{2005-05-26 23:43:00}" (exact end of history)
-ok 36 - Query "[email protected]{2005-05-28}" (past end of history)
-ok 37 - creating initial files
-ok 38 - git commit logged updates
-ok 39 - git cat-file blob master:F (expect OTHER)
-ok 40 - git cat-file blob [email protected]{2005-05-26 23:30}:F (expect TEST)
-ok 41 - git cat-file blob [email protected]{2005-05-26 23:42}:F (expect OTHER)
-# passed all 41 test(s)
-1..41
+ok 12 - update-ref does not create reflogs by default
+ok 13 - update-ref creates reflogs with --create-reflog
+ok 14 - create refs/heads/master (by HEAD)
+ok 15 - pack refs
+ok 16 - move refs/heads/master (by HEAD)
+ok 17 - delete refs/heads/master (by HEAD) should remove both packed and loose refs/heads/master
+ok 18 - delete symref without dereference
+ok 19 - delete symref without dereference when the referred ref is packed
+ok 20 - update-ref -d is not confused by self-reference
+ok 21 - update-ref --no-deref -d can delete self-reference
+ok 22 - update-ref --no-deref -d can delete reference to bad ref
+ok 23 - (not) create HEAD with old sha1
+ok 24 - (not) prior created .git/refs/heads/master
+ok 25 - create HEAD
+ok 26 - (not) change HEAD with wrong SHA1
+ok 27 - (not) changed .git/refs/heads/master
+ok 28 - create refs/heads/master (logged by touch)
+ok 29 - update refs/heads/master (logged by touch)
+ok 30 - set refs/heads/master (logged by touch)
+ok 31 - verifying refs/heads/master's log
+ok 32 - enable core.logAllRefUpdates
+ok 33 - create refs/heads/master (logged by config)
+ok 34 - update refs/heads/master (logged by config)
+ok 35 - set refs/heads/master (logged by config)
+ok 36 - verifying refs/heads/master's log
+ok 37 - Query "[email protected]{May 25 2005}" (before history)
+ok 38 - Query [email protected]{2005-05-25} (before history)
+ok 39 - Query "[email protected]{May 26 2005 23:31:59}" (1 second before history)
+ok 40 - Query "[email protected]{May 26 2005 23:32:00}" (exactly history start)
+ok 41 - Query "[email protected]{May 26 2005 23:32:30}" (first non-creation change)
+ok 42 - Query "[email protected]{2005-05-26 23:33:01}" (middle of history with gap)
+ok 43 - Query "[email protected]{2005-05-26 23:38:00}" (middle of history)
+ok 44 - Query "[email protected]{2005-05-26 23:43:00}" (exact end of history)
+ok 45 - Query "[email protected]{2005-05-28}" (past end of history)
+ok 46 - creating initial files
+ok 47 - git commit logged updates
+ok 48 - git cat-file blob master:F (expect OTHER)
+ok 49 - git cat-file blob [email protected]{2005-05-26 23:30}:F (expect TEST)
+ok 50 - git cat-file blob [email protected]{2005-05-26 23:42}:F (expect OTHER)
+ok 51 - stdin test setup
+ok 52 - -z fails without --stdin
+ok 53 - stdin works with no input
+ok 54 - stdin fails on empty line
+ok 55 - stdin fails on only whitespace
+ok 56 - stdin fails on leading whitespace
+ok 57 - stdin fails on unknown command
+ok 58 - stdin fails on unbalanced quotes
+ok 59 - stdin fails on invalid escape
+ok 60 - stdin fails on junk after quoted argument
+ok 61 - stdin fails create with no ref
+ok 62 - stdin fails create with no new value
+ok 63 - stdin fails create with too many arguments
+ok 64 - stdin fails update with no ref
+ok 65 - stdin fails update with no new value
+ok 66 - stdin fails update with too many arguments
+ok 67 - stdin fails delete with no ref
+ok 68 - stdin fails delete with too many arguments
+ok 69 - stdin fails verify with too many arguments
+ok 70 - stdin fails option with unknown name
+ok 71 - stdin fails with duplicate refs
+ok 72 - stdin create ref works
+ok 73 - stdin does not create reflogs by default
+ok 74 - stdin creates reflogs with --create-reflog
+ok 75 - stdin succeeds with quoted argument
+ok 76 - stdin succeeds with escaped character
+ok 77 - stdin update ref creates with zero old value
+ok 78 - stdin update ref creates with empty old value
+ok 79 - stdin create ref works with path with space to blob
+ok 80 - stdin update ref fails with wrong old value
+ok 81 - stdin update ref fails with bad old value
+ok 82 - stdin create ref fails with bad new value
+ok 83 - stdin create ref fails with zero new value
+ok 84 - stdin update ref works with right old value
+ok 85 - stdin delete ref fails with wrong old value
+ok 86 - stdin delete ref fails with zero old value
+ok 87 - stdin update symref works option no-deref
+ok 88 - stdin delete symref works option no-deref
+ok 89 - stdin delete ref works with right old value
+ok 90 - stdin update/create/verify combination works
+ok 91 - stdin verify succeeds for correct value
+ok 92 - stdin verify succeeds for missing reference
+ok 93 - stdin verify treats no value as missing
+ok 94 - stdin verify fails for wrong value
+ok 95 - stdin verify fails for mistaken null value
+ok 96 - stdin verify fails for mistaken empty value
+ok 97 - stdin update refs works with identity updates
+ok 98 - stdin update refs fails with wrong old value
+ok 99 - stdin delete refs works with packed and loose refs
+ok 100 - stdin -z works on empty input
+ok 101 - stdin -z fails on empty line
+ok 102 - stdin -z fails on empty command
+ok 103 - stdin -z fails on only whitespace
+ok 104 - stdin -z fails on leading whitespace
+ok 105 - stdin -z fails on unknown command
+ok 106 - stdin -z fails create with no ref
+ok 107 - stdin -z fails create with no new value
+ok 108 - stdin -z fails create with too many arguments
+ok 109 - stdin -z fails update with no ref
+ok 110 - stdin -z fails update with too few args
+ok 111 - stdin -z emits warning with empty new value
+ok 112 - stdin -z fails update with no new value
+ok 113 - stdin -z fails update with no old value
+ok 114 - stdin -z fails update with too many arguments
+ok 115 - stdin -z fails delete with no ref
+ok 116 - stdin -z fails delete with no old value
+ok 117 - stdin -z fails delete with too many arguments
+ok 118 - stdin -z fails verify with too many arguments
+ok 119 - stdin -z fails verify with no old value
+ok 120 - stdin -z fails option with unknown name
+ok 121 - stdin -z fails with duplicate refs
+ok 122 - stdin -z create ref works
+ok 123 - stdin -z update ref creates with zero old value
+ok 124 - stdin -z update ref creates with empty old value
+ok 125 - stdin -z create ref works with path with space to blob
+ok 126 - stdin -z update ref fails with wrong old value
+ok 127 - stdin -z update ref fails with bad old value
+ok 128 - stdin -z create ref fails when ref exists
+ok 129 - stdin -z create ref fails with bad new value
+ok 130 - stdin -z create ref fails with empty new value
+ok 131 - stdin -z update ref works with right old value
+ok 132 - stdin -z delete ref fails with wrong old value
+ok 133 - stdin -z delete ref fails with zero old value
+ok 134 - stdin -z update symref works option no-deref
+ok 135 - stdin -z delete symref works option no-deref
+ok 136 - stdin -z delete ref works with right old value
+ok 137 - stdin -z update/create/verify combination works
+ok 138 - stdin -z verify succeeds for correct value
+ok 139 - stdin -z verify succeeds for missing reference
+ok 140 - stdin -z verify treats no value as missing
+ok 141 - stdin -z verify fails for wrong value
+ok 142 - stdin -z verify fails for mistaken null value
+ok 143 - stdin -z verify fails for mistaken empty value
+ok 144 - stdin -z update refs works with identity updates
+ok 145 - stdin -z update refs fails with wrong old value
+ok 146 - stdin -z delete refs works with packed and loose refs
+ok 147 - large transaction creating branches does not burst open file limit
+ok 148 - large transaction deleting branches does not burst open file limit
+# passed all 148 test(s)
+1..148
 *** t1401-symbolic-ref.sh ***
 ok 1 - symbolic-ref writes HEAD
 ok 2 - symbolic-ref reads HEAD
 ok 3 - symbolic-ref refuses non-ref for HEAD
 ok 4 - symbolic-ref refuses bare sha1
-# passed all 4 test(s)
-1..4
+ok 5 - symbolic-ref deletes HEAD
+ok 6 - symbolic-ref deletes dangling HEAD
+ok 7 - symbolic-ref fails to delete missing FOO
+ok 8 - symbolic-ref fails to delete real ref
+# passed all 8 test(s)
+1..8
 *** t1402-check-ref-format.sh ***
 ok 1 - ref name '' is invalid
 ok 2 - ref name '/' is invalid
@@ -1268,82 +2485,108 @@
 ok 17 - ref name 'foo/./bar' is invalid
 ok 18 - ref name 'foo/bar/.' is invalid
 ok 19 - ref name '.refs/foo' is invalid
-ok 20 - ref name 'heads/foo..bar' is invalid
-ok 21 - ref name 'heads/foo?bar' is invalid
-ok 22 - ref name 'foo./bar' is valid
-ok 23 - ref name 'heads/foo.lock' is invalid
-ok 24 - ref name 'heads///foo.lock' is invalid
-ok 25 - ref name 'foo.lock/bar' is invalid
-ok 26 - ref name 'foo.lock///bar' is invalid
-ok 27 - ref name 'heads/[email protected]' is valid
-ok 28 - ref name 'heads/[email protected]{ation' is invalid
-ok 29 - ref name 'heads/fooar' is invalid
-ok 30 - ref name 'heads/foo	' is invalid
-ok 31 - ref name 'heads/foo' is invalid
-ok 32 - ref name 'heads/fuß' is valid
-ok 33 - ref name 'heads/*foo/bar' is invalid with options --refspec-pattern
-ok 34 - ref name 'heads/foo*/bar' is invalid with options --refspec-pattern
-ok 35 - ref name 'heads/f*o/bar' is invalid with options --refspec-pattern
-ok 36 - ref name 'foo' is invalid
-ok 37 - ref name 'foo' is valid with options --allow-onelevel
-ok 38 - ref name 'foo' is invalid with options --refspec-pattern
-ok 39 - ref name 'foo' is valid with options --refspec-pattern --allow-onelevel
-ok 40 - ref name 'foo' is invalid with options --normalize
-ok 41 - ref name 'foo' is valid with options --allow-onelevel --normalize
-ok 42 - ref name 'foo/bar' is valid
-ok 43 - ref name 'foo/bar' is valid with options --allow-onelevel
-ok 44 - ref name 'foo/bar' is valid with options --refspec-pattern
-ok 45 - ref name 'foo/bar' is valid with options --refspec-pattern --allow-onelevel
-ok 46 - ref name 'foo/bar' is valid with options --normalize
-ok 47 - ref name 'foo/*' is invalid
-ok 48 - ref name 'foo/*' is invalid with options --allow-onelevel
-ok 49 - ref name 'foo/*' is valid with options --refspec-pattern
-ok 50 - ref name 'foo/*' is valid with options --refspec-pattern --allow-onelevel
-ok 51 - ref name '*/foo' is invalid
-ok 52 - ref name '*/foo' is invalid with options --allow-onelevel
-ok 53 - ref name '*/foo' is valid with options --refspec-pattern
-ok 54 - ref name '*/foo' is valid with options --refspec-pattern --allow-onelevel
-ok 55 - ref name '*/foo' is invalid with options --normalize
-ok 56 - ref name '*/foo' is valid with options --refspec-pattern --normalize
-ok 57 - ref name 'foo/*/bar' is invalid
-ok 58 - ref name 'foo/*/bar' is invalid with options --allow-onelevel
-ok 59 - ref name 'foo/*/bar' is valid with options --refspec-pattern
-ok 60 - ref name 'foo/*/bar' is valid with options --refspec-pattern --allow-onelevel
-ok 61 - ref name '*' is invalid
-ok 62 - ref name '*' is invalid with options --allow-onelevel
-ok 63 - ref name '*' is invalid with options --refspec-pattern
-ok 64 - ref name '*' is valid with options --refspec-pattern --allow-onelevel
-ok 65 - ref name 'foo/*/*' is invalid with options --refspec-pattern
-ok 66 - ref name 'foo/*/*' is invalid with options --refspec-pattern --allow-onelevel
-ok 67 - ref name '*/foo/*' is invalid with options --refspec-pattern
-ok 68 - ref name '*/foo/*' is invalid with options --refspec-pattern --allow-onelevel
-ok 69 - ref name '*/*/foo' is invalid with options --refspec-pattern
-ok 70 - ref name '*/*/foo' is invalid with options --refspec-pattern --allow-onelevel
-ok 71 - ref name '/foo' is invalid
-ok 72 - ref name '/foo' is invalid with options --allow-onelevel
-ok 73 - ref name '/foo' is invalid with options --refspec-pattern
-ok 74 - ref name '/foo' is invalid with options --refspec-pattern --allow-onelevel
-ok 75 - ref name '/foo' is invalid with options --normalize
-ok 76 - ref name '/foo' is valid with options --allow-onelevel --normalize
-ok 77 - ref name '/foo' is invalid with options --refspec-pattern --normalize
-ok 78 - ref name '/foo' is valid with options --refspec-pattern --allow-onelevel --normalize
-ok 79 - check-ref-format --branch @{-1}
-ok 80 - check-ref-format --branch from subdir
-ok 81 - ref name 'heads/foo' simplifies to 'heads/foo'
-ok 82 - ref name 'refs///heads/foo' simplifies to 'refs/heads/foo'
-ok 83 - ref name '/heads/foo' simplifies to 'heads/foo'
-ok 84 - ref name '///heads/foo' simplifies to 'heads/foo'
-ok 85 - check-ref-format --normalize rejects 'foo'
-ok 86 - check-ref-format --normalize rejects '/foo'
-ok 87 - check-ref-format --normalize rejects 'heads/foo/../bar'
-ok 88 - check-ref-format --normalize rejects 'heads/./foo'
-ok 89 - check-ref-format --normalize rejects 'headsoo'
-ok 90 - check-ref-format --normalize rejects 'heads/foo.lock'
-ok 91 - check-ref-format --normalize rejects 'heads///foo.lock'
-ok 92 - check-ref-format --normalize rejects 'foo.lock/bar'
-ok 93 - check-ref-format --normalize rejects 'foo.lock///bar'
-# passed all 93 test(s)
-1..93
+ok 20 - ref name 'refs/heads/foo.' is invalid
+ok 21 - ref name 'heads/foo..bar' is invalid
+ok 22 - ref name 'heads/foo?bar' is invalid
+ok 23 - ref name 'foo./bar' is valid
+ok 24 - ref name 'heads/foo.lock' is invalid
+ok 25 - ref name 'heads///foo.lock' is invalid
+ok 26 - ref name 'foo.lock/bar' is invalid
+ok 27 - ref name 'foo.lock///bar' is invalid
+ok 28 - ref name 'heads/[email protected]' is valid
+ok 29 - ref name 'heads/[email protected]{ation' is invalid
+ok 30 - ref name 'heads/foo\bar' is invalid
+ok 31 - ref name 'heads/foo	' is invalid
+ok 32 - ref name 'heads/foo' is invalid
+ok 33 - ref name 'heads/fuß' is valid
+ok 34 - ref name 'heads/*foo/bar' is valid with options --refspec-pattern
+ok 35 - ref name 'heads/foo*/bar' is valid with options --refspec-pattern
+ok 36 - ref name 'heads/f*o/bar' is valid with options --refspec-pattern
+ok 37 - ref name 'heads/f*o*/bar' is invalid with options --refspec-pattern
+ok 38 - ref name 'heads/foo*/bar*' is invalid with options --refspec-pattern
+ok 39 - ref name 'foo' is invalid
+ok 40 - ref name 'foo' is valid with options --allow-onelevel
+ok 41 - ref name 'foo' is invalid with options --refspec-pattern
+ok 42 - ref name 'foo' is valid with options --refspec-pattern --allow-onelevel
+ok 43 - ref name 'foo' is invalid with options --normalize
+ok 44 - ref name 'foo' is valid with options --allow-onelevel --normalize
+ok 45 - ref name 'foo/bar' is valid
+ok 46 - ref name 'foo/bar' is valid with options --allow-onelevel
+ok 47 - ref name 'foo/bar' is valid with options --refspec-pattern
+ok 48 - ref name 'foo/bar' is valid with options --refspec-pattern --allow-onelevel
+ok 49 - ref name 'foo/bar' is valid with options --normalize
+ok 50 - ref name 'foo/*' is invalid
+ok 51 - ref name 'foo/*' is invalid with options --allow-onelevel
+ok 52 - ref name 'foo/*' is valid with options --refspec-pattern
+ok 53 - ref name 'foo/*' is valid with options --refspec-pattern --allow-onelevel
+ok 54 - ref name '*/foo' is invalid
+ok 55 - ref name '*/foo' is invalid with options --allow-onelevel
+ok 56 - ref name '*/foo' is valid with options --refspec-pattern
+ok 57 - ref name '*/foo' is valid with options --refspec-pattern --allow-onelevel
+ok 58 - ref name '*/foo' is invalid with options --normalize
+ok 59 - ref name '*/foo' is valid with options --refspec-pattern --normalize
+ok 60 - ref name 'foo/*/bar' is invalid
+ok 61 - ref name 'foo/*/bar' is invalid with options --allow-onelevel
+ok 62 - ref name 'foo/*/bar' is valid with options --refspec-pattern
+ok 63 - ref name 'foo/*/bar' is valid with options --refspec-pattern --allow-onelevel
+ok 64 - ref name '*' is invalid
+ok 65 - ref name '*' is invalid with options --allow-onelevel
+ok 66 - ref name '*' is invalid with options --refspec-pattern
+ok 67 - ref name '*' is valid with options --refspec-pattern --allow-onelevel
+ok 68 - ref name 'foo/*/*' is invalid with options --refspec-pattern
+ok 69 - ref name 'foo/*/*' is invalid with options --refspec-pattern --allow-onelevel
+ok 70 - ref name '*/foo/*' is invalid with options --refspec-pattern
+ok 71 - ref name '*/foo/*' is invalid with options --refspec-pattern --allow-onelevel
+ok 72 - ref name '*/*/foo' is invalid with options --refspec-pattern
+ok 73 - ref name '*/*/foo' is invalid with options --refspec-pattern --allow-onelevel
+ok 74 - ref name '/foo' is invalid
+ok 75 - ref name '/foo' is invalid with options --allow-onelevel
+ok 76 - ref name '/foo' is invalid with options --refspec-pattern
+ok 77 - ref name '/foo' is invalid with options --refspec-pattern --allow-onelevel
+ok 78 - ref name '/foo' is invalid with options --normalize
+ok 79 - ref name '/foo' is valid with options --allow-onelevel --normalize
+ok 80 - ref name '/foo' is invalid with options --refspec-pattern --normalize
+ok 81 - ref name '/foo' is valid with options --refspec-pattern --allow-onelevel --normalize
+ok 82 - check-ref-format --branch @{-1}
+ok 83 - check-ref-format --branch from subdir
+ok 84 - ref name 'heads/foo' simplifies to 'heads/foo'
+ok 85 - ref name 'refs///heads/foo' simplifies to 'refs/heads/foo'
+ok 86 - ref name '/heads/foo' simplifies to 'heads/foo'
+ok 87 - ref name '///heads/foo' simplifies to 'heads/foo'
+ok 88 - check-ref-format --normalize rejects 'foo'
+ok 89 - check-ref-format --normalize rejects '/foo'
+ok 90 - check-ref-format --normalize rejects 'heads/foo/../bar'
+ok 91 - check-ref-format --normalize rejects 'heads/./foo'
+ok 92 - check-ref-format --normalize rejects 'heads\foo'
+ok 93 - check-ref-format --normalize rejects 'heads/foo.lock'
+ok 94 - check-ref-format --normalize rejects 'heads///foo.lock'
+ok 95 - check-ref-format --normalize rejects 'foo.lock/bar'
+ok 96 - check-ref-format --normalize rejects 'foo.lock///bar'
+# passed all 96 test(s)
+1..96
+*** t1403-show-ref.sh ***
+ok 1 - setup
+ok 2 - show-ref
+ok 3 - show-ref -q
+ok 4 - show-ref --verify
+ok 5 - show-ref --verify -q
+ok 6 - show-ref -d
+ok 7 - show-ref --heads, --tags, --head, pattern
+# passed all 7 test(s)
+1..7
+*** t1404-update-ref-df-conflicts.sh ***
+ok 1 - setup
+ok 2 - existing loose ref is a simple prefix of new
+ok 3 - existing packed ref is a simple prefix of new
+ok 4 - existing loose ref is a deeper prefix of new
+ok 5 - existing packed ref is a deeper prefix of new
+ok 6 - new ref is a simple prefix of existing loose
+ok 7 - new ref is a simple prefix of existing packed
+ok 8 - new ref is a deeper prefix of existing loose
+ok 9 - new ref is a deeper prefix of existing packed
+ok 10 - one new ref is a simple prefix of another
+# passed all 10 test(s)
+1..10
 *** t1410-reflog.sh ***
 ok 1 - setup
 ok 2 - rewind
@@ -1357,8 +2600,12 @@
 ok 10 - --expire=never
 ok 11 - gc.reflogexpire=never
 ok 12 - gc.reflogexpire=false
-# passed all 12 test(s)
-1..12
+ok 13 - checkout should not delete log for packed ref
+ok 14 - stale dirs do not cause d/f conflicts (reflogs on)
+ok 15 - stale dirs do not cause d/f conflicts (reflogs off)
+ok 16 - parsing reverse reflogs at BUFSIZ boundaries
+# passed all 16 test(s)
+1..16
 *** t1411-reflog-show.sh ***
 ok 1 - setup
 ok 2 - log -g shows reflog headers
@@ -1367,22 +2614,69 @@
 ok 5 - override reflog default format
 ok 6 - using @{now} syntax shows reflog date (multiline)
 ok 7 - using @{now} syntax shows reflog date (oneline)
-ok 8 - using --date= shows reflog date (multiline)
-ok 9 - using --date= shows reflog date (oneline)
-ok 10 - empty reflog file
-# passed all 10 test(s)
-1..10
+ok 8 - using @{now} syntax shows reflog date (format=%gd)
+ok 9 - using --date= shows reflog date (multiline)
+ok 10 - using --date= shows reflog date (oneline)
+ok 11 - using --date= shows reflog date (format=%gd)
+ok 12 - log.date does not invoke "--date" magic (multiline)
+ok 13 - log.date does not invoke "--date" magic (oneline)
+ok 14 - log.date does not invoke "--date" magic (format=%gd)
+ok 15 - --date magic does not override explicit @{0} syntax
+ok 16 - empty reflog file
+ok 17 - git log -g -p shows diffs vs. parents
+ok 18 - reflog exists works
+# passed all 18 test(s)
+1..18
 *** t1412-reflog-loop.sh ***
 ok 1 - setup commits
 ok 2 - setup reflog with alternating commits
 ok 3 - reflog shows all entries
 # passed all 3 test(s)
 1..3
+*** t1413-reflog-detach.sh ***
+ok 1 - setup
+ok 2 - baseline
+ok 3 - switch to branch
+ok 4 - detach to other
+ok 5 - detach to self
+ok 6 - attach to self
+ok 7 - attach to other
+# passed all 7 test(s)
+1..7
 *** t1420-lost-found.sh ***
 ok 1 - setup
 ok 2 - lost and found something
 # passed all 2 test(s)
 1..2
+*** t1430-bad-ref-name.sh ***
+ok 1 - setup
+ok 2 - fast-import: fail on invalid branch name ".badbranchname"
+ok 3 - fast-import: fail on invalid branch name "bad[branch]name"
+ok 4 - git branch shows badly named ref
+ok 5 - branch -d can delete badly named ref
+ok 6 - branch -D can delete badly named ref
+ok 7 - branch -D cannot delete non-ref in .git dir
+ok 8 - branch -D cannot delete ref in .git dir
+ok 9 - branch -D cannot delete absolute path
+ok 10 - git branch cannot create a badly named ref
+ok 11 - branch -m cannot rename to a bad ref name
+not ok 12 - branch -m can rename from a bad ref name # TODO known breakage
+ok 13 - push cannot create a badly named ref
+not ok 14 - push --mirror can delete badly named ref # TODO known breakage
+ok 15 - rev-parse skips symref pointing to broken name
+ok 16 - update-ref --no-deref -d can delete reference to broken name
+ok 17 - update-ref -d can delete broken name
+ok 18 - update-ref -d cannot delete non-ref in .git dir
+ok 19 - update-ref -d cannot delete absolute path
+ok 20 - update-ref --stdin fails create with bad ref name
+ok 21 - update-ref --stdin fails update with bad ref name
+ok 22 - update-ref --stdin fails delete with bad ref name
+ok 23 - update-ref --stdin -z fails create with bad ref name
+ok 24 - update-ref --stdin -z fails update with bad ref name
+ok 25 - update-ref --stdin -z fails delete with bad ref name
+# still have 2 known breakage(s)
+# passed all remaining 23 test(s)
+1..25
 *** t1450-fsck.sh ***
 ok 1 - setup
 ok 2 - loose objects borrowed from alternate are not missing
@@ -1395,13 +2689,49 @@
 ok 9 - missing < email delimiter is reported nicely
 ok 10 - missing email is reported nicely
 ok 11 - > in name is reported
-ok 12 - tag pointing to nonexistent
-ok 13 - tag pointing to something else than its type
-ok 14 - cleaned up
-ok 15 - rev-list --verify-objects
-ok 16 - rev-list --verify-objects with bad sha1
-# passed all 16 test(s)
-1..16
+ok 12 - integer overflow in timestamps is reported
+ok 13 - malformatted tree object
+ok 14 - tag pointing to nonexistent
+ok 15 - tag pointing to something else than its type
+ok 16 - tag with incorrect tag name & missing tagger
+ok 17 - tag with bad tagger
+ok 18 - cleaned up
+ok 19 - rev-list --verify-objects
+ok 20 - rev-list --verify-objects with bad sha1
+ok 21 - force fsck to ignore double author
+ok 22 - fsck notices blob entry pointing to null sha1
+ok 23 - fsck notices submodule entry pointing to null sha1
+ok 24 - fsck notices . as blob
+ok 25 - fsck notices . as tree
+ok 26 - fsck notices .. as blob
+ok 27 - fsck notices .. as tree
+ok 28 - fsck notices .git as blob
+ok 29 - fsck notices .git as tree
+ok 30 - fsck notices .GIT as blob
+ok 31 - fsck notices .GIT as tree
+ok 32 - fsck notices .gI{u200c}T as blob
+ok 33 - fsck notices .gI{u200c}T as tree
+ok 34 - fsck notices .Git as blob
+ok 35 - fsck notices .Git as tree
+ok 36 - fsck notices git~1 as blob
+ok 37 - fsck notices git~1 as tree
+ok 38 - fsck notices .git. as blob
+ok 39 - fsck notices .git. as tree
+ok 40 - fsck notices .\.GIT\foobar as blob
+ok 41 - fsck notices .\.GIT\foobar as tree
+ok 42 - fsck notices .git\foobar as blob
+ok 43 - fsck notices .git\foobar as tree
+ok 44 - fsck allows .Ňit
+ok 45 - fsck notices missing blob
+ok 46 - fsck notices missing subtree
+ok 47 - fsck notices missing root tree
+ok 48 - fsck notices missing parent
+ok 49 - fsck notices missing tagged object
+ok 50 - fsck notices ref pointing to missing commit
+ok 51 - fsck notices ref pointing to missing tag
+ok 52 - fsck --connectivity-only
+# passed all 52 test(s)
+1..52
 *** t1500-rev-parse.sh ***
 ok 1 - toplevel: is-bare-repository
 ok 2 - toplevel: is-inside-git-dir
@@ -1461,7 +2791,7 @@
 ok 3 - setup: core.worktree = relative path
 ok 4 - outside
 ok 5 - inside work tree
-not ok 6 - empty prefix is actually written out # TODO known breakage
+ok 6 - empty prefix is actually written out
 ok 7 - subdir of work tree
 ok 8 - setup: core.worktree = absolute path
 ok 9 - outside
@@ -1487,30 +2817,51 @@
 ok 29 - absolute pathspec should fail gracefully
 ok 30 - make_relative_path handles double slashes in GIT_DIR
 ok 31 - relative $GIT_WORK_TREE and git subprocesses
-# still have 1 known breakage(s)
-# passed all remaining 30 test(s)
-1..31
+ok 32 - Multi-worktree setup
+ok 33 - GIT_DIR set (1)
+ok 34 - GIT_DIR set (2)
+ok 35 - Auto discovery
+ok 36 - $GIT_DIR/common overrides core.worktree
+ok 37 - $GIT_WORK_TREE overrides $GIT_DIR/common
+# passed all 37 test(s)
+1..37
 *** t1502-rev-parse-parseopt.sh ***
-ok 1 - test --parseopt help output
-ok 2 - test --parseopt
-ok 3 - test --parseopt with mixed options and arguments
-ok 4 - test --parseopt with --
-ok 5 - test --parseopt --stop-at-non-option
-ok 6 - test --parseopt --keep-dashdash
-ok 7 - test --parseopt --keep-dashdash --stop-at-non-option with --
-ok 8 - test --parseopt --keep-dashdash --stop-at-non-option without --
-# passed all 8 test(s)
-1..8
+ok 1 - setup optionspec
+ok 2 - test --parseopt help output
+ok 3 - setup expect.1
+ok 4 - test --parseopt
+ok 5 - test --parseopt with mixed options and arguments
+ok 6 - setup expect.2
+ok 7 - test --parseopt with --
+ok 8 - test --parseopt --stop-at-non-option
+ok 9 - setup expect.3
+ok 10 - test --parseopt --keep-dashdash
+ok 11 - setup expect.4
+ok 12 - test --parseopt --keep-dashdash --stop-at-non-option with --
+ok 13 - setup expect.5
+ok 14 - test --parseopt --keep-dashdash --stop-at-non-option without --
+ok 15 - setup expect.6
+ok 16 - test --parseopt --stuck-long
+ok 17 - setup expect.7
+ok 18 - test --parseopt --stuck-long and empty optional argument
+ok 19 - setup expect.8
+ok 20 - test --parseopt --stuck-long and long option with unset optional argument
+ok 21 - test --parseopt --stuck-long and short option with unset optional argument
+# passed all 21 test(s)
+1..21
 *** t1503-rev-parse-verify.sh ***
 ok 1 - set up basic repo with 1 file (hello) and 4 commits
 ok 2 - works with one good rev
 ok 3 - fails with any bad rev or many good revs
 ok 4 - fails silently when using -q
-ok 5 - no stdout output on error
-ok 6 - use --default
-ok 7 - [email protected]{n} for various n
-# passed all 7 test(s)
-1..7
+ok 5 - fails silently when using -q with deleted reflogs
+ok 6 - fails silently when using -q with not enough reflogs
+ok 7 - succeeds silently with -q and reflogs that do not go far back enough in time
+ok 8 - no stdout output on error
+ok 9 - use --default
+ok 10 - [email protected]{n} for various n
+# passed all 10 test(s)
+1..10
 *** t1504-ceiling-dirs.sh ***
 ok 1 - no_ceil
 ok 2 - ceil_empty
@@ -1526,34 +2877,38 @@
 ok 12 - subdir_ceil_at_trash_slash: prefix
 ok 13 - subdir_ceil_at_sub: prefix
 ok 14 - subdir_ceil_at_sub_slash: prefix
-ok 15 - subdir_ceil_at_subdir
-ok 16 - subdir_ceil_at_subdir_slash
-ok 17 - subdir_ceil_at_su
-ok 18 - subdir_ceil_at_su_slash
-ok 19 - subdir_ceil_at_sub_di
-ok 20 - subdir_ceil_at_sub_di_slash
-ok 21 - subdir_ceil_at_subdi
-ok 22 - subdir_ceil_at_subdi_slash
-ok 23 - second_of_two: prefix
-ok 24 - first_of_two: prefix
-ok 25 - second_of_three: prefix
-ok 26 - git_dir_specified
-ok 27 - sd_no_ceil
-ok 28 - sd_ceil_empty
-ok 29 - sd_ceil_at_trash: prefix
-ok 30 - sd_ceil_at_trash_slash: prefix
-ok 31 - sd_ceil_at_s: prefix
-ok 32 - sd_ceil_at_s_slash: prefix
-ok 33 - sd_ceil_at_sd
-ok 34 - sd_ceil_at_sd_slash
-ok 35 - sd_ceil_at_su
-ok 36 - sd_ceil_at_su_slash
-ok 37 - sd_ceil_at_s_di
-ok 38 - sd_ceil_at_s_di_slash
-ok 39 - sd_ceil_at_sdi
-ok 40 - sd_ceil_at_sdi_slash
-# passed all 40 test(s)
-1..40
+ok 15 - subdir_ceil_at_top: prefix
+ok 16 - subdir_ceil_at_top_slash: prefix
+ok 17 - subdir_ceil_at_top_no_resolve
+ok 18 - subdir_ceil_at_top_slash_no_resolve
+ok 19 - subdir_ceil_at_subdir
+ok 20 - subdir_ceil_at_subdir_slash
+ok 21 - subdir_ceil_at_su
+ok 22 - subdir_ceil_at_su_slash
+ok 23 - subdir_ceil_at_sub_di
+ok 24 - subdir_ceil_at_sub_di_slash
+ok 25 - subdir_ceil_at_subdi
+ok 26 - subdir_ceil_at_subdi_slash
+ok 27 - second_of_two: prefix
+ok 28 - first_of_two: prefix
+ok 29 - second_of_three: prefix
+ok 30 - git_dir_specified
+ok 31 - sd_no_ceil
+ok 32 - sd_ceil_empty
+ok 33 - sd_ceil_at_trash: prefix
+ok 34 - sd_ceil_at_trash_slash: prefix
+ok 35 - sd_ceil_at_s: prefix
+ok 36 - sd_ceil_at_s_slash: prefix
+ok 37 - sd_ceil_at_sd
+ok 38 - sd_ceil_at_sd_slash
+ok 39 - sd_ceil_at_su
+ok 40 - sd_ceil_at_su_slash
+ok 41 - sd_ceil_at_s_di
+ok 42 - sd_ceil_at_s_di_slash
+ok 43 - sd_ceil_at_sdi
+ok 44 - sd_ceil_at_sdi_slash
+# passed all 44 test(s)
+1..44
 *** t1505-rev-parse-last.sh ***
 ok 1 - setup
 ok 2 - @{-1} works
@@ -1582,42 +2937,82 @@
 ok 15 - relative path outside worktree
 ok 16 - relative path when cwd is outside worktree
 ok 17 - relative path when startup_info is NULL
-# passed all 17 test(s)
-1..17
+ok 18 - <commit>:file correctly diagnosed after a pathname
+ok 19 - dotdot is not an empty set
+ok 20 - arg before dashdash must be a revision (missing)
+ok 21 - arg before dashdash must be a revision (file)
+ok 22 - arg before dashdash must be a revision (ambiguous)
+# passed all 22 test(s)
+1..22
 *** t1507-rev-parse-upstream.sh ***
 ok 1 - setup
 ok 2 - @{upstream} resolves to correct full name
 ok 3 - @{u} resolves to correct full name
 ok 4 - [email protected]{upstream} resolves to correct full name
-ok 5 - [email protected]{u} resolves to correct commit
-ok 6 - [email protected]{u} fails
-ok 7 - <branch>@{u}@{1} resolves correctly
-ok 8 - @{u} without specifying branch fails on a detached HEAD
-ok 9 - checkout -b new [email protected]{u} forks from the same
-ok 10 - merge [email protected]{u} records the correct name
-ok 11 - branch -d [email protected]{u}
-ok 12 - checkout [email protected]{u}
-ok 13 - log -g [email protected]{u}
-ok 14 - log -g [email protected]{u}@{now}
-# passed all 14 test(s)
-1..14
+ok 5 - upstream of branch with @ in middle
+ok 6 - upstream of branch with @ at start
+ok 7 - upstream of branch with @ at end
+ok 8 - refs/heads/[email protected]{upstream} does not resolve to my-side{upstream}
+ok 9 - [email protected]{u} resolves to correct commit
+ok 10 - [email protected]{u} fails
+ok 11 - <branch>@{u}@{1} resolves correctly
+ok 12 - @{u} without specifying branch fails on a detached HEAD
+ok 13 - checkout -b new [email protected]{u} forks from the same
+ok 14 - merge [email protected]{u} records the correct name
+ok 15 - branch -d [email protected]{u}
+ok 16 - checkout [email protected]{u}
+ok 17 - [email protected]{u} works when tracking a local branch
+ok 18 - [email protected]{u} error message when no upstream
+ok 19 - @{u} error message when no upstream
+ok 20 - [email protected]{u} error message with misspelt branch
+ok 21 - @{u} error message when not on a branch
+ok 22 - [email protected]{u} error message if upstream branch not fetched
+ok 23 - pull works when tracking a local branch
+ok 24 - @{u} works when tracking a local branch
+ok 25 - log -g [email protected]{u}
+ok 26 - log -g [email protected]{u}@{now}
+ok 27 - @{reflog}-parsing does not look beyond colon
+ok 28 - @{upstream}-parsing does not look beyond colon
+# passed all 28 test(s)
+1..28
 *** t1508-at-combinations.sh ***
 ok 1 - setup
-ok 2 - HEAD = new-two
+ok 2 - HEAD = refs/heads/new-branch
 ok 3 - @{1} = new-one
-ok 4 - @{-1} = old-two
-ok 5 - @{-1}@{1} = old-one
-ok 6 - @{u} = upstream-two
-ok 7 - @{u}@{1} = upstream-one
-ok 8 - @{-1}@{u} = master-two
-ok 9 - @{-1}@{u}@{1} = master-one
-ok 10 - @{u}@{-1} is nonsensical
-ok 11 - @{1}@{u} is nonsensical
-# passed all 11 test(s)
-1..11
+ok 4 - [email protected]{1} = new-one
+ok 5 - @{now} = new-two
+ok 6 - [email protected]{now} = new-two
+ok 7 - @{-1} = refs/heads/old-branch
+ok 8 - @{-1}@{0} = old-two
+ok 9 - @{-1}@{1} = old-one
+ok 10 - @{u} = refs/heads/upstream-branch
+ok 11 - [email protected]{u} = refs/heads/upstream-branch
+ok 12 - @{u}@{1} = upstream-one
+ok 13 - @{-1}@{u} = refs/heads/master
+ok 14 - @{-1}@{u}@{1} = master-one
+ok 15 - @ = new-two
+ok 16 - @@{u} = refs/heads/upstream-branch
+ok 17 - @@/at-test = refs/heads/@@/at-test
+ok 18 - @/at-test = refs/heads/@/at-test
+ok 19 - @at-test = refs/heads/@at-test
+ok 20 - @{u}@{-1} is nonsensical
+ok 21 - @{0}@{0} is nonsensical
+ok 22 - @{1}@{u} is nonsensical
+ok 23 - [email protected]{-1} is nonsensical
+ok 24 - @{-1}@{-1} is nonsensical
+ok 25 - [email protected]{3} = old-two
+ok 26 - @{3} is nonsensical
+ok 27 - switch to old-branch
+ok 28 - HEAD = refs/heads/old-branch
+ok 29 - [email protected]{1} = new-two
+ok 30 - @{1} = old-one
+ok 31 - create path with @
+ok 32 - @:normal = content
+ok 33 - @:[email protected] = content
+# passed all 33 test(s)
+1..33
 *** t1509-root-worktree.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Dangerous test skipped. Read this test if you want to execute it
+1..0 # SKIP Test requiring writable / skipped. Read this test if you want to run it
 *** t1510-repo-setup.sh ***
 ok 1 - #0: nonbare repo, no explicit configuration
 ok 2 - #1: GIT_WORK_TREE without explicit GIT_DIR is accepted
@@ -1670,74 +3065,153 @@
 ok 49 - #16a: implicitly bare repo (cwd inside .git dir)
 ok 50 - #16b: bare .git (cwd inside .git dir)
 ok 51 - #16c: bare .git has no worktree
-ok 52 - #17: GIT_WORK_TREE without explicit GIT_DIR is accepted (bare case)
-ok 53 - #18: bare .git named by GIT_DIR has no worktree
-ok 54 - #19: setup
-ok 55 - #19: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 56 - #19: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 57 - #19: explicit GIT_WORK_TREE from parent of worktree
-ok 58 - #19: explicit GIT_WORK_TREE from nephew of worktree
-ok 59 - #19: chdir_to_toplevel uses worktree, not git dir
-ok 60 - #19: chdir_to_toplevel uses worktree (from subdir)
-ok 61 - #20a: core.worktree without GIT_DIR accepted (inside .git)
-ok 62 - #20b/c: core.worktree and core.bare conflict
-ok 63 - #21: setup, core.worktree warns before overriding core.bare
-ok 64 - #21: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 65 - #21: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 66 - #21: explicit GIT_WORK_TREE from parent of worktree
-ok 67 - #21: explicit GIT_WORK_TREE from nephew of worktree
-ok 68 - #21: chdir_to_toplevel uses worktree, not git dir
-ok 69 - #21: chdir_to_toplevel uses worktree (from subdir)
-ok 70 - #22a: core.worktree = GIT_DIR = .git dir
-ok 71 - #22b: core.worktree child of .git, GIT_DIR=.git
-ok 72 - #22c: core.worktree = .git/.., GIT_DIR=.git
-ok 73 - #22.2: core.worktree and core.bare conflict
-ok 74 - #23: setup
-ok 75 - #23: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 76 - #23: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 77 - #23: explicit GIT_WORK_TREE from parent of worktree
-ok 78 - #23: explicit GIT_WORK_TREE from nephew of worktree
-ok 79 - #23: chdir_to_toplevel uses worktree, not git dir
-ok 80 - #23: chdir_to_toplevel uses worktree (from subdir)
-ok 81 - #24: bare repo has no worktree (gitfile case)
-ok 82 - #25: GIT_WORK_TREE accepted if GIT_DIR unset (bare gitfile case)
-ok 83 - #26: bare repo has no worktree (GIT_DIR -> gitfile case)
-ok 84 - #27: setup
-ok 85 - #27: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 86 - #27: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 87 - #27: explicit GIT_WORK_TREE from parent of worktree
-ok 88 - #27: explicit GIT_WORK_TREE from nephew of worktree
-ok 89 - #27: chdir_to_toplevel uses worktree, not git dir
-ok 90 - #27: chdir_to_toplevel uses worktree (from subdir)
-ok 91 - #28: core.worktree and core.bare conflict (gitfile case)
-ok 92 - #29: setup
-ok 93 - #29: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 94 - #29: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 95 - #29: explicit GIT_WORK_TREE from parent of worktree
-ok 96 - #29: explicit GIT_WORK_TREE from nephew of worktree
-ok 97 - #29: chdir_to_toplevel uses worktree, not git dir
-ok 98 - #29: chdir_to_toplevel uses worktree (from subdir)
-ok 99 - #30: core.worktree and core.bare conflict (gitfile version)
-ok 100 - #31: setup
-ok 101 - #31: explicit GIT_WORK_TREE and GIT_DIR at toplevel
-ok 102 - #31: explicit GIT_WORK_TREE and GIT_DIR in subdir
-ok 103 - #31: explicit GIT_WORK_TREE from parent of worktree
-ok 104 - #31: explicit GIT_WORK_TREE from nephew of worktree
-ok 105 - #31: chdir_to_toplevel uses worktree, not git dir
-ok 106 - #31: chdir_to_toplevel uses worktree (from subdir)
-# passed all 106 test(s)
-1..106
+ok 52 - #16d: bareness preserved across alias
+ok 53 - #16e: bareness preserved by --bare
+ok 54 - #17: GIT_WORK_TREE without explicit GIT_DIR is accepted (bare case)
+ok 55 - #18: bare .git named by GIT_DIR has no worktree
+ok 56 - #19: setup
+ok 57 - #19: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 58 - #19: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 59 - #19: explicit GIT_WORK_TREE from parent of worktree
+ok 60 - #19: explicit GIT_WORK_TREE from nephew of worktree
+ok 61 - #19: chdir_to_toplevel uses worktree, not git dir
+ok 62 - #19: chdir_to_toplevel uses worktree (from subdir)
+ok 63 - #20a: core.worktree without GIT_DIR accepted (inside .git)
+ok 64 - #20b/c: core.worktree and core.bare conflict
+ok 65 - #20d: core.worktree and core.bare OK when working tree not needed
+ok 66 - #21: setup, core.worktree warns before overriding core.bare
+ok 67 - #21: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 68 - #21: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 69 - #21: explicit GIT_WORK_TREE from parent of worktree
+ok 70 - #21: explicit GIT_WORK_TREE from nephew of worktree
+ok 71 - #21: chdir_to_toplevel uses worktree, not git dir
+ok 72 - #21: chdir_to_toplevel uses worktree (from subdir)
+ok 73 - #22a: core.worktree = GIT_DIR = .git dir
+ok 74 - #22b: core.worktree child of .git, GIT_DIR=.git
+ok 75 - #22c: core.worktree = .git/.., GIT_DIR=.git
+ok 76 - #22.2: core.worktree and core.bare conflict
+ok 77 - #23: setup
+ok 78 - #23: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 79 - #23: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 80 - #23: explicit GIT_WORK_TREE from parent of worktree
+ok 81 - #23: explicit GIT_WORK_TREE from nephew of worktree
+ok 82 - #23: chdir_to_toplevel uses worktree, not git dir
+ok 83 - #23: chdir_to_toplevel uses worktree (from subdir)
+ok 84 - #24: bare repo has no worktree (gitfile case)
+ok 85 - #25: GIT_WORK_TREE accepted if GIT_DIR unset (bare gitfile case)
+ok 86 - #26: bare repo has no worktree (GIT_DIR -> gitfile case)
+ok 87 - #27: setup
+ok 88 - #27: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 89 - #27: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 90 - #27: explicit GIT_WORK_TREE from parent of worktree
+ok 91 - #27: explicit GIT_WORK_TREE from nephew of worktree
+ok 92 - #27: chdir_to_toplevel uses worktree, not git dir
+ok 93 - #27: chdir_to_toplevel uses worktree (from subdir)
+ok 94 - #28: core.worktree and core.bare conflict (gitfile case)
+ok 95 - #29: setup
+ok 96 - #29: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 97 - #29: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 98 - #29: explicit GIT_WORK_TREE from parent of worktree
+ok 99 - #29: explicit GIT_WORK_TREE from nephew of worktree
+ok 100 - #29: chdir_to_toplevel uses worktree, not git dir
+ok 101 - #29: chdir_to_toplevel uses worktree (from subdir)
+ok 102 - #30: core.worktree and core.bare conflict (gitfile version)
+ok 103 - #31: setup
+ok 104 - #31: explicit GIT_WORK_TREE and GIT_DIR at toplevel
+ok 105 - #31: explicit GIT_WORK_TREE and GIT_DIR in subdir
+ok 106 - #31: explicit GIT_WORK_TREE from parent of worktree
+ok 107 - #31: explicit GIT_WORK_TREE from nephew of worktree
+ok 108 - #31: chdir_to_toplevel uses worktree, not git dir
+ok 109 - #31: chdir_to_toplevel uses worktree (from subdir)
+# passed all 109 test(s)
+1..109
 *** t1511-rev-parse-caret.sh ***
 ok 1 - setup
 ok 2 - ref^{non-existent}
 ok 3 - ref^{}
 ok 4 - ref^{commit}
 ok 5 - ref^{tree}
-ok 6 - ref^{/.}
-ok 7 - ref^{/non-existent}
-ok 8 - ref^{/Initial}
+ok 6 - ref^{tag}
+ok 7 - ref^{/.}
+ok 8 - ref^{/non-existent}
+ok 9 - ref^{/Initial}
+# passed all 9 test(s)
+1..9
+*** t1512-rev-parse-disambiguation.sh ***
+ok 1 - blob and tree
+ok 2 - warn ambiguity when no candidate matches type hint
+ok 3 - disambiguate tree-ish
+ok 4 - disambiguate blob
+ok 5 - disambiguate tree
+ok 6 - first commit
+ok 7 - disambiguate commit-ish
+ok 8 - disambiguate commit
+ok 9 - log name1..name2 takes only commit-ishes on both ends
+ok 10 - rev-parse name1..name2 takes only commit-ishes on both ends
+ok 11 - git log takes only commit-ish
+ok 12 - git reset takes only commit-ish
+ok 13 - first tag
+not ok 14 - two semi-ambiguous commit-ish # TODO known breakage
+not ok 15 - three semi-ambiguous tree-ish # TODO known breakage
+ok 16 - parse describe name
+ok 17 - more history
+not ok 18 - parse describe name taking advantage of generation # TODO known breakage
+ok 19 - parse describe name not ignoring ambiguity
+ok 20 - ambiguous commit-ish
+ok 21 - rev-parse --disambiguate
+ok 22 - ambiguous 40-hex ref
+ok 23 - ambiguous short sha1 ref
+# still have 3 known breakage(s)
+# passed all remaining 20 test(s)
+1..23
+*** t1513-rev-parse-prefix.sh ***
+ok 1 - setup
+ok 2 - empty prefix -- file
+ok 3 - valid prefix -- file
+ok 4 - valid prefix -- ../file
+ok 5 - empty prefix HEAD:./path
+ok 6 - valid prefix HEAD:./path
+ok 7 - valid prefix HEAD:../path
+ok 8 - prefix ignored with HEAD:top
+ok 9 - disambiguate path with valid prefix
+ok 10 - file and refs with prefix
+ok 11 - two-levels deep
+# passed all 11 test(s)
+1..11
+*** t1514-rev-parse-push.sh ***
+ok 1 - setup
+ok 2 - @{push} with default=nothing
+ok 3 - @{push} with default=simple
+ok 4 - triangular @{push} fails with default=simple
+ok 5 - @{push} with default=current
+ok 6 - @{push} with default=matching
+ok 7 - @{push} with pushremote defined
+ok 8 - @{push} with push refspecs
 # passed all 8 test(s)
 1..8
+*** t1600-index.sh ***
+ok 1 - setup
+ok 2 - bogus GIT_INDEX_VERSION issues warning
+ok 3 - out of bounds GIT_INDEX_VERSION issues warning
+ok 4 - no warning with bogus GIT_INDEX_VERSION and existing index
+ok 5 - out of bounds index.version issues warning
+ok 6 - GIT_INDEX_VERSION takes precedence over config
+# passed all 6 test(s)
+1..6
+*** t1700-split-index.sh ***
+ok 1 - enable split index
+ok 2 - add one file
+ok 3 - disable split index
+ok 4 - enable split index again, "one" now belongs to base index"
+ok 5 - modify original file, base index untouched
+ok 6 - add another file, which stays index
+ok 7 - remove file not in base index
+ok 8 - remove file in base index
+ok 9 - add original file back
+ok 10 - add new file
+ok 11 - unify index, two files remain
+# passed all 11 test(s)
+1..11
 *** t2000-checkout-cache-clash.sh ***
 ok 1 - git update-index --add various paths.
 ok 2 - git checkout-index without -f should fail on conflicting work tree.
@@ -1752,7 +3226,7 @@
 ok 3 - git update-index --add path1/file1
 ok 4 - writing tree out with git write-tree
 ok 5 - read previously written tree and checkout.
-ok 6 - git update-index --add a symlink.
+ok 6 - add a symlink
 ok 7 - writing tree out with git write-tree
 ok 8 - read previously written tree and checkout.
 ok 9 - checking out conflicting path with -f
@@ -1773,13 +3247,15 @@
 ok 6 - use --prefix=tmp/orary/ where tmp is a symlink
 ok 7 - use --prefix=tmp/orary- where tmp is a symlink
 ok 8 - use --prefix=tmp- where tmp-path1 is a symlink
-# passed all 8 test(s)
-1..8
+ok 9 - apply filter from working tree .gitattributes with --prefix
+ok 10 - apply CRLF filter from working tree .gitattributes with --prefix
+# passed all 10 test(s)
+1..10
 *** t2004-checkout-cache-temp.sh ***
-ok 1 - preparation
+ok 1 - setup
 ok 2 - checkout one stage 0 to temporary file
 ok 3 - checkout all stage 0 to temporary files
-ok 4 - prepare 3-way merge
+ok 4 - setup 3-way merge
 ok 5 - checkout one stage 2 to temporary file
 ok 6 - checkout all stage 2 to temporary files
 ok 7 - checkout all stages/one file to nothing
@@ -1794,8 +3270,9 @@
 ok 16 - -- asubdir/path5: no stage 2 and 3 have stage 1
 ok 17 - checkout --temp within subdir
 ok 18 - checkout --temp symlink
-# passed all 18 test(s)
-1..18
+ok 19 - emit well-formed relative path
+# passed all 19 test(s)
+1..19
 *** t2005-checkout-index-symlinks.sh ***
 ok 1 - preparation
 ok 2 - the checked-out symlink must be a file
@@ -1819,12 +3296,13 @@
 ok 2 - remove and restore with relative path
 ok 3 - checkout with empty prefix
 ok 4 - checkout with simple prefix
-ok 5 - relative path outside tree should fail
-ok 6 - incorrect relative path to file should fail (1)
-ok 7 - incorrect relative path should fail (2)
-ok 8 - incorrect relative path should fail (3)
-# passed all 8 test(s)
-1..8
+ok 5 - checkout with complex relative path
+ok 6 - relative path outside tree should fail
+ok 7 - incorrect relative path to file should fail (1)
+ok 8 - incorrect relative path should fail (2)
+ok 9 - incorrect relative path should fail (3)
+# passed all 9 test(s)
+1..9
 *** t2009-checkout-statinfo.sh ***
 ok 1 - setup
 ok 2 - branch switching
@@ -1840,8 +3318,9 @@
 ok 6 - allow the most common case
 ok 7 - check ambiguity
 ok 8 - disambiguate checking out from a tree-ish
-# passed all 8 test(s)
-1..8
+ok 9 - accurate error message with more than one ref
+# passed all 9 test(s)
+1..9
 *** t2011-checkout-invalid-head.sh ***
 ok 1 - setup
 ok 2 - checkout should not start branch from a tree
@@ -1867,8 +3346,12 @@
 ok 16 - another...master
 ok 17 - ...master
 ok 18 - master...
-# passed all 18 test(s)
-1..18
+ok 19 - "checkout -" works after a rebase A
+ok 20 - "checkout -" works after a rebase A B
+ok 21 - "checkout -" works after a rebase -i A
+ok 22 - "checkout -" works after a rebase -i A B
+# passed all 22 test(s)
+1..22
 *** t2013-checkout-submodule.sh ***
 ok 1 - setup
 ok 2 - "reset <submodule>" updates the index
@@ -1876,8 +3359,37 @@
 ok 4 - "checkout <submodule>" honors diff.ignoreSubmodules
 ok 5 - "checkout <submodule>" honors submodule.*.ignore from .gitmodules
 ok 6 - "checkout <submodule>" honors submodule.*.ignore from .git/config
-# passed all 6 test(s)
-1..6
+ok 7 - git checkout: added submodule creates empty directory
+ok 8 - git checkout: added submodule leaves existing empty directory alone
+ok 9 - git checkout: added submodule doesn't remove untracked unignored file with same name
+ok 10 - git checkout: replace tracked file with submodule creates empty directory
+ok 11 - git checkout: replace directory with submodule
+ok 12 - git checkout: removed submodule leaves submodule directory and its contents in place
+ok 13 - git checkout: removed submodule leaves submodule containing a .git directory alone
+ok 14 - git checkout: replace submodule with a directory must fail
+ok 15 - git checkout: replace submodule containing a .git directory with a directory must fail
+not ok 16 - git checkout: replace submodule with a file must fail # TODO known breakage
+not ok 17 - git checkout: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 18 - git checkout: modified submodule does not update submodule work tree
+ok 19 - git checkout: modified submodule does not update submodule work tree to invalid commit
+ok 20 - git checkout: modified submodule does not update submodule work tree from invalid commit
+ok 21 - git checkout -f: added submodule creates empty directory
+ok 22 - git checkout -f: added submodule leaves existing empty directory alone
+ok 23 - git checkout -f: added submodule does remove untracked unignored file with same name when forced
+ok 24 - git checkout -f: replace tracked file with submodule creates empty directory
+ok 25 - git checkout -f: replace directory with submodule
+ok 26 - git checkout -f: removed submodule leaves submodule directory and its contents in place
+ok 27 - git checkout -f: removed submodule leaves submodule containing a .git directory alone
+not ok 28 - git checkout -f: replace submodule with a directory must fail # TODO known breakage
+not ok 29 - git checkout -f: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 30 - git checkout -f: replace submodule with a file must fail # TODO known breakage
+not ok 31 - git checkout -f: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 32 - git checkout -f: modified submodule does not update submodule work tree
+ok 33 - git checkout -f: modified submodule does not update submodule work tree to invalid commit
+ok 34 - git checkout -f: modified submodule does not update submodule work tree from invalid commit
+# still have 6 known breakage(s)
+# passed all remaining 28 test(s)
+1..34
 *** t2014-switch.sh ***
 ok 1 - setup
 ok 2 - check all changes are staged
@@ -1891,8 +3403,9 @@
 ok 3 - checkout from unborn preserves index contents
 ok 4 - checkout from unborn merges identical index contents
 ok 5 - checking out another branch from unborn state
-# passed all 5 test(s)
-1..5
+ok 6 - checking out in a newly created repo
+# passed all 6 test(s)
+1..6
 *** t2016-checkout-patch.sh ***
 ok 1 - setup
 ok 2 - saying "n" does nothing
@@ -1923,8 +3436,9 @@
 ok 10 - giving up --orphan not committed when -l and core.logAllRefUpdates = false deletes reflog
 ok 11 - --orphan is rejected with an existing name
 ok 12 - --orphan refuses to switch if a merge is needed
-# passed all 12 test(s)
-1..12
+ok 13 - cannot --detach on an unborn branch
+# passed all 13 test(s)
+1..13
 *** t2018-checkout-branch.sh ***
 ok 1 - setup
 ok 2 - checkout -b to a new branch, set to HEAD
@@ -1956,8 +3470,10 @@
 ok 7 - checkout produces ambiguity warning
 ok 8 - checkout chooses branch over tag
 ok 9 - checkout reports switch to branch
-# passed all 9 test(s)
-1..9
+ok 10 - wildcard ambiguation, paths win
+ok 11 - wildcard ambiguation, refs lose
+# passed all 11 test(s)
+1..11
 *** t2020-checkout-detach.sh ***
 ok 1 - setup
 ok 2 - checkout branch does not detach
@@ -1973,26 +3489,31 @@
 ok 12 - checkout --detach moves HEAD
 ok 13 - checkout warns on orphan commits
 ok 14 - checkout warns on orphan commits: output
-ok 15 - checkout does not warn leaving ref tip
-ok 16 - checkout does not warn leaving ref tip
-ok 17 - checkout does not warn leaving reachable commit
-ok 18 - checkout does not warn leaving reachable commit
-ok 19 - tracking count is accurate after orphan check
-# passed all 19 test(s)
-1..19
+ok 15 - checkout warns orphaning 1 of 2 commits
+ok 16 - checkout warns orphaning 1 of 2 commits: output
+ok 17 - checkout does not warn leaving ref tip
+ok 18 - checkout does not warn leaving ref tip
+ok 19 - checkout does not warn leaving reachable commit
+ok 20 - checkout does not warn leaving reachable commit
+ok 21 - tracking count is accurate after orphan check
+# passed all 21 test(s)
+1..21
 *** t2021-checkout-overwrite.sh ***
 ok 1 - setup
 ok 2 - create a commit where dir a/b changed to file
 ok 3 - checkout commit with dir must not remove untracked a/b
 ok 4 - create a commit where dir a/b changed to symlink
 ok 5 - checkout commit with dir must not remove untracked a/b
-# passed all 5 test(s)
-1..5
+ok 6 - the symlink remained
+# passed all 6 test(s)
+1..6
 *** t2022-checkout-paths.sh ***
 ok 1 - setup
 ok 2 - checking out paths out of a tree does not clobber unrelated paths
-# passed all 2 test(s)
-1..2
+ok 3 - do not touch unmerged entries matching $path but not in $tree
+ok 4 - do not touch files that are already up-to-date
+# passed all 4 test(s)
+1..4
 *** t2023-checkout-m.sh ***
 ok 1 - setup
 ok 2 - git merge master
@@ -2000,6 +3521,64 @@
 ok 4 - -m restores 3-way conflicted+resolved file
 # passed all 4 test(s)
 1..4
+*** t2024-checkout-dwim.sh ***
+ok 1 - setup
+ok 2 - checkout of non-existing branch fails
+ok 3 - checkout of branch from multiple remotes fails #1
+ok 4 - checkout of branch from a single remote succeeds #1
+ok 5 - checkout of branch from a single remote succeeds #2
+ok 6 - --no-guess suppresses branch auto-vivification
+ok 7 - setup more remotes with unconventional refspecs
+ok 8 - checkout of branch from multiple remotes fails #2
+ok 9 - checkout of branch from multiple remotes fails #3
+ok 10 - checkout of branch from a single remote succeeds #3
+ok 11 - checkout of branch from a single remote succeeds #4
+ok 12 - checkout of branch with a file having the same name fails
+ok 13 - checkout <branch> -- succeeds, even if a file with the same name exists
+ok 14 - loosely defined local base branch is reported correctly
+# passed all 14 test(s)
+1..14
+*** t2025-worktree-add.sh ***
+ok 1 - setup
+ok 2 - "add" an existing worktree
+ok 3 - "add" an existing empty worktree
+ok 4 - "add" refuses to checkout locked branch
+ok 5 - checking out paths not complaining about linked checkouts
+ok 6 - "add" worktree
+ok 7 - "add" worktree from a subdir
+ok 8 - "add" from a linked checkout
+ok 9 - "add" worktree creating new branch
+ok 10 - die the same branch is already checked out
+ok 11 - die the same branch is already checked out (symlink)
+ok 12 - not die the same branch is already checked out
+ok 13 - not die on re-checking out current branch
+ok 14 - "add" from a bare repo
+ok 15 - checkout from a bare repo without "add"
+ok 16 - checkout with grafts
+ok 17 - "add" from relative HEAD
+ok 18 - "add -b" with <branch> omitted
+ok 19 - "add --detach" with <branch> omitted
+ok 20 - "add" with <branch> omitted
+ok 21 - "add" auto-vivify does not clobber existing branch
+ok 22 - "add" no auto-vivify with --detach and <branch> omitted
+ok 23 - "add" -b/-B mutually exclusive
+ok 24 - "add" -b/--detach mutually exclusive
+ok 25 - "add" -B/--detach mutually exclusive
+# passed all 25 test(s)
+1..25
+*** t2026-prune-linked-checkouts.sh ***
+ok 1 - initialize
+ok 2 - worktree prune on normal repo
+ok 3 - prune files inside $GIT_DIR/worktrees
+ok 4 - prune directories without gitdir
+ok 5 - prune directories with unreadable gitdir
+ok 6 - prune directories with invalid gitdir
+ok 7 - prune directories with gitdir pointing to nowhere
+ok 8 - not prune locked checkout
+ok 9 - not prune recent checkouts
+ok 10 - not prune proper checkouts
+# passed all 10 test(s)
+1..10
 *** t2030-unresolve-info.sh ***
 ok 1 - setup
 ok 2 - add records switch clears
@@ -2009,8 +3588,10 @@
 ok 6 - unmerge with plumbing
 ok 7 - rerere and rerere forget
 ok 8 - rerere and rerere forget (subdirectory)
-# passed all 8 test(s)
-1..8
+ok 9 - rerere forget (binary)
+ok 10 - rerere forget (add-add conflict)
+# passed all 10 test(s)
+1..10
 *** t2050-git-dir-relative.sh ***
 ok 1 - Setting up post-commit hook
 ok 2 - post-commit hook used ordinarily
@@ -2076,8 +3657,13 @@
 ok 1 - update-index --nonsense fails
 ok 2 - update-index --nonsense dumps usage
 ok 3 - update-index -h with corrupt index
-# passed all 3 test(s)
-1..3
+ok 4 - --cacheinfo complains of missing arguments
+ok 5 - --cacheinfo does not accept blob null sha1
+ok 6 - --cacheinfo does not accept gitlink null sha1
+ok 7 - --cacheinfo mode,sha1,path (new syntax)
+ok 8 - .lock files cleaned up
+# passed all 8 test(s)
+1..8
 *** t2200-add-update.sh ***
 ok 1 - setup
 ok 2 - update
@@ -2088,15 +3674,16 @@
 ok 7 - cache tree has not been corrupted
 ok 8 - update from a subdirectory
 ok 9 - change gets noticed
-ok 10 - replace a file with a symlink
-ok 11 - add everything changed
-ok 12 - touch and then add -u
-ok 13 - touch and then add explicitly
-ok 14 - add -n -u should not add but just report
-ok 15 - add -u resolves unmerged paths
-ok 16 - "add -u non-existent" should fail
-# passed all 16 test(s)
-1..16
+ok 10 - non-qualified update in subdir updates from the root
+ok 11 - replace a file with a symlink
+ok 12 - add everything changed
+ok 13 - touch and then add -u
+ok 14 - touch and then add explicitly
+ok 15 - add -n -u should not add but just report
+ok 16 - add -u resolves unmerged paths
+ok 17 - "add -u non-existent" should fail
+# passed all 17 test(s)
+1..17
 *** t2201-add-update-typechange.sh ***
 ok 1 - setup
 ok 2 - modify
@@ -2109,8 +3696,9 @@
 *** t2202-add-addremove.sh ***
 ok 1 - setup
 ok 2 - git add --all
-# passed all 2 test(s)
-1..2
+ok 3 - Just "git add" is a no-op
+# passed all 3 test(s)
+1..3
 *** t2203-add-intent.sh ***
 ok 1 - intent to add
 ok 2 - check result of "add -N"
@@ -2119,8 +3707,9 @@
 ok 5 - i-t-a entry is simply ignored
 ok 6 - can commit with an unrelated i-t-a entry in index
 ok 7 - can "commit -a" with an i-t-a entry
-# passed all 7 test(s)
-1..7
+ok 8 - cache-tree invalidates i-t-a paths
+# passed all 8 test(s)
+1..8
 *** t2204-add-ignored.sh ***
 ok 1 - setup
 ok 2 - no complaints for unignored file
@@ -2190,8 +3779,7 @@
 1..6
 *** t3001-ls-files-others-exclude.sh ***
 ok 1 - git ls-files --others with various exclude options.
-ok 2 - git ls-files --others with 
- line endings.
+ok 2 - git ls-files --others with \r\n line endings.
 ok 3 - setup skip-worktree gitignore
 ok 4 - git ls-files --others with various exclude options.
 ok 5 - restore gitignore
@@ -2201,12 +3789,23 @@
 ok 9 - trailing slash in exclude forces directory match (1)
 ok 10 - trailing slash in exclude forces directory match (2)
 ok 11 - negated exclude matches can override previous ones
-ok 12 - subdirectory ignore (setup)
-ok 13 - subdirectory ignore (toplevel)
-ok 14 - subdirectory ignore (l1/l2)
-ok 15 - subdirectory ignore (l1)
-# passed all 15 test(s)
-1..15
+ok 12 - excluded directory overrides content patterns
+ok 13 - negated directory doesn't affect content patterns
+ok 14 - subdirectory ignore (setup)
+ok 15 - subdirectory ignore (toplevel)
+ok 16 - subdirectory ignore (l1/l2)
+ok 17 - subdirectory ignore (l1)
+ok 18 - show/hide empty ignored directory (setup)
+ok 19 - show empty ignored directory with --directory
+ok 20 - hide empty ignored directory with --no-empty-directory
+ok 21 - show/hide empty ignored sub-directory (setup)
+ok 22 - show empty ignored sub-directory with --directory
+ok 23 - hide empty ignored sub-directory with --no-empty-directory
+ok 24 - pattern matches prefix completely
+ok 25 - ls-files with "**" patterns
+ok 26 - ls-files with "**" patterns and no slashes
+# passed all 26 test(s)
+1..26
 *** t3002-ls-files-dashpath.sh ***
 ok 1 - setup
 ok 2 - git ls-files without path restriction.
@@ -2231,8 +3830,9 @@
 ok 2 - ls-files with nonexistent path
 ok 3 - ls-files with nonsense option
 ok 4 - ls-files -h in corrupt repository
-# passed all 4 test(s)
-1..4
+ok 5 - ls-files with absolute paths to symlinks
+# passed all 5 test(s)
+1..5
 *** t3005-ls-files-relative.sh ***
 ok 1 - prepare
 ok 2 - ls-files with mixed levels
@@ -2240,18 +3840,25 @@
 ok 4 - ls-files -o
 # passed all 4 test(s)
 1..4
+*** t3006-ls-files-long.sh ***
+ok 1 - setup
+ok 2 - overly-long path by itself is not a problem
+ok 3 - overly-long path does not replace another by mistake
+# passed all 3 test(s)
+1..3
 *** t3010-ls-files-killed-modified.sh ***
 ok 1 - git update-index --add to add various paths.
 ok 2 - git ls-files -k to show killed files.
-ok 3 - validate git ls-files -k output.
-ok 4 - git ls-files -m to show modified files.
-ok 5 - validate git ls-files -m output.
-# passed all 5 test(s)
-1..5
+ok 3 - git ls-files -k output (w/o icase)
+ok 4 - git ls-files -k output (w/ icase)
+ok 5 - git ls-files -m to show modified files.
+ok 6 - validate git ls-files -m output.
+# passed all 6 test(s)
+1..6
 *** t3020-ls-files-error-unmatch.sh ***
 ok 1 - setup
 ok 2 - git ls-files --error-unmatch should fail with unmatched path.
-ok 3 - git ls-files --error-unmatch should succeed eith matched paths.
+ok 3 - git ls-files --error-unmatch should succeed with matched paths.
 # passed all 3 test(s)
 1..3
 *** t3030-merge-recursive.sh ***
@@ -2281,14 +3888,16 @@
 ok 24 - merge-recursive d/f conflict result
 ok 25 - reset and 3-way merge
 ok 26 - reset and bind merge
-ok 27 - merge removes empty directories
-not ok 28 - merge-recursive simple w/submodule # TODO known breakage
-not ok 29 - merge-recursive simple w/submodule result # TODO known breakage
-ok 30 - merge-recursive copy vs. rename
-not ok 31 - merge-recursive rename vs. rename/symlink # TODO known breakage
+ok 27 - merge-recursive w/ empty work tree - ours has rename
+ok 28 - merge-recursive w/ empty work tree - theirs has rename
+ok 29 - merge removes empty directories
+not ok 30 - merge-recursive simple w/submodule # TODO known breakage
+not ok 31 - merge-recursive simple w/submodule result # TODO known breakage
+ok 32 - merge-recursive copy vs. rename
+not ok 33 - merge-recursive rename vs. rename/symlink # TODO known breakage
 # still have 3 known breakage(s)
-# passed all remaining 28 test(s)
-1..31
+# passed all remaining 30 test(s)
+1..33
 *** t3031-merge-criscross.sh ***
 ok 1 - setup repo with criss-cross history
 ok 2 - recursive merge between F and G, causes segfault
@@ -2308,6 +3917,20 @@
 ok 11 - --ignore-space-at-eol
 # passed all 11 test(s)
 1..11
+*** t3033-merge-toplevel.sh ***
+ok 1 - setup
+ok 2 - merge an octopus into void
+ok 3 - merge an octopus, fast-forward (ff)
+ok 4 - merge octopus, non-fast-forward (ff)
+ok 5 - merge octopus, fast-forward (does not ff)
+ok 6 - merge octopus, non-fast-forward
+ok 7 - merge FETCH_HEAD octopus into void
+ok 8 - merge FETCH_HEAD octopus fast-forward (ff)
+ok 9 - merge FETCH_HEAD octopus non-fast-forward (ff)
+ok 10 - merge FETCH_HEAD octopus fast-forward (does not ff)
+ok 11 - merge FETCH_HEAD octopus non-fast-forward
+# passed all 11 test(s)
+1..11
 *** t3040-subprojects-basic.sh ***
 ok 1 - setup: create superproject
 ok 2 - setup: create subprojects
@@ -2335,6 +3958,218 @@
 ok 3 - git -ls-files --with-tree should add entries from named tree.
 # passed all 3 test(s)
 1..3
+*** t3070-wildmatch.sh ***
+ok 1 - wildmatch:     match 'foo' 'foo'
+ok 2 - wildmatch:  no match 'foo' 'bar'
+ok 3 - wildmatch:     match '' ''
+ok 4 - wildmatch:     match 'foo' '???'
+ok 5 - wildmatch:  no match 'foo' '??'
+ok 6 - wildmatch:     match 'foo' '*'
+ok 7 - wildmatch:     match 'foo' 'f*'
+ok 8 - wildmatch:  no match 'foo' '*f'
+ok 9 - wildmatch:     match 'foo' '*foo*'
+ok 10 - wildmatch:     match 'foobar' '*ob*a*r*'
+ok 11 - wildmatch:     match 'aaaaaaabababab' '*ab'
+ok 12 - wildmatch:     match 'foo*' 'foo\*'
+ok 13 - wildmatch:  no match 'foobar' 'foo\*bar'
+ok 14 - wildmatch:     match 'f\oo' 'f\\oo'
+ok 15 - wildmatch:     match 'ball' '*[al]?'
+ok 16 - wildmatch:  no match 'ten' '[ten]'
+ok 17 - wildmatch:  no match 'ten' '**[!te]'
+ok 18 - wildmatch:  no match 'ten' '**[!ten]'
+ok 19 - wildmatch:     match 'ten' 't[a-g]n'
+ok 20 - wildmatch:  no match 'ten' 't[!a-g]n'
+ok 21 - wildmatch:     match 'ton' 't[!a-g]n'
+ok 22 - wildmatch:     match 'ton' 't[^a-g]n'
+ok 23 - wildmatch:     match 'a]b' 'a[]]b'
+ok 24 - wildmatch:     match 'a-b' 'a[]-]b'
+ok 25 - wildmatch:     match 'a]b' 'a[]-]b'
+ok 26 - wildmatch:  no match 'aab' 'a[]-]b'
+ok 27 - wildmatch:     match 'aab' 'a[]a-]b'
+ok 28 - wildmatch:     match ']' ']'
+ok 29 - wildmatch:  no match 'foo/baz/bar' 'foo*bar'
+ok 30 - wildmatch:  no match 'foo/baz/bar' 'foo**bar'
+ok 31 - wildmatch:  no match 'foobazbar' 'foo**bar'
+ok 32 - wildmatch:     match 'foo/baz/bar' 'foo/**/bar'
+ok 33 - wildmatch:     match 'foo/baz/bar' 'foo/**/**/bar'
+ok 34 - wildmatch:     match 'foo/b/a/z/bar' 'foo/**/bar'
+ok 35 - wildmatch:     match 'foo/b/a/z/bar' 'foo/**/**/bar'
+ok 36 - wildmatch:     match 'foo/bar' 'foo/**/bar'
+ok 37 - wildmatch:     match 'foo/bar' 'foo/**/**/bar'
+ok 38 - wildmatch:  no match 'foo/bar' 'foo?bar'
+ok 39 - wildmatch:  no match 'foo/bar' 'foo[/]bar'
+ok 40 - wildmatch:  no match 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
+ok 41 - wildmatch:     match 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r'
+ok 42 - wildmatch:     match 'foo' '**/foo'
+ok 43 - wildmatch:     match 'XXX/foo' '**/foo'
+ok 44 - wildmatch:     match 'bar/baz/foo' '**/foo'
+ok 45 - wildmatch:  no match 'bar/baz/foo' '*/foo'
+ok 46 - wildmatch:  no match 'foo/bar/baz' '**/bar*'
+ok 47 - wildmatch:     match 'deep/foo/bar/baz' '**/bar/*'
+ok 48 - wildmatch:  no match 'deep/foo/bar/baz/' '**/bar/*'
+ok 49 - wildmatch:     match 'deep/foo/bar/baz/' '**/bar/**'
+ok 50 - wildmatch:  no match 'deep/foo/bar' '**/bar/*'
+ok 51 - wildmatch:     match 'deep/foo/bar/' '**/bar/**'
+ok 52 - wildmatch:  no match 'foo/bar/baz' '**/bar**'
+ok 53 - wildmatch:     match 'foo/bar/baz/x' '*/bar/**'
+ok 54 - wildmatch:  no match 'deep/foo/bar/baz/x' '*/bar/**'
+ok 55 - wildmatch:     match 'deep/foo/bar/baz/x' '**/bar/*/*'
+ok 56 - wildmatch:  no match 'acrt' 'a[c-c]st'
+ok 57 - wildmatch:     match 'acrt' 'a[c-c]rt'
+ok 58 - wildmatch:  no match ']' '[!]-]'
+ok 59 - wildmatch:     match 'a' '[!]-]'
+ok 60 - wildmatch:  no match '' '\'
+ok 61 - wildmatch:  no match '\' '\'
+ok 62 - wildmatch:  no match 'XXX/\' '*/\'
+ok 63 - wildmatch:     match 'XXX/\' '*/\\'
+ok 64 - wildmatch:     match 'foo' 'foo'
+ok 65 - wildmatch:     match '@foo' '@foo'
+ok 66 - wildmatch:  no match 'foo' '@foo'
+ok 67 - wildmatch:     match '[ab]' '\[ab]'
+ok 68 - wildmatch:     match '[ab]' '[[]ab]'
+ok 69 - wildmatch:     match '[ab]' '[[:]ab]'
+ok 70 - wildmatch:  no match '[ab]' '[[::]ab]'
+ok 71 - wildmatch:     match '[ab]' '[[:digit]ab]'
+ok 72 - wildmatch:     match '[ab]' '[\[:]ab]'
+ok 73 - wildmatch:     match '?a?b' '\??\?b'
+ok 74 - wildmatch:     match 'abc' '\a\b\c'
+ok 75 - wildmatch:  no match 'foo' ''
+ok 76 - wildmatch:     match 'foo/bar/baz/to' '**/t[o]'
+ok 77 - wildmatch:     match 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]'
+ok 78 - wildmatch:  no match 'a' '[[:digit:][:upper:][:space:]]'
+ok 79 - wildmatch:     match 'A' '[[:digit:][:upper:][:space:]]'
+ok 80 - wildmatch:     match '1' '[[:digit:][:upper:][:space:]]'
+ok 81 - wildmatch:  no match '1' '[[:digit:][:upper:][:spaci:]]'
+ok 82 - wildmatch:     match ' ' '[[:digit:][:upper:][:space:]]'
+ok 83 - wildmatch:  no match '.' '[[:digit:][:upper:][:space:]]'
+ok 84 - wildmatch:     match '.' '[[:digit:][:punct:][:space:]]'
+ok 85 - wildmatch:     match '5' '[[:xdigit:]]'
+ok 86 - wildmatch:     match 'f' '[[:xdigit:]]'
+ok 87 - wildmatch:     match 'D' '[[:xdigit:]]'
+ok 88 - wildmatch:     match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
+ok 89 - wildmatch:     match '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]'
+ok 90 - wildmatch:     match '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]'
+ok 91 - wildmatch:     match '5' '[a-c[:digit:]x-z]'
+ok 92 - wildmatch:     match 'b' '[a-c[:digit:]x-z]'
+ok 93 - wildmatch:     match 'y' '[a-c[:digit:]x-z]'
+ok 94 - wildmatch:  no match 'q' '[a-c[:digit:]x-z]'
+ok 95 - wildmatch:     match ']' '[\\-^]'
+ok 96 - wildmatch:  no match '[' '[\\-^]'
+ok 97 - wildmatch:     match '-' '[\-_]'
+ok 98 - wildmatch:     match ']' '[\]]'
+ok 99 - wildmatch:  no match '\]' '[\]]'
+ok 100 - wildmatch:  no match '\' '[\]]'
+ok 101 - wildmatch:  no match 'ab' 'a[]b'
+ok 102 - wildmatch:  no match 'a[]b' 'a[]b'
+ok 103 - wildmatch:  no match 'ab[' 'ab['
+ok 104 - wildmatch:  no match 'ab' '[!'
+ok 105 - wildmatch:  no match 'ab' '[-'
+ok 106 - wildmatch:     match '-' '[-]'
+ok 107 - wildmatch:  no match '-' '[a-'
+ok 108 - wildmatch:  no match '-' '[!a-'
+ok 109 - wildmatch:     match '-' '[--A]'
+ok 110 - wildmatch:     match '5' '[--A]'
+ok 111 - wildmatch:     match ' ' '[ --]'
+ok 112 - wildmatch:     match '$' '[ --]'
+ok 113 - wildmatch:     match '-' '[ --]'
+ok 114 - wildmatch:  no match '0' '[ --]'
+ok 115 - wildmatch:     match '-' '[---]'
+ok 116 - wildmatch:     match '-' '[------]'
+ok 117 - wildmatch:  no match 'j' '[a-e-n]'
+ok 118 - wildmatch:     match '-' '[a-e-n]'
+ok 119 - wildmatch:     match 'a' '[!------]'
+ok 120 - wildmatch:  no match '[' '[]-a]'
+ok 121 - wildmatch:     match '^' '[]-a]'
+ok 122 - wildmatch:  no match '^' '[!]-a]'
+ok 123 - wildmatch:     match '[' '[!]-a]'
+ok 124 - wildmatch:     match '^' '[a^bc]'
+ok 125 - wildmatch:     match '-b]' '[a-]b]'
+ok 126 - wildmatch:  no match '\' '[\]'
+ok 127 - wildmatch:     match '\' '[\\]'
+ok 128 - wildmatch:  no match '\' '[!\\]'
+ok 129 - wildmatch:     match 'G' '[A-\\]'
+ok 130 - wildmatch:  no match 'aaabbb' 'b*a'
+ok 131 - wildmatch:  no match 'aabcaa' '*ba*'
+ok 132 - wildmatch:     match ',' '[,]'
+ok 133 - wildmatch:     match ',' '[\\,]'
+ok 134 - wildmatch:     match '\' '[\\,]'
+ok 135 - wildmatch:     match '-' '[,-.]'
+ok 136 - wildmatch:  no match '+' '[,-.]'
+ok 137 - wildmatch:  no match '-.]' '[,-.]'
+ok 138 - wildmatch:     match '2' '[\1-\3]'
+ok 139 - wildmatch:     match '3' '[\1-\3]'
+ok 140 - wildmatch:  no match '4' '[\1-\3]'
+ok 141 - wildmatch:     match '\' '[[-\]]'
+ok 142 - wildmatch:     match '[' '[[-\]]'
+ok 143 - wildmatch:     match ']' '[[-\]]'
+ok 144 - wildmatch:  no match '-' '[[-\]]'
+ok 145 - wildmatch:     match '-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
+ok 146 - wildmatch:  no match '-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
+ok 147 - wildmatch:  no match '-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1' '-*-*-*-*-*-*-12-*-*-*-m-*-*-*'
+ok 148 - wildmatch:     match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
+ok 149 - wildmatch:  no match 'XXX/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1' 'XXX/*/*/*/*/*/*/12/*/*/*/m/*/*/*'
+ok 150 - wildmatch:     match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt' '**/*a*b*g*n*t'
+ok 151 - wildmatch:  no match 'abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz' '**/*a*b*g*n*t'
+ok 152 - wildmatch:  no match 'foo' '*/*/*'
+ok 153 - wildmatch:  no match 'foo/bar' '*/*/*'
+ok 154 - wildmatch:     match 'foo/bba/arr' '*/*/*'
+ok 155 - wildmatch:  no match 'foo/bb/aa/rr' '*/*/*'
+ok 156 - wildmatch:     match 'foo/bb/aa/rr' '**/**/**'
+ok 157 - wildmatch:     match 'abcXdefXghi' '*X*i'
+ok 158 - wildmatch:  no match 'ab/cXd/efXg/hi' '*X*i'
+ok 159 - wildmatch:     match 'ab/cXd/efXg/hi' '*/*X*/*/*i'
+ok 160 - wildmatch:     match 'ab/cXd/efXg/hi' '**/*X*/**/*i'
+ok 161 - pathmatch:     match 'foo' 'foo'
+ok 162 - pathmatch:  no match 'foo' 'fo'
+ok 163 - pathmatch:     match 'foo/bar' 'foo/bar'
+ok 164 - pathmatch:     match 'foo/bar' 'foo/*'
+ok 165 - pathmatch:     match 'foo/bba/arr' 'foo/*'
+ok 166 - pathmatch:     match 'foo/bba/arr' 'foo/**'
+ok 167 - pathmatch:     match 'foo/bba/arr' 'foo*'
+ok 168 - pathmatch:     match 'foo/bba/arr' 'foo**'
+ok 169 - pathmatch:     match 'foo/bba/arr' 'foo/*arr'
+ok 170 - pathmatch:     match 'foo/bba/arr' 'foo/**arr'
+ok 171 - pathmatch:  no match 'foo/bba/arr' 'foo/*z'
+ok 172 - pathmatch:  no match 'foo/bba/arr' 'foo/**z'
+ok 173 - pathmatch:     match 'foo/bar' 'foo?bar'
+ok 174 - pathmatch:     match 'foo/bar' 'foo[/]bar'
+ok 175 - pathmatch:  no match 'foo' '*/*/*'
+ok 176 - pathmatch:  no match 'foo/bar' '*/*/*'
+ok 177 - pathmatch:     match 'foo/bba/arr' '*/*/*'
+ok 178 - pathmatch:     match 'foo/bb/aa/rr' '*/*/*'
+ok 179 - pathmatch:     match 'abcXdefXghi' '*X*i'
+ok 180 - pathmatch:     match 'ab/cXd/efXg/hi' '*/*X*/*/*i'
+ok 181 - pathmatch:     match 'ab/cXd/efXg/hi' '*Xg*i'
+ok 182 - wildmatch:  no match 'a' '[A-Z]'
+ok 183 - wildmatch:     match 'A' '[A-Z]'
+ok 184 - wildmatch:  no match 'A' '[a-z]'
+ok 185 - wildmatch:     match 'a' '[a-z]'
+ok 186 - wildmatch:  no match 'a' '[[:upper:]]'
+ok 187 - wildmatch:     match 'A' '[[:upper:]]'
+ok 188 - wildmatch:  no match 'A' '[[:lower:]]'
+ok 189 - wildmatch:     match 'a' '[[:lower:]]'
+ok 190 - wildmatch:  no match 'A' '[B-Za]'
+ok 191 - wildmatch:     match 'a' '[B-Za]'
+ok 192 - wildmatch:  no match 'A' '[B-a]'
+ok 193 - wildmatch:     match 'a' '[B-a]'
+ok 194 - wildmatch:  no match 'z' '[Z-y]'
+ok 195 - wildmatch:     match 'Z' '[Z-y]'
+ok 196 - iwildmatch:    match 'a' '[A-Z]'
+ok 197 - iwildmatch:    match 'A' '[A-Z]'
+ok 198 - iwildmatch:    match 'A' '[a-z]'
+ok 199 - iwildmatch:    match 'a' '[a-z]'
+ok 200 - iwildmatch:    match 'a' '[[:upper:]]'
+ok 201 - iwildmatch:    match 'A' '[[:upper:]]'
+ok 202 - iwildmatch:    match 'A' '[[:lower:]]'
+ok 203 - iwildmatch:    match 'a' '[[:lower:]]'
+ok 204 - iwildmatch:    match 'A' '[B-Za]'
+ok 205 - iwildmatch:    match 'a' '[B-Za]'
+ok 206 - iwildmatch:    match 'A' '[B-a]'
+ok 207 - iwildmatch:    match 'a' '[B-a]'
+ok 208 - iwildmatch:    match 'z' '[Z-y]'
+ok 209 - iwildmatch:    match 'Z' '[Z-y]'
+# passed all 209 test(s)
+1..209
 *** t3100-ls-tree-restrict.sh ***
 ok 1 - setup
 ok 2 - ls-tree plain
@@ -2374,8 +4209,11 @@
 *** t3102-ls-tree-wildcards.sh ***
 ok 1 - setup
 ok 2 - ls-tree a[a] matches literally
-# passed all 2 test(s)
-1..2
+ok 3 - ls-tree outside prefix
+not ok 4 - ls-tree does not yet support negated pathspec # TODO known breakage
+# still have 1 known breakage(s)
+# passed all remaining 3 test(s)
+1..4
 *** t3103-ls-tree-misc.sh ***
 ok 1 - setup
 ok 2 - ls-tree fails with non-zero exit code on broken tree
@@ -2387,90 +4225,125 @@
 ok 3 - branch -h in broken repository
 ok 4 - git branch abc should create a branch
 ok 5 - git branch a/b/c should create a branch
-ok 6 - git branch -l d/e/f should create a branch and a log
-ok 7 - git branch -d d/e/f should delete a branch and a log
-ok 8 - git branch j/k should work after branch j has been deleted
-ok 9 - git branch l should work after branch l/m has been deleted
-ok 10 - git branch -m dumps usage
-ok 11 - git branch -m m m/m should work
-ok 12 - git branch -m n/n n should work
-ok 13 - git branch -m o/o o should fail when o/p exists
-ok 14 - git branch -m q r/q should fail when r exists
-ok 15 - git branch -M foo bar should fail when bar is checked out
-ok 16 - git branch -M baz bam should succeed when baz is checked out
-ok 17 - git branch -M master should work when master is checked out
-ok 18 - git branch -M master master should work when master is checked out
-ok 19 - git branch -M master2 master2 should work when master is checked out
-ok 20 - git branch -v -d t should work
-ok 21 - git branch -v -m t s should work
-ok 22 - git branch -m -d t s should fail
-ok 23 - git branch --list -d t should fail
-ok 24 - git branch -m q q2 without config should succeed
-ok 25 - git branch -m s/s s should work when s/t is deleted
-ok 26 - config information was renamed, too
-ok 27 - renaming a symref is not allowed
-ok 28 - git branch -m u v should fail when the reflog for u is a symlink
-ok 29 - test tracking setup via --track
-ok 30 - test tracking setup (non-wildcard, matching)
-ok 31 - test tracking setup (non-wildcard, not matching)
-ok 32 - test tracking setup via config
-ok 33 - test overriding tracking setup via --no-track
-ok 34 - no tracking without .fetch entries
-ok 35 - test tracking setup via --track but deeper
-ok 36 - test deleting branch deletes branch config
-ok 37 - test deleting branch without config
-ok 38 - test --track without .fetch entries
-ok 39 - branch from non-branch HEAD w/autosetupmerge=always
-ok 40 - branch from non-branch HEAD w/--track causes failure
-ok 41 - branch from tag w/--track causes failure
-ok 42 - git checkout -b g/h/i -l should create a branch and a log
-ok 43 - checkout -b makes reflog by default
-ok 44 - checkout -b does not make reflog when core.logAllRefUpdates = false
-ok 45 - checkout -b with -l makes reflog when core.logAllRefUpdates = false
-ok 46 - avoid ambiguous track
-ok 47 - autosetuprebase local on a tracked local branch
-ok 48 - autosetuprebase always on a tracked local branch
-ok 49 - autosetuprebase remote on a tracked local branch
-ok 50 - autosetuprebase never on a tracked local branch
-ok 51 - autosetuprebase local on a tracked remote branch
-ok 52 - autosetuprebase never on a tracked remote branch
-ok 53 - autosetuprebase remote on a tracked remote branch
-ok 54 - autosetuprebase always on a tracked remote branch
-ok 55 - autosetuprebase unconfigured on a tracked remote branch
-ok 56 - autosetuprebase unconfigured on a tracked local branch
-ok 57 - autosetuprebase unconfigured on untracked local branch
-ok 58 - autosetuprebase unconfigured on untracked remote branch
-ok 59 - autosetuprebase never on an untracked local branch
-ok 60 - autosetuprebase local on an untracked local branch
-ok 61 - autosetuprebase remote on an untracked local branch
-ok 62 - autosetuprebase always on an untracked local branch
-ok 63 - autosetuprebase never on an untracked remote branch
-ok 64 - autosetuprebase local on an untracked remote branch
-ok 65 - autosetuprebase remote on an untracked remote branch
-ok 66 - autosetuprebase always on an untracked remote branch
-ok 67 - autosetuprebase always on detached HEAD
-ok 68 - detect misconfigured autosetuprebase (bad value)
-ok 69 - detect misconfigured autosetuprebase (no value)
-ok 70 - attempt to delete a branch without base and unmerged to HEAD
-ok 71 - attempt to delete a branch merged to its base
-ok 72 - attempt to delete a branch merged to its base
-ok 73 - use set-upstream on the current branch
-ok 74 - use --edit-description
-ok 75 - detect typo in branch name when using --edit-description
-ok 76 - refuse --edit-description on unborn branch for now
-# passed all 76 test(s)
-1..76
+ok 6 - git branch HEAD should fail
+ok 7 - git branch -l d/e/f should create a branch and a log
+ok 8 - git branch -d d/e/f should delete a branch and a log
+ok 9 - git branch j/k should work after branch j has been deleted
+ok 10 - git branch l should work after branch l/m has been deleted
+ok 11 - git branch -m dumps usage
+ok 12 - git branch -m m m/m should work
+ok 13 - git branch -m n/n n should work
+ok 14 - git branch -m o/o o should fail when o/p exists
+ok 15 - git branch -m o/q o/p should fail when o/p exists
+ok 16 - git branch -M o/q o/p should work when o/p exists
+ok 17 - git branch -m -f o/q o/p should work when o/p exists
+ok 18 - git branch -m q r/q should fail when r exists
+ok 19 - git branch -M foo bar should fail when bar is checked out
+ok 20 - git branch -M baz bam should succeed when baz is checked out
+ok 21 - git branch -M master should work when master is checked out
+ok 22 - git branch -M master master should work when master is checked out
+ok 23 - git branch -M master2 master2 should work when master is checked out
+ok 24 - git branch -v -d t should work
+ok 25 - git branch -v -m t s should work
+ok 26 - git branch -m -d t s should fail
+ok 27 - git branch --list -d t should fail
+ok 28 - git branch --column
+ok 29 - git branch --column with an extremely long branch name
+ok 30 - git branch with column.*
+ok 31 - git branch --column -v should fail
+ok 32 - git branch -v with column.ui ignored
+ok 33 - git branch -m q q2 without config should succeed
+ok 34 - git branch -m s/s s should work when s/t is deleted
+ok 35 - config information was renamed, too
+ok 36 - deleting a symref
+ok 37 - deleting a dangling symref
+ok 38 - deleting a self-referential symref
+ok 39 - renaming a symref is not allowed
+ok 40 - git branch -m u v should fail when the reflog for u is a symlink
+ok 41 - test tracking setup via --track
+ok 42 - test tracking setup (non-wildcard, matching)
+ok 43 - tracking setup fails on non-matching refspec
+ok 44 - test tracking setup via config
+ok 45 - test overriding tracking setup via --no-track
+ok 46 - no tracking without .fetch entries
+ok 47 - test tracking setup via --track but deeper
+ok 48 - test deleting branch deletes branch config
+ok 49 - test deleting branch without config
+ok 50 - test --track without .fetch entries
+ok 51 - branch from non-branch HEAD w/autosetupmerge=always
+ok 52 - branch from non-branch HEAD w/--track causes failure
+ok 53 - branch from tag w/--track causes failure
+ok 54 - --set-upstream-to fails on multiple branches
+ok 55 - --set-upstream-to fails on detached HEAD
+ok 56 - --set-upstream-to fails on a missing dst branch
+ok 57 - --set-upstream-to fails on a missing src branch
+ok 58 - --set-upstream-to fails on a non-ref
+ok 59 - use --set-upstream-to modify HEAD
+ok 60 - use --set-upstream-to modify a particular branch
+ok 61 - --unset-upstream should fail if given a non-existent branch
+ok 62 - test --unset-upstream on HEAD
+ok 63 - --unset-upstream should fail on multiple branches
+ok 64 - --unset-upstream should fail on detached HEAD
+ok 65 - test --unset-upstream on a particular branch
+ok 66 - --set-upstream shows message when creating a new branch that exists as remote-tracking
+ok 67 - --set-upstream with two args only shows the deprecation message
+ok 68 - --set-upstream with one arg only shows the deprecation message if the branch existed
+ok 69 - --set-upstream-to notices an error to set branch as own upstream
+ok 70 - git checkout -b g/h/i -l should create a branch and a log
+ok 71 - checkout -b makes reflog by default
+ok 72 - checkout -b does not make reflog when core.logAllRefUpdates = false
+ok 73 - checkout -b with -l makes reflog when core.logAllRefUpdates = false
+ok 74 - avoid ambiguous track
+ok 75 - autosetuprebase local on a tracked local branch
+ok 76 - autosetuprebase always on a tracked local branch
+ok 77 - autosetuprebase remote on a tracked local branch
+ok 78 - autosetuprebase never on a tracked local branch
+ok 79 - autosetuprebase local on a tracked remote branch
+ok 80 - autosetuprebase never on a tracked remote branch
+ok 81 - autosetuprebase remote on a tracked remote branch
+ok 82 - autosetuprebase always on a tracked remote branch
+ok 83 - autosetuprebase unconfigured on a tracked remote branch
+ok 84 - autosetuprebase unconfigured on a tracked local branch
+ok 85 - autosetuprebase unconfigured on untracked local branch
+ok 86 - autosetuprebase unconfigured on untracked remote branch
+ok 87 - autosetuprebase never on an untracked local branch
+ok 88 - autosetuprebase local on an untracked local branch
+ok 89 - autosetuprebase remote on an untracked local branch
+ok 90 - autosetuprebase always on an untracked local branch
+ok 91 - autosetuprebase never on an untracked remote branch
+ok 92 - autosetuprebase local on an untracked remote branch
+ok 93 - autosetuprebase remote on an untracked remote branch
+ok 94 - autosetuprebase always on an untracked remote branch
+ok 95 - autosetuprebase always on detached HEAD
+ok 96 - detect misconfigured autosetuprebase (bad value)
+ok 97 - detect misconfigured autosetuprebase (no value)
+ok 98 - attempt to delete a branch without base and unmerged to HEAD
+ok 99 - attempt to delete a branch merged to its base
+ok 100 - attempt to delete a branch merged to its base
+ok 101 - use set-upstream on the current branch
+ok 102 - use --edit-description
+ok 103 - detect typo in branch name when using --edit-description
+ok 104 - refuse --edit-description on unborn branch for now
+ok 105 - --merged catches invalid object names
+ok 106 - tracking with unexpected .fetch refspec
+# passed all 106 test(s)
+1..106
 *** t3201-branch-contains.sh ***
 ok 1 - setup
 ok 2 - branch --contains=master
 ok 3 - branch --contains master
 ok 4 - branch --contains=side
-ok 5 - side: branch --merged
-ok 6 - side: branch --no-merged
-ok 7 - master: branch --merged
-ok 8 - master: branch --no-merged
-# passed all 8 test(s)
-1..8
+ok 5 - branch --contains with pattern implies --list
+ok 6 - side: branch --merged
+ok 7 - branch --merged with pattern implies --list
+ok 8 - side: branch --no-merged
+ok 9 - master: branch --merged
+ok 10 - master: branch --no-merged
+ok 11 - branch --no-merged with pattern implies --list
+ok 12 - implicit --list conflicts with modification options
+ok 13 - branch --merged with --verbose
+# passed all 13 test(s)
+1..13
 *** t3202-show-branch-octopus.sh ***
 ok 1 - setup
 ok 2 - show-branch with more than 8 branches
@@ -2490,54 +4363,74 @@
 ok 10 - git branch --list -v pattern shows branch summaries
 ok 11 - git branch -v pattern does not show branch summaries
 ok 12 - git branch shows detached HEAD properly
-# passed all 12 test(s)
-1..12
+ok 13 - git branch shows detached HEAD properly after moving
+ok 14 - git branch shows detached HEAD properly from tag
+ok 15 - git branch shows detached HEAD properly after moving from tag
+# passed all 15 test(s)
+1..15
 *** t3210-pack-refs.sh ***
-ok 1 - prepare a trivial repository
-ok 2 - see if git show-ref works as expected
-ok 3 - see if a branch still exists when packed
-ok 4 - git branch c/d should barf if branch c exists
-ok 5 - see if a branch still exists after git pack-refs --prune
-ok 6 - see if git pack-refs --prune remove ref files
-ok 7 - see if git pack-refs --prune removes empty dirs
-ok 8 - git branch g should work when git branch g/h has been deleted
-ok 9 - git branch i/j/k should barf if branch i exists
-ok 10 - test git branch k after branch k/l/m and k/lm have been deleted
-ok 11 - test git branch n after some branch deletion and pruning
-ok 12 - see if up-to-date packed refs are preserved
-ok 13 - pack, prune and repack
-# passed all 13 test(s)
-1..13
+ok 1 - enable reflogs
+ok 2 - prepare a trivial repository
+ok 3 - see if git show-ref works as expected
+ok 4 - see if a branch still exists when packed
+ok 5 - git branch c/d should barf if branch c exists
+ok 6 - see if a branch still exists after git pack-refs --prune
+ok 7 - see if git pack-refs --prune remove ref files
+ok 8 - see if git pack-refs --prune removes empty dirs
+ok 9 - git branch g should work when git branch g/h has been deleted
+ok 10 - git branch i/j/k should barf if branch i exists
+ok 11 - test git branch k after branch k/l/m and k/lm have been deleted
+ok 12 - test git branch n after some branch deletion and pruning
+ok 13 - see if up-to-date packed refs are preserved
+ok 14 - pack, prune and repack
+ok 15 - explicit pack-refs with dangling packed reference
+ok 16 - delete ref with dangling packed version
+ok 17 - delete ref while another dangling packed ref
+ok 18 - pack ref directly below refs/
+ok 19 - disable reflogs
+ok 20 - create packed foo/bar/baz branch
+ok 21 - notice d/f conflict with existing directory
+ok 22 - existing directory reports concrete ref
+ok 23 - notice d/f conflict with existing ref
+ok 24 - timeout if packed-refs.lock exists
+ok 25 - retry acquiring packed-refs.lock
+# passed all 25 test(s)
+1..25
+*** t3211-peel-ref.sh ***
+ok 1 - create annotated tag in refs/tags
+ok 2 - create annotated tag outside of refs/tags
+ok 3 - set up expected show-ref output
+ok 4 - refs are peeled outside of refs/tags (loose)
+ok 5 - refs are peeled outside of refs/tags (packed)
+ok 6 - create old-style pack-refs without fully-peeled
+ok 7 - refs are peeled outside of refs/tags (old packed)
+ok 8 - peeled refs survive deletion of packed ref
+# passed all 8 test(s)
+1..8
 *** t3300-funny-names.sh ***
-ok 1 - setup expect
-ok 2 - git ls-files no-funny
-ok 3 - setup expect
-ok 4 - git ls-files with-funny
-ok 5 - setup expect
-ok 6 - git ls-files -z with-funny
-ok 7 - setup expect
-ok 8 - git ls-tree with funny
-ok 9 - setup expect
-ok 10 - git diff-index with-funny
-ok 11 - git diff-tree with-funny
-ok 12 - setup expect
-ok 13 - git diff-index -z with-funny
-ok 14 - git diff-tree -z with-funny
-ok 15 - setup expect
-ok 16 - git diff-tree -C with-funny
-ok 17 - setup expect
-ok 18 - git diff-tree delete with-funny
-ok 19 - setup expect
-ok 20 - git diff-tree delete with-funny
-ok 21 - setup expect
-ok 22 - git diff-tree delete with-funny
-ok 23 - setup expect
-ok 24 - git diff-tree rename with-funny applied
-ok 25 - setup expect
-ok 26 - git diff-tree delete with-funny applied
-ok 27 - git apply non-git diff
-# passed all 27 test(s)
-1..27
+ok 1 - setup
+ok 2 - setup: populate index and tree
+ok 3 - ls-files prints space in filename verbatim
+ok 4 - setup: add funny filename
+ok 5 - ls-files quotes funny filename
+ok 6 - ls-files -z does not quote funny filename
+ok 7 - ls-tree quotes funny filename
+ok 8 - diff-index --name-status quotes funny filename
+ok 9 - diff-tree --name-status quotes funny filename
+ok 10 - diff-index -z does not quote funny filename
+ok 11 - diff-tree -z does not quote funny filename
+ok 12 - diff-tree --find-copies-harder quotes funny filename
+ok 13 - setup: remove unfunny index entry
+ok 14 - diff-tree -M quotes funny filename
+ok 15 - diff-index -M -p quotes funny filename
+ok 16 - setup: mode change
+ok 17 - diff-index -M -p with mode change quotes funny filename
+ok 18 - diffstat for rename quotes funny filename
+ok 19 - numstat for rename quotes funny filename
+ok 20 - numstat without -M quotes funny filename
+ok 21 - numstat for non-git rename diff quotes funny filename
+# passed all 21 test(s)
+1..21
 *** t3301-notes.sh ***
 ok 1 - cannot annotate non-existing HEAD
 ok 2 - setup
@@ -2555,126 +4448,138 @@
 ok 14 - add w/no options on existing note morphs into edit
 ok 15 - can overwrite existing note with "git notes add -f"
 ok 16 - show notes
-ok 17 - create multi-line notes (setup)
-ok 18 - show multi-line notes
-ok 19 - create -F notes (setup)
-ok 20 - show -F notes
-ok 21 - Re-adding -F notes without -f fails
-ok 22 - git log --pretty=raw does not show notes
-ok 23 - git log --show-notes
-ok 24 - git log --no-notes
-ok 25 - git format-patch does not show notes
-ok 26 - git format-patch --show-notes does show notes
-ok 27 - git show  does show notes
-ok 28 - git show --pretty does not show notes
-ok 29 - git show --pretty=raw does not show notes
-ok 30 - git show --pretty=short does not show notes
-ok 31 - git show --pretty=medium does not show notes
-ok 32 - git show --pretty=full does not show notes
-ok 33 - git show --pretty=fuller does not show notes
-ok 34 - git show --pretty=format:%s does not show notes
-ok 35 - git show --oneline does not show notes
-ok 36 - setup alternate notes ref
-ok 37 - git log --notes shows default notes
-ok 38 - git log --notes=X shows only X
-ok 39 - git log --notes --notes=X shows both
-ok 40 - git log --no-notes resets default state
-ok 41 - git log --no-notes resets ref list
-ok 42 - create -m notes (setup)
-ok 43 - show -m notes
-ok 44 - remove note with add -f -F /dev/null (setup)
-ok 45 - verify note removal with -F /dev/null
-ok 46 - do not create empty note with -m "" (setup)
-ok 47 - verify non-creation of note with -m ""
-ok 48 - create note with combination of -m and -F
-ok 49 - remove note with "git notes remove" (setup)
-ok 50 - verify note removal with "git notes remove"
-ok 51 - removing non-existing note should not create new commit
-ok 52 - removing more than one
-ok 53 - removing is atomic
-ok 54 - removing with --ignore-missing
-ok 55 - removing with --ignore-missing but bogus ref
-ok 56 - remove reads from --stdin
-ok 57 - remove --stdin is also atomic
-ok 58 - removing with --stdin --ignore-missing
-ok 59 - list notes with "git notes list"
-ok 60 - list notes with "git notes"
-ok 61 - list specific note with "git notes list <object>"
-ok 62 - listing non-existing notes fails
-ok 63 - append to existing note with "git notes append"
-ok 64 - "git notes list" does not expand to "git notes list HEAD"
-ok 65 - appending empty string does not change existing note
-ok 66 - git notes append == add when there is no existing note
-ok 67 - appending empty string to non-existing note does not create note
-ok 68 - create other note on a different notes ref (setup)
-ok 69 - Do not show note on other ref by default
-ok 70 - Do show note when ref is given in GIT_NOTES_REF
-ok 71 - Do show note when ref is given in core.notesRef config
-ok 72 - Do not show note when core.notesRef is overridden
-ok 73 - Show all notes when notes.displayRef=refs/notes/*
-ok 74 - core.notesRef is implicitly in notes.displayRef
-ok 75 - notes.displayRef can be given more than once
-ok 76 - notes.displayRef respects order
-ok 77 - GIT_NOTES_DISPLAY_REF works
-ok 78 - GIT_NOTES_DISPLAY_REF overrides config
-ok 79 - --show-notes=* adds to GIT_NOTES_DISPLAY_REF
-ok 80 - --no-standard-notes
-ok 81 - --standard-notes
-ok 82 - --show-notes=ref accumulates
-ok 83 - Allow notes on non-commits (trees, blobs, tags)
-ok 84 - create note from other note with "git notes add -C"
-ok 85 - create note from non-existing note with "git notes add -C" fails
-ok 86 - create note from other note with "git notes add -c"
-ok 87 - create note from non-existing note with "git notes add -c" fails
-ok 88 - append to note from other note with "git notes append -C"
-ok 89 - create note from other note with "git notes append -c"
-ok 90 - append to note from other note with "git notes append -c"
-ok 91 - copy note with "git notes copy"
-ok 92 - prevent overwrite with "git notes copy"
-ok 93 - allow overwrite with "git notes copy -f"
-ok 94 - cannot copy note from object without notes
-ok 95 - git notes copy --stdin
-ok 96 - git notes copy --for-rewrite (unconfigured)
-ok 97 - git notes copy --for-rewrite (enabled)
-ok 98 - git notes copy --for-rewrite (disabled)
-ok 99 - git notes copy --for-rewrite (overwrite)
-ok 100 - git notes copy --for-rewrite (ignore)
-ok 101 - git notes copy --for-rewrite (append)
-ok 102 - git notes copy --for-rewrite (append two to one)
-ok 103 - git notes copy --for-rewrite (append empty)
-ok 104 - GIT_NOTES_REWRITE_MODE works
-ok 105 - GIT_NOTES_REWRITE_REF works
-ok 106 - GIT_NOTES_REWRITE_REF overrides config
-ok 107 - git notes copy diagnoses too many or too few parameters
-ok 108 - git notes get-ref (no overrides)
-ok 109 - git notes get-ref (core.notesRef)
-ok 110 - git notes get-ref (GIT_NOTES_REF)
-ok 111 - git notes get-ref (--ref)
-# passed all 111 test(s)
-1..111
+ok 17 - show multi-line notes
+ok 18 - show -F notes
+ok 19 - Re-adding -F notes without -f fails
+ok 20 - git log --pretty=raw does not show notes
+ok 21 - git log --show-notes
+ok 22 - git log --no-notes
+ok 23 - git format-patch does not show notes
+ok 24 - git format-patch --show-notes does show notes
+ok 25 - git show  does show notes
+ok 26 - git show --pretty does not show notes
+ok 27 - git show --pretty=raw does not show notes
+ok 28 - git show --pretty=short does not show notes
+ok 29 - git show --pretty=medium does not show notes
+ok 30 - git show --pretty=full does not show notes
+ok 31 - git show --pretty=fuller does not show notes
+ok 32 - git show --pretty=format:%s does not show notes
+ok 33 - git show --oneline does not show notes
+ok 34 - setup alternate notes ref
+ok 35 - git log --notes shows default notes
+ok 36 - git log --notes=X shows only X
+ok 37 - git log --notes --notes=X shows both
+ok 38 - git log --no-notes resets default state
+ok 39 - git log --no-notes resets ref list
+ok 40 - show -m notes
+ok 41 - remove note with add -f -F /dev/null
+ok 42 - do not create empty note with -m ""
+ok 43 - create note with combination of -m and -F
+ok 44 - remove note with "git notes remove"
+ok 45 - removing non-existing note should not create new commit
+ok 46 - removing more than one
+ok 47 - removing is atomic
+ok 48 - removing with --ignore-missing
+ok 49 - removing with --ignore-missing but bogus ref
+ok 50 - remove reads from --stdin
+ok 51 - remove --stdin is also atomic
+ok 52 - removing with --stdin --ignore-missing
+ok 53 - list notes with "git notes list"
+ok 54 - list notes with "git notes"
+ok 55 - list specific note with "git notes list <object>"
+ok 56 - listing non-existing notes fails
+ok 57 - append to existing note with "git notes append"
+ok 58 - "git notes list" does not expand to "git notes list HEAD"
+ok 59 - appending empty string does not change existing note
+ok 60 - git notes append == add when there is no existing note
+ok 61 - appending empty string to non-existing note does not create note
+ok 62 - create other note on a different notes ref (setup)
+ok 63 - Do not show note on other ref by default
+ok 64 - Do show note when ref is given in GIT_NOTES_REF
+ok 65 - Do show note when ref is given in core.notesRef config
+ok 66 - Do not show note when core.notesRef is overridden
+ok 67 - Show all notes when notes.displayRef=refs/notes/*
+ok 68 - core.notesRef is implicitly in notes.displayRef
+ok 69 - notes.displayRef can be given more than once
+ok 70 - notes.displayRef respects order
+ok 71 - GIT_NOTES_DISPLAY_REF works
+ok 72 - GIT_NOTES_DISPLAY_REF overrides config
+ok 73 - --show-notes=* adds to GIT_NOTES_DISPLAY_REF
+ok 74 - --no-standard-notes
+ok 75 - --standard-notes
+ok 76 - --show-notes=ref accumulates
+ok 77 - Allow notes on non-commits (trees, blobs, tags)
+ok 78 - create note from other note with "git notes add -C"
+ok 79 - create note from non-existing note with "git notes add -C" fails
+ok 80 - create note from non-blob with "git notes add -C" fails
+ok 81 - create note from blob with "git notes add -C" reuses blob id
+ok 82 - create note from other note with "git notes add -c"
+ok 83 - create note from non-existing note with "git notes add -c" fails
+ok 84 - append to note from other note with "git notes append -C"
+ok 85 - create note from other note with "git notes append -c"
+ok 86 - append to note from other note with "git notes append -c"
+ok 87 - copy note with "git notes copy"
+ok 88 - prevent overwrite with "git notes copy"
+ok 89 - allow overwrite with "git notes copy -f"
+ok 90 - cannot copy note from object without notes
+ok 91 - git notes copy --stdin
+ok 92 - git notes copy --for-rewrite (unconfigured)
+ok 93 - git notes copy --for-rewrite (enabled)
+ok 94 - git notes copy --for-rewrite (disabled)
+ok 95 - git notes copy --for-rewrite (overwrite)
+ok 96 - git notes copy --for-rewrite (ignore)
+ok 97 - git notes copy --for-rewrite (append)
+ok 98 - git notes copy --for-rewrite (append two to one)
+ok 99 - git notes copy --for-rewrite (append empty)
+ok 100 - GIT_NOTES_REWRITE_MODE works
+ok 101 - GIT_NOTES_REWRITE_REF works
+ok 102 - GIT_NOTES_REWRITE_REF overrides config
+ok 103 - git notes copy diagnoses too many or too few parameters
+ok 104 - git notes get-ref (no overrides)
+ok 105 - git notes get-ref (core.notesRef)
+ok 106 - git notes get-ref (GIT_NOTES_REF)
+ok 107 - git notes get-ref (--ref)
+ok 108 - setup testing of empty notes
+ok 109 - 'git notes add' removes empty note
+ok 110 - 'git notes add --allow-empty' stores empty note
+ok 111 - 'git notes add -F /dev/null' removes empty note
+ok 112 - 'git notes add -F /dev/null --allow-empty' stores empty note
+ok 113 - 'git notes add -m ""' removes empty note
+ok 114 - 'git notes add -m "" --allow-empty' stores empty note
+ok 115 - 'git notes add -c "$empty_blob"' removes empty note
+ok 116 - 'git notes add -c "$empty_blob" --allow-empty' stores empty note
+ok 117 - 'git notes add -C "$empty_blob"' removes empty note
+ok 118 - 'git notes add -C "$empty_blob" --allow-empty' stores empty note
+ok 119 - 'git notes append' removes empty note
+ok 120 - 'git notes append --allow-empty' stores empty note
+ok 121 - 'git notes append -F /dev/null' removes empty note
+ok 122 - 'git notes append -F /dev/null --allow-empty' stores empty note
+ok 123 - 'git notes append -m ""' removes empty note
+ok 124 - 'git notes append -m "" --allow-empty' stores empty note
+ok 125 - 'git notes append -c "$empty_blob"' removes empty note
+ok 126 - 'git notes append -c "$empty_blob" --allow-empty' stores empty note
+ok 127 - 'git notes append -C "$empty_blob"' removes empty note
+ok 128 - 'git notes append -C "$empty_blob" --allow-empty' stores empty note
+ok 129 - 'git notes edit' removes empty note
+ok 130 - 'git notes edit --allow-empty' stores empty note
+ok 131 - empty notes are displayed by git log
+# passed all 131 test(s)
+1..131
 *** t3302-notes-index-expensive.sh ***
-ok 1 - setup / mkdir
-ok 2 - setup 10
-ok 3 - notes work
-ok 4 - notes timing with /usr/bin/time
-ok 5 - teardown / cd ..
-ok 6 # skip setup / mkdir (missing EXPENSIVE)
-ok 7 # skip setup 100 (missing EXPENSIVE)
+ok 1 - setup 10
+ok 2 - notes work
+ok 3 - notes timing with /usr/bin/time
+ok 4 # skip setup 100 (missing EXPENSIVE)
+ok 5 # skip notes work (missing EXPENSIVE)
+ok 6 # skip notes timing with /usr/bin/time (missing EXPENSIVE of USR_BIN_TIME,EXPENSIVE)
+ok 7 # skip setup 1000 (missing EXPENSIVE)
 ok 8 # skip notes work (missing EXPENSIVE)
 ok 9 # skip notes timing with /usr/bin/time (missing EXPENSIVE of USR_BIN_TIME,EXPENSIVE)
-ok 10 # skip teardown / cd .. (missing EXPENSIVE)
-ok 11 # skip setup / mkdir (missing EXPENSIVE)
-ok 12 # skip setup 1000 (missing EXPENSIVE)
-ok 13 # skip notes work (missing EXPENSIVE)
-ok 14 # skip notes timing with /usr/bin/time (missing EXPENSIVE of USR_BIN_TIME,EXPENSIVE)
-ok 15 # skip teardown / cd .. (missing EXPENSIVE)
-ok 16 # skip setup / mkdir (missing EXPENSIVE)
-ok 17 # skip setup 10000 (missing EXPENSIVE)
-ok 18 # skip notes work (missing EXPENSIVE)
-ok 19 # skip notes timing with /usr/bin/time (missing EXPENSIVE of USR_BIN_TIME,EXPENSIVE)
-ok 20 # skip teardown / cd .. (missing EXPENSIVE)
-# passed all 20 test(s)
-1..20
+ok 10 # skip setup 10000 (missing EXPENSIVE)
+ok 11 # skip notes work (missing EXPENSIVE)
+ok 12 # skip notes timing with /usr/bin/time (missing EXPENSIVE of USR_BIN_TIME,EXPENSIVE)
+# passed all 12 test(s)
+1..12
 *** t3303-notes-subtrees.sh ***
 ok 1 - setup: create 100 commits
 ok 2 - test notes in 2/38-fanout
@@ -2771,17 +4676,31 @@
 ok 6 - setup remote branch (z)
 ok 7 - verify state of remote branch (z)
 ok 8 - merge z into y with invalid strategy => Fail/No changes
-ok 9 - merge z into y with "ours" strategy => Non-conflicting 3-way merge
-ok 10 - reset to pre-merge state (y)
-ok 11 - merge z into y with "theirs" strategy => Non-conflicting 3-way merge
-ok 12 - reset to pre-merge state (y)
-ok 13 - merge z into y with "union" strategy => Non-conflicting 3-way merge
-ok 14 - reset to pre-merge state (y)
-ok 15 - merge y into z with "union" strategy => Non-conflicting 3-way merge
-ok 16 - reset to pre-merge state (z)
-ok 17 - merge y into z with "cat_sort_uniq" strategy => Non-conflicting 3-way merge
-# passed all 17 test(s)
-1..17
+ok 9 - merge z into y with invalid configuration option => Fail/No changes
+ok 10 - merge z into y with "ours" strategy => Non-conflicting 3-way merge
+ok 11 - reset to pre-merge state (y)
+ok 12 - merge z into y with "ours" configuration option => Non-conflicting 3-way merge
+ok 13 - reset to pre-merge state (y)
+ok 14 - merge z into y with "ours" per-ref configuration option => Non-conflicting 3-way merge
+ok 15 - reset to pre-merge state (y)
+ok 16 - merge z into y with "theirs" strategy => Non-conflicting 3-way merge
+ok 17 - reset to pre-merge state (y)
+ok 18 - merge z into y with "theirs" strategy overriding configuration option "ours" => Non-conflicting 3-way merge
+ok 19 - reset to pre-merge state (y)
+ok 20 - merge z into y with "union" strategy => Non-conflicting 3-way merge
+ok 21 - reset to pre-merge state (y)
+ok 22 - merge z into y with "union" strategy overriding per-ref configuration => Non-conflicting 3-way merge
+ok 23 - reset to pre-merge state (y)
+ok 24 - merge z into y with "union" per-ref overriding general configuration => Non-conflicting 3-way merge
+ok 25 - reset to pre-merge state (y)
+ok 26 - merge z into y with "manual" per-ref only checks specific ref configuration => Conflicting 3-way merge
+ok 27 - merge y into z with "union" strategy => Non-conflicting 3-way merge
+ok 28 - reset to pre-merge state (z)
+ok 29 - merge y into z with "cat_sort_uniq" strategy => Non-conflicting 3-way merge
+ok 30 - reset to pre-merge state (z)
+ok 31 - merge y into z with "cat_sort_uniq" strategy configuration option => Non-conflicting 3-way merge
+# passed all 31 test(s)
+1..31
 *** t3310-notes-merge-manual-resolve.sh ***
 ok 1 - setup commits
 ok 2 - setup merge base (x)
@@ -2792,17 +4711,21 @@
 ok 7 - cannot do merge w/conflicts when previous merge is unfinished
 ok 8 - setup unrelated notes ref (w)
 ok 9 - can do merge without conflicts even if previous merge is unfinished (x => w)
-ok 10 - finalize conflicting merge (z => m)
-ok 11 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
-ok 12 - abort notes merge
-ok 13 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
-ok 14 - add + remove notes in finalized merge (z => m)
-ok 15 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
-ok 16 - reset notes ref m to somewhere else (w)
-ok 17 - fail to finalize conflicting merge if underlying ref has moved in the meantime (m != NOTES_MERGE_PARTIAL^1)
-ok 18 - resolve situation by aborting the notes merge
-# passed all 18 test(s)
-1..18
+ok 10 - do not allow mixing --commit and --abort
+ok 11 - do not allow mixing --commit and --strategy
+ok 12 - do not allow mixing --abort and --strategy
+ok 13 - finalize conflicting merge (z => m)
+ok 14 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
+ok 15 - abort notes merge
+ok 16 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
+ok 17 - add + remove notes in finalized merge (z => m)
+ok 18 - redo merge of z into m (== y) with default ("manual") resolver => Conflicting 3-way merge
+ok 19 - reset notes ref m to somewhere else (w)
+ok 20 - fail to finalize conflicting merge if underlying ref has moved in the meantime (m != NOTES_MERGE_PARTIAL^1)
+ok 21 - resolve situation by aborting the notes merge
+ok 22 - switch cwd before committing notes merge
+# passed all 22 test(s)
+1..22
 *** t3311-notes-merge-fanout.sh ***
 ok 1 - setup a few initial commits with notes (notes ref: x)
 ok 2 - sanity check (x)
@@ -2830,42 +4753,44 @@
 ok 24 - notes tree still has fanout after merge (m)
 # passed all 24 test(s)
 1..24
+*** t3320-notes-merge-worktrees.sh ***
+ok 1 - setup commit
+ok 2 - setup notes ref (x)
+ok 3 - setup local branch (y)
+ok 4 - setup remote branch (z)
+ok 5 - modify notes ref ourselves (x)
+ok 6 - create some new worktrees
+ok 7 - merge z into y fails and sets NOTES_MERGE_REF
+ok 8 - merge z into y while mid-merge in another workdir fails
+ok 9 - merge z into x while mid-merge on y succeeds
+# passed all 9 test(s)
+1..9
 *** t3400-rebase.sh ***
 ok 1 - prepare repository with topic branches
 ok 2 - rebase on dirty worktree
 ok 3 - rebase on dirty cache
 ok 4 - rebase against master
-ok 5 - rebase against master twice
-ok 6 - rebase against master twice with --force
-ok 7 - rebase against master twice from another branch
-ok 8 - rebase fast-forward to master
-ok 9 - the rebase operation should not have destroyed author information
-ok 10 - the rebase operation should not have destroyed author information (2)
-ok 11 - HEAD was detached during rebase
-ok 12 - rebase after merge master
-ok 13 - rebase of history with merges is linearized
-ok 14 - rebase of history with merges after upstream merge is linearized
-ok 15 - rebase a single mode change
-ok 16 - rebase is not broken by diff.renames
-ok 17 - setup: recover
-ok 18 - Show verbose error when HEAD could not be detached
-ok 19 - fail when upstream arg is missing and not on branch
-ok 20 - fail when upstream arg is missing and not configured
-ok 21 - default to @{upstream} when upstream arg is missing
-ok 22 - rebase -q is quiet
-ok 23 - Rebase a commit that sprinkles CRs in
-ok 24 - rebase can copy notes
-ok 25 - rebase -m can copy notes
-ok 26 - rebase commit with an ancient timestamp
-# passed all 26 test(s)
-1..26
-*** t3401-rebase-partial.sh ***
-ok 1 - prepare repository with topic branch
-ok 2 - pick top patch from topic branch into master
-ok 3 - rebase topic branch against new master and check git am did not get halted
-ok 4 - rebase --merge topic branch that was partially merged upstream
-# passed all 4 test(s)
-1..4
+ok 5 - rebase, with <onto> and <upstream> specified as :/quuxery
+ok 6 - the rebase operation should not have destroyed author information
+ok 7 - the rebase operation should not have destroyed author information (2)
+ok 8 - HEAD was detached during rebase
+ok 9 - rebase from ambiguous branch name
+ok 10 - rebase off of the previous branch using "-"
+ok 11 - rebase a single mode change
+ok 12 - rebase is not broken by diff.renames
+ok 13 - setup: recover
+ok 14 - Show verbose error when HEAD could not be detached
+ok 15 - fail when upstream arg is missing and not on branch
+ok 16 - fail when upstream arg is missing and not configured
+ok 17 - default to common base in @{upstream}s reflog if no upstream arg
+ok 18 - cherry-picked commits and fork-point work together
+ok 19 - rebase -q is quiet
+ok 20 - Rebase a commit that sprinkles CRs in
+ok 21 - rebase can copy notes
+ok 22 - rebase -m can copy notes
+ok 23 - rebase commit with an ancient timestamp
+# passed all 23 test(s)
+1..23
 *** t3402-rebase-merge.sh ***
 ok 1 - setup
 ok 2 - reference merge
@@ -2877,8 +4802,9 @@
 ok 8 - merge and rebase should match
 ok 9 - picking rebase
 ok 10 - rebase -s funny -Xopt
-# passed all 10 test(s)
-1..10
+ok 11 - rebase --skip works with two conflicts in a row
+# passed all 11 test(s)
+1..11
 *** t3403-rebase-skip.sh ***
 ok 1 - setup
 ok 2 - rebase with git am -3 (default)
@@ -2894,72 +4820,116 @@
 1..10
 *** t3404-rebase-interactive.sh ***
 ok 1 - setup
-ok 2 - rebase -i with the exec command
-ok 3 - rebase -i with the exec command runs from tree root
-ok 4 - rebase -i with the exec command checks tree cleanness
-ok 5 - no changes are a nop
-ok 6 - test the [branch] option
-ok 7 - test --onto <branch>
-ok 8 - rebase on top of a non-conflicting commit
-ok 9 - reflog for the branch shows state before rebase
-ok 10 - exchange two commits
-ok 11 - stop on conflicting pick
-ok 12 - abort
-ok 13 - abort with error when new base cannot be checked out
-ok 14 - retain authorship
-ok 15 - squash
-ok 16 - retain authorship when squashing
-ok 17 - -p handles "no changes" gracefully
-not ok 18 - exchange two commits with -p # TODO known breakage
-ok 19 - preserve merges with -p
-ok 20 - edit ancestor with -p
-ok 21 - --continue tries to commit
-ok 22 - verbose flag is heeded, even after --continue
-ok 23 - multi-squash only fires up editor once
-ok 24 - multi-fixup does not fire up editor
-ok 25 - commit message used after conflict
-ok 26 - commit message retained after conflict
-ok 27 - squash and fixup generate correct log messages
-ok 28 - squash ignores comments
-ok 29 - squash ignores blank lines
-ok 30 - squash works as expected
-ok 31 - interrupted squash works as expected
-ok 32 - interrupted squash works as expected (case 2)
-ok 33 - ignore patch if in upstream
-ok 34 - --continue tries to commit, even for "edit"
-ok 35 - aborted --continue does not squash commits after "edit"
-ok 36 - auto-amend only edited commits after "edit"
-ok 37 - clean error after failed "exec"
-ok 38 - rebase a detached HEAD
-ok 39 - rebase a commit violating pre-commit
-ok 40 - rebase with a file named HEAD in worktree
-ok 41 - do "noop" when there is nothing to cherry-pick
-ok 42 - submodule rebase setup
-ok 43 - submodule rebase -i
-ok 44 - avoid unnecessary reset
-ok 45 - reword
-ok 46 - rebase -i can copy notes
-ok 47 - rebase -i can copy notes over a fixup
-ok 48 - rebase while detaching HEAD
-ok 49 - always cherry-pick with --no-ff
-ok 50 - set up commits with funny messages
-ok 51 - rebase-i history with funny messages
+ok 2 - rebase --keep-empty
+ok 3 - rebase -i with the exec command
+ok 4 - rebase -i with the exec command runs from tree root
+ok 5 - rebase -i with the exec command checks tree cleanness
+ok 6 - rebase -i with exec of inexistent command
+ok 7 - no changes are a nop
+ok 8 - test the [branch] option
+ok 9 - test --onto <branch>
+ok 10 - rebase on top of a non-conflicting commit
+ok 11 - reflog for the branch shows state before rebase
+ok 12 - exchange two commits
+ok 13 - stop on conflicting pick
+ok 14 - abort
+ok 15 - abort with error when new base cannot be checked out
+ok 16 - retain authorship
+ok 17 - squash
+ok 18 - retain authorship when squashing
+ok 19 - -p handles "no changes" gracefully
+not ok 20 - exchange two commits with -p # TODO known breakage
+ok 21 - preserve merges with -p
+ok 22 - edit ancestor with -p
+ok 23 - --continue tries to commit
+ok 24 - verbose flag is heeded, even after --continue
+ok 25 - multi-squash only fires up editor once
+ok 26 - multi-fixup does not fire up editor
+ok 27 - commit message used after conflict
+ok 28 - commit message retained after conflict
+ok 29 - squash and fixup generate correct log messages
+ok 30 - squash ignores comments
+ok 31 - squash ignores blank lines
+ok 32 - squash works as expected
+ok 33 - interrupted squash works as expected
+ok 34 - interrupted squash works as expected (case 2)
+ok 35 - --continue tries to commit, even for "edit"
+ok 36 - aborted --continue does not squash commits after "edit"
+ok 37 - auto-amend only edited commits after "edit"
+ok 38 - clean error after failed "exec"
+ok 39 - rebase a detached HEAD
+ok 40 - rebase a commit violating pre-commit
+ok 41 - rebase with a file named HEAD in worktree
+ok 42 - do "noop" when there is nothing to cherry-pick
+ok 43 - submodule rebase setup
+ok 44 - submodule rebase -i
+ok 45 - submodule conflict setup
+ok 46 - rebase -i continue with only submodule staged
+ok 47 - rebase -i continue with unstaged submodule
+ok 48 - avoid unnecessary reset
+ok 49 - reword
+ok 50 - rebase -i can copy notes
+ok 51 - rebase -i can copy notes over a fixup
+ok 52 - rebase while detaching HEAD
+ok 53 - always cherry-pick with --no-ff
+ok 54 - set up commits with funny messages
+ok 55 - rebase-i history with funny messages
+ok 56 - prepare for rebase -i --exec
+ok 57 - running "git rebase -i --exec git show HEAD"
+ok 58 - running "git rebase --exec git show HEAD -i"
+ok 59 - running "git rebase -ix git show HEAD"
+ok 60 - rebase -ix with several <CMD>
+ok 61 - rebase -ix with several instances of --exec
+ok 62 - rebase -ix with --autosquash
+ok 63 - rebase --exec without -i shows error message
+ok 64 - rebase -i --exec without <CMD>
+ok 65 - rebase -i --root re-order and drop commits
+ok 66 - rebase -i --root retain root commit author and message
+ok 67 - rebase -i --root temporary sentinel commit
+ok 68 - rebase -i --root fixup root commit
+ok 69 - rebase --edit-todo does not works on non-interactive rebase
+ok 70 - rebase --edit-todo can be used to modify todo
+ok 71 - rebase -i produces readable reflog
+ok 72 - rebase -i respects core.commentchar
+ok 73 - rebase -i, with <onto> and <upstream> specified as :/quuxery
+ok 74 - rebase -i with --strategy and -X
+ok 75 - rebase -i error on commits with \ in message
+ok 76 - short SHA-1 setup
+ok 77 - short SHA-1 collide
+ok 78 - respect core.abbrev
+ok 79 - todo count
+ok 80 - rebase -i commits that overwrite untracked files (pick)
+ok 81 - rebase -i commits that overwrite untracked files (squash)
+ok 82 - rebase -i commits that overwrite untracked files (no ff)
+ok 83 - rebase --continue removes CHERRY_PICK_HEAD
+ok 84 - drop
+ok 85 - rebase -i respects rebase.missingCommitsCheck = ignore
+ok 86 - rebase -i respects rebase.missingCommitsCheck = warn
+ok 87 - rebase -i respects rebase.missingCommitsCheck = error
+ok 88 - static check of bad command
+ok 89 - static check of bad SHA-1
 # still have 1 known breakage(s)
-# passed all remaining 50 test(s)
-1..51
+# passed all remaining 88 test(s)
+1..89
 *** t3405-rebase-malformed.sh ***
 ok 1 - setup
-ok 2 - rebase
-# passed all 2 test(s)
-1..2
+ok 2 - rebase commit with multi-line subject
+ok 3 - rebase commit with diff in message
+# passed all 3 test(s)
+1..3
 *** t3406-rebase-message.sh ***
 ok 1 - setup
 ok 2 - rebase -m
-ok 3 - rebase --stat
-ok 4 - rebase w/config rebase.stat
-ok 5 - rebase -n overrides config rebase.stat config
-# passed all 5 test(s)
-1..5
+ok 3 - rebase against master twice
+ok 4 - rebase against master twice with --force
+ok 5 - rebase against master twice from another branch
+ok 6 - rebase fast-forward to master
+ok 7 - rebase --stat
+ok 8 - rebase w/config rebase.stat
+ok 9 - rebase -n overrides config rebase.stat config
+ok 10 - rebase --onto outputs the invalid ref
+# passed all 10 test(s)
+1..10
 *** t3407-rebase-abort.sh ***
 ok 1 - setup
 ok 2 - rebase --abort
@@ -2981,12 +4951,11 @@
 1..2
 *** t3409-rebase-preserve-merges.sh ***
 ok 1 - setup for merge-preserving rebase
-ok 2 - rebase -p fakes interactive rebase
-ok 3 - --continue works after a conflict
-ok 4 - rebase -p preserves no-ff merges
-ok 5 - rebase -p works when base inside second parent
-# passed all 5 test(s)
-1..5
+ok 2 - --continue works after a conflict
+ok 3 - rebase -p preserves no-ff merges
+ok 4 - rebase -p ignores merge.log config
+# passed all 4 test(s)
+1..4
 *** t3410-rebase-preserve-dropped-merges.sh ***
 ok 1 - setup
 ok 2 - skip same-resolution merges with -p
@@ -3001,7 +4970,7 @@
 1..3
 *** t3412-rebase-root.sh ***
 ok 1 - prepare repository
-ok 2 - rebase --root expects --onto
+ok 2 - rebase --root fails with too many args
 ok 3 - setup pre-rebase hook
 ok 4 - rebase --root --onto <newbase>
 ok 5 - pre-rebase got correct input (1)
@@ -3071,8 +5040,13 @@
 ok 10 - auto squash that matches longer sha1
 ok 11 - use commit --fixup
 ok 12 - use commit --squash
-# passed all 12 test(s)
-1..12
+ok 13 - fixup! fixup!
+ok 14 - fixup! squash!
+ok 15 - squash! squash!
+ok 16 - squash! fixup!
+ok 17 - autosquash with custom inst format
+# passed all 17 test(s)
+1..17
 *** t3416-rebase-onto-threedots.sh ***
 ok 1 - setup
 ok 2 - rebase --onto master...topic
@@ -3094,11 +5068,12 @@
 ok 1 - setup
 ok 2 - interactive rebase --continue works with touched file
 ok 3 - non-interactive rebase --continue works with touched file
-ok 4 - rebase --continue can not be used with other options
-ok 5 - rebase --continue remembers merge strategy and options
-ok 6 - rebase --continue remembers --rerere-autoupdate
-# passed all 6 test(s)
-1..6
+ok 4 - non-interactive rebase --continue with rerere enabled
+ok 5 - rebase --continue can not be used with other options
+ok 6 - rebase --continue remembers merge strategy and options
+ok 7 - rebase --continue remembers --rerere-autoupdate
+# passed all 7 test(s)
+1..7
 *** t3419-rebase-patch-id.sh ***
 ok 1 - setup
 ok 2 - setup: 500 lines
@@ -3111,6 +5086,179 @@
 ok 9 # skip do not drop patch (missing EXPENSIVE)
 # passed all 9 test(s)
 1..9
+*** t3420-rebase-autostash.sh ***
+ok 1 - setup
+ok 2 - rebase: fast-forward rebase
+ok 3 - rebase: noop rebase
+ok 4 - rebase: dirty worktree, non-conflicting rebase
+ok 5 - rebase: dirty index, non-conflicting rebase
+ok 6 - rebase: conflicting rebase
+ok 7 - rebase: --continue
+ok 8 - rebase: --skip
+ok 9 - rebase: --abort
+ok 10 - rebase: non-conflicting rebase, conflicting stash
+ok 11 - rebase --merge: dirty worktree, non-conflicting rebase
+ok 12 - rebase --merge: dirty index, non-conflicting rebase
+ok 13 - rebase --merge: conflicting rebase
+ok 14 - rebase --merge: --continue
+ok 15 - rebase --merge: --skip
+ok 16 - rebase --merge: --abort
+ok 17 - rebase --merge: non-conflicting rebase, conflicting stash
+ok 18 - rebase --interactive: dirty worktree, non-conflicting rebase
+ok 19 - rebase --interactive: dirty index, non-conflicting rebase
+ok 20 - rebase --interactive: conflicting rebase
+ok 21 - rebase --interactive: --continue
+ok 22 - rebase --interactive: --skip
+ok 23 - rebase --interactive: --abort
+ok 24 - rebase --interactive: non-conflicting rebase, conflicting stash
+ok 25 - abort rebase -i with --autostash
+# passed all 25 test(s)
+1..25
+*** t3421-rebase-topology-linear.sh ***
+ok 1 - setup
+ok 2 - simple rebase 
+ok 3 - simple rebase -m
+ok 4 - simple rebase -i
+ok 5 - simple rebase -p
+ok 6 - rebase  is no-op if upstream is an ancestor
+ok 7 - rebase -m is no-op if upstream is an ancestor
+ok 8 - rebase -i is no-op if upstream is an ancestor
+ok 9 - rebase -p is no-op if upstream is an ancestor
+ok 10 - rebase  -f rewrites even if upstream is an ancestor
+ok 11 - rebase -m -f rewrites even if upstream is an ancestor
+ok 12 - rebase -i -f rewrites even if upstream is an ancestor
+not ok 13 - rebase -p -f rewrites even if upstream is an ancestor # TODO known breakage
+ok 14 - rebase  fast-forwards from ancestor of upstream
+ok 15 - rebase -m fast-forwards from ancestor of upstream
+ok 16 - rebase -i fast-forwards from ancestor of upstream
+ok 17 - rebase -p fast-forwards from ancestor of upstream
+ok 18 - setup of linear history for range selection tests
+ok 19 - rebase  drops patches in upstream
+not ok 20 - rebase -m drops patches in upstream # TODO known breakage
+ok 21 - rebase -i drops patches in upstream
+ok 22 - rebase -p drops patches in upstream
+ok 23 - rebase  can drop last patch if in upstream
+not ok 24 - rebase -m can drop last patch if in upstream # TODO known breakage
+ok 25 - rebase -i can drop last patch if in upstream
+ok 26 - rebase -p can drop last patch if in upstream
+ok 27 - rebase  --onto drops patches in upstream
+not ok 28 - rebase -m --onto drops patches in upstream # TODO known breakage
+ok 29 - rebase -i --onto drops patches in upstream
+ok 30 - rebase -p --onto drops patches in upstream
+ok 31 - rebase  --onto does not drop patches in onto
+ok 32 - rebase -m --onto does not drop patches in onto
+ok 33 - rebase -i --onto does not drop patches in onto
+ok 34 - rebase -p --onto does not drop patches in onto
+ok 35 - setup of linear history for empty commit tests
+ok 36 - rebase  drops empty commit
+ok 37 - rebase -m drops empty commit
+ok 38 - rebase -i drops empty commit
+ok 39 - rebase -p drops empty commit
+ok 40 - rebase  --keep-empty
+not ok 41 - rebase -m --keep-empty # TODO known breakage
+ok 42 - rebase -i --keep-empty
+not ok 43 - rebase -p --keep-empty # TODO known breakage
+ok 44 - rebase  --keep-empty keeps empty even if already in upstream
+not ok 45 - rebase -m --keep-empty keeps empty even if already in upstream # TODO known breakage
+not ok 46 - rebase -i --keep-empty keeps empty even if already in upstream # TODO known breakage
+not ok 47 - rebase -p --keep-empty keeps empty even if already in upstream # TODO known breakage
+ok 48 - setup of linear history for test involving root
+ok 49 - rebase  --onto --root
+not ok 50 - rebase -m --onto --root # TODO known breakage
+ok 51 - rebase -i --onto --root
+ok 52 - rebase -p --onto --root
+ok 53 - rebase  without --onto --root with disjoint history
+not ok 54 - rebase -m without --onto --root with disjoint history # TODO known breakage
+ok 55 - rebase -i without --onto --root with disjoint history
+not ok 56 - rebase -p without --onto --root with disjoint history # TODO known breakage
+ok 57 - rebase  --onto --root drops patch in onto
+not ok 58 - rebase -m --onto --root drops patch in onto # TODO known breakage
+ok 59 - rebase -i --onto --root drops patch in onto
+ok 60 - rebase -p --onto --root drops patch in onto
+ok 61 - rebase  --onto --root with merge-base does not go to root
+ok 62 - rebase -m --onto --root with merge-base does not go to root
+ok 63 - rebase -i --onto --root with merge-base does not go to root
+not ok 64 - rebase -p --onto --root with merge-base does not go to root # TODO known breakage
+ok 65 - rebase  without --onto --root with disjoint history drops patch in onto
+not ok 66 - rebase -m without --onto --root with disjoint history drops patch in onto # TODO known breakage
+ok 67 - rebase -i without --onto --root with disjoint history drops patch in onto
+not ok 68 - rebase -p without --onto --root with disjoint history drops patch in onto # TODO known breakage
+not ok 69 - rebase  --root on linear history is a no-op # TODO known breakage
+not ok 70 - rebase -m --root on linear history is a no-op # TODO known breakage
+not ok 71 - rebase -i --root on linear history is a no-op # TODO known breakage
+not ok 72 - rebase -p --root on linear history is a no-op # TODO known breakage
+ok 73 - rebase  -f --root on linear history causes re-write
+ok 74 - rebase -m -f --root on linear history causes re-write
+ok 75 - rebase -i -f --root on linear history causes re-write
+ok 76 - rebase -p -f --root on linear history causes re-write
+# still have 20 known breakage(s)
+# passed all remaining 56 test(s)
+1..76
+*** t3425-rebase-topology-merges.sh ***
+ok 1 - setup of non-linear-history
+ok 2 - rebase  after merge from upstream
+ok 3 - rebase -m after merge from upstream
+ok 4 - rebase -i after merge from upstream
+ok 5 - rebase  of non-linear history is linearized in place
+ok 6 - rebase -m of non-linear history is linearized in place
+ok 7 - rebase -i of non-linear history is linearized in place
+ok 8 - rebase  of non-linear history is linearized upstream
+ok 9 - rebase -m of non-linear history is linearized upstream
+ok 10 - rebase -i of non-linear history is linearized upstream
+ok 11 - rebase  of non-linear history with merges after upstream merge is linearized
+ok 12 - rebase -m of non-linear history with merges after upstream merge is linearized
+ok 13 - rebase -i of non-linear history with merges after upstream merge is linearized
+ok 14 - rebase -p is no-op in non-linear history
+ok 15 - rebase -p is no-op when base inside second parent
+not ok 16 - rebase -p --root on non-linear history is a no-op # TODO known breakage
+ok 17 - rebase -p re-creates merge from side branch
+ok 18 - rebase -p re-creates internal merge
+ok 19 - rebase -p can re-create two branches on onto
+ok 20 - setup of non-linear-history for patch-equivalence tests
+ok 21 - rebase -p re-creates history around dropped commit matching upstream
+ok 22 - rebase -p --onto in merged history drops patches in upstream
+ok 23 - rebase -p --onto in merged history does not drop patches in onto
+ok 24 - setup of non-linear-history for dropping whole side
+not ok 25 - rebase -p drops merge commit when entire first-parent side is dropped # TODO known breakage
+ok 26 - rebase -p drops merge commit when entire second-parent side is dropped
+ok 27 - setup of non-linear-history for empty commits
+ok 28 - rebase -p re-creates empty internal merge commit
+ok 29 - rebase -p re-creates empty merge commit
+# still have 2 known breakage(s)
+# passed all remaining 27 test(s)
+1..29
+*** t3426-rebase-submodule.sh ***
+ok 1 - git_rebase: added submodule creates empty directory
+ok 2 - git_rebase: added submodule leaves existing empty directory alone
+ok 3 - git_rebase: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git_rebase: replace tracked file with submodule creates empty directory
+ok 5 - git_rebase: replace directory with submodule
+ok 6 - git_rebase: removed submodule leaves submodule directory and its contents in place
+ok 7 - git_rebase: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git_rebase: replace submodule with a directory must fail
+ok 9 - git_rebase: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git_rebase: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git_rebase: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git_rebase: modified submodule does not update submodule work tree
+ok 13 - git_rebase: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git_rebase: modified submodule does not update submodule work tree from invalid commit
+ok 15 - git_rebase_interactive: added submodule creates empty directory
+ok 16 - git_rebase_interactive: added submodule leaves existing empty directory alone
+ok 17 - git_rebase_interactive: added submodule doesn't remove untracked unignored file with same name
+ok 18 - git_rebase_interactive: replace tracked file with submodule creates empty directory
+not ok 19 - git_rebase_interactive: replace directory with submodule # TODO known breakage
+ok 20 - git_rebase_interactive: removed submodule leaves submodule directory and its contents in place
+ok 21 - git_rebase_interactive: removed submodule leaves submodule containing a .git directory alone
+ok 22 - git_rebase_interactive: replace submodule with a directory must fail
+ok 23 - git_rebase_interactive: replace submodule containing a .git directory with a directory must fail
+not ok 24 - git_rebase_interactive: replace submodule with a file must fail # TODO known breakage
+not ok 25 - git_rebase_interactive: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - git_rebase_interactive: modified submodule does not update submodule work tree
+ok 27 - git_rebase_interactive: modified submodule does not update submodule work tree to invalid commit
+ok 28 - git_rebase_interactive: modified submodule does not update submodule work tree from invalid commit
+# still have 5 known breakage(s)
+# passed all remaining 23 test(s)
+1..28
 *** t3500-cherry.sh ***
 ok 1 - prepare repository with topic branch, and check cherry finds the 2 patches from there
 ok 2 - check that cherry with limit returns only the top patch
@@ -3125,8 +5273,12 @@
 ok 5 - revert after renaming branch
 ok 6 - cherry-pick on stat-dirty working tree
 ok 7 - revert forbidden on dirty working tree
-# passed all 7 test(s)
-1..7
+ok 8 - cherry-pick on unborn branch
+ok 9 - cherry-pick "-" to pick from previous branch
+ok 10 - cherry-pick "-" is meaningless without checkout
+ok 11 - cherry-pick "-" works with arguments
+# passed all 11 test(s)
+1..11
 *** t3502-cherry-pick-merge.sh ***
 ok 1 - setup
 ok 2 - cherry-pick a non-merge with -m should fail
@@ -3165,8 +5317,15 @@
 ok 3 - index lockfile was removed
 ok 4 - cherry-pick a commit with an empty message
 ok 5 - index lockfile was removed
-# passed all 5 test(s)
-1..5
+ok 6 - cherry-pick a commit with an empty message with --allow-empty-message
+ok 7 - cherry pick an empty non-ff commit without --allow-empty
+ok 8 - cherry pick an empty non-ff commit with --allow-empty
+ok 9 - cherry pick with --keep-redundant-commits
+ok 10 - cherry-pick a commit that becomes no-op (prep)
+ok 11 - cherry-pick a no-op without --keep-redundant
+ok 12 - cherry-pick a no-op with --keep-redundant
+# passed all 12 test(s)
+1..12
 *** t3506-cherry-pick-ff.sh ***
 ok 1 - setup
 ok 2 - cherry-pick using --ff fast forwards
@@ -3178,50 +5337,60 @@
 ok 8 - cherry pick with --ff a merge (2)
 ok 9 - cherry pick a merge relative to nonexistent parent with --ff should fail
 ok 10 - cherry pick a root commit with --ff
-# passed all 10 test(s)
-1..10
+ok 11 - cherry-pick --ff on unborn branch
+# passed all 11 test(s)
+1..11
 *** t3507-cherry-pick-conflict.sh ***
 ok 1 - setup
 ok 2 - failed cherry-pick does not advance HEAD
 ok 3 - advice from failed cherry-pick
-ok 4 - failed cherry-pick sets CHERRY_PICK_HEAD
-ok 5 - successful cherry-pick does not set CHERRY_PICK_HEAD
-ok 6 - cherry-pick --no-commit does not set CHERRY_PICK_HEAD
-ok 7 - cherry-pick w/dirty tree does not set CHERRY_PICK_HEAD
-ok 8 - cherry-pick --strategy=resolve w/dirty tree does not set CHERRY_PICK_HEAD
-ok 9 - GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD
-ok 10 - git reset clears CHERRY_PICK_HEAD
-ok 11 - failed commit does not clear CHERRY_PICK_HEAD
-ok 12 - cancelled commit does not clear CHERRY_PICK_HEAD
-ok 13 - successful commit clears CHERRY_PICK_HEAD
-ok 14 - failed cherry-pick produces dirty index
-ok 15 - failed cherry-pick registers participants in index
-ok 16 - failed cherry-pick describes conflict in work tree
-ok 17 - diff3 -m style
-ok 18 - revert also handles conflicts sanely
-ok 19 - failed revert sets REVERT_HEAD
-ok 20 - successful revert does not set REVERT_HEAD
-ok 21 - revert --no-commit sets REVERT_HEAD
-ok 22 - revert w/dirty tree does not set REVERT_HEAD
-ok 23 - GIT_CHERRY_PICK_HELP does not suppress REVERT_HEAD
-ok 24 - git reset clears REVERT_HEAD
-ok 25 - failed commit does not clear REVERT_HEAD
-ok 26 - revert conflict, diff3 -m style
-# passed all 26 test(s)
-1..26
+ok 4 - advice from failed cherry-pick --no-commit
+ok 5 - failed cherry-pick sets CHERRY_PICK_HEAD
+ok 6 - successful cherry-pick does not set CHERRY_PICK_HEAD
+ok 7 - cherry-pick --no-commit does not set CHERRY_PICK_HEAD
+ok 8 - cherry-pick w/dirty tree does not set CHERRY_PICK_HEAD
+ok 9 - cherry-pick --strategy=resolve w/dirty tree does not set CHERRY_PICK_HEAD
+ok 10 - GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD
+ok 11 - git reset clears CHERRY_PICK_HEAD
+ok 12 - failed commit does not clear CHERRY_PICK_HEAD
+ok 13 - cancelled commit does not clear CHERRY_PICK_HEAD
+ok 14 - successful commit clears CHERRY_PICK_HEAD
+ok 15 - failed cherry-pick produces dirty index
+ok 16 - failed cherry-pick registers participants in index
+ok 17 - failed cherry-pick describes conflict in work tree
+ok 18 - diff3 -m style
+ok 19 - revert also handles conflicts sanely
+ok 20 - failed revert sets REVERT_HEAD
+ok 21 - successful revert does not set REVERT_HEAD
+ok 22 - revert --no-commit sets REVERT_HEAD
+ok 23 - revert w/dirty tree does not set REVERT_HEAD
+ok 24 - GIT_CHERRY_PICK_HELP does not suppress REVERT_HEAD
+ok 25 - git reset clears REVERT_HEAD
+ok 26 - failed commit does not clear REVERT_HEAD
+ok 27 - revert conflict, diff3 -m style
+ok 28 - failed cherry-pick does not forget -s
+ok 29 - commit after failed cherry-pick does not add duplicated -s
+ok 30 - commit after failed cherry-pick adds -s at the right place
+ok 31 - commit --amend -s places the sign-off at the right place
+# passed all 31 test(s)
+1..31
 *** t3508-cherry-pick-many-commits.sh ***
 ok 1 - setup
 ok 2 - cherry-pick first..fourth works
-ok 3 - cherry-pick --strategy resolve first..fourth works
-ok 4 - cherry-pick --ff first..fourth works
-ok 5 - cherry-pick -n first..fourth works
-ok 6 - revert first..fourth works
-ok 7 - revert ^first fourth works
-ok 8 - revert fourth fourth~1 fourth~2 works
-ok 9 - cherry-pick -3 fourth works
-ok 10 - cherry-pick --stdin works
-# passed all 10 test(s)
-1..10
+ok 3 - cherry-pick three one two works
+ok 4 - cherry-pick three one two: fails
+ok 5 - output to keep user entertained during multi-pick
+ok 6 - cherry-pick --strategy resolve first..fourth works
+ok 7 - output during multi-pick indicates merge strategy
+ok 8 - cherry-pick --ff first..fourth works
+ok 9 - cherry-pick -n first..fourth works
+ok 10 - revert first..fourth works
+ok 11 - revert ^first fourth works
+ok 12 - revert fourth fourth~1 fourth~2 works
+ok 13 - cherry-pick -3 fourth works
+ok 14 - cherry-pick --stdin works
+# passed all 14 test(s)
+1..14
 *** t3509-cherry-pick-merge-df.sh ***
 ok 1 - Initialize repository
 ok 2 - Setup rename across paths each below D/F conflicts
@@ -3265,17 +5434,72 @@
 ok 28 - --continue respects opts
 ok 29 - --continue of single-pick respects -x
 ok 30 - --continue respects -x in first commit in multi-pick
-ok 31 - --signoff is not automatically propagated to resolved conflict
-ok 32 - --signoff dropped for implicit commit of resolution, multi-pick case
-ok 33 - sign-off needs to be reaffirmed after conflict resolution, single-pick case
+not ok 31 - --signoff is automatically propagated to resolved conflict # TODO known breakage
+not ok 32 - --signoff dropped for implicit commit of resolution, multi-pick case # TODO known breakage
+not ok 33 - sign-off needs to be reaffirmed after conflict resolution, single-pick case # TODO known breakage
 ok 34 - malformed instruction sheet 1
 ok 35 - malformed instruction sheet 2
 ok 36 - empty commit set
 ok 37 - malformed instruction sheet 3
 ok 38 - instruction sheet, fat-fingers version
 ok 39 - commit descriptions in insn sheet are optional
-# passed all 39 test(s)
+# still have 3 known breakage(s)
+# passed all remaining 36 test(s)
 1..39
+*** t3511-cherry-pick-x.sh ***
+ok 1 - setup
+ok 2 - cherry-pick -x inserts blank line after one line subject
+ok 3 - cherry-pick -s inserts blank line after one line subject
+ok 4 - cherry-pick -s inserts blank line after non-conforming footer
+ok 5 - cherry-pick -x inserts blank line when conforming footer not found
+ok 6 - cherry-pick -s inserts blank line when conforming footer not found
+ok 7 - cherry-pick -x -s inserts blank line when conforming footer not found
+ok 8 - cherry-pick -s adds sob when last sob doesnt match committer
+ok 9 - cherry-pick -x -s adds sob when last sob doesnt match committer
+ok 10 - cherry-pick -s refrains from adding duplicate trailing sob
+ok 11 - cherry-pick -x -s adds sob even when trailing sob exists for committer
+ok 12 - cherry-pick -x treats "(cherry picked from..." line as part of footer
+ok 13 - cherry-pick -s treats "(cherry picked from..." line as part of footer
+ok 14 - cherry-pick -x -s treats "(cherry picked from..." line as part of footer
+ok 15 - cherry-pick preserves commit message
+# passed all 15 test(s)
+1..15
+*** t3512-cherry-pick-submodule.sh ***
+ok 1 - git cherry-pick: added submodule creates empty directory
+ok 2 - git cherry-pick: added submodule leaves existing empty directory alone
+ok 3 - git cherry-pick: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git cherry-pick: replace tracked file with submodule creates empty directory
+not ok 5 - git cherry-pick: replace directory with submodule # TODO known breakage
+ok 6 - git cherry-pick: removed submodule leaves submodule directory and its contents in place
+ok 7 - git cherry-pick: removed submodule leaves submodule containing a .git directory alone
+not ok 8 - git cherry-pick: replace submodule with a directory must fail # TODO known breakage
+not ok 9 - git cherry-pick: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 10 - git cherry-pick: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git cherry-pick: replace submodule containing a .git directory with a file must fail # TODO known breakage
+not ok 12 - git cherry-pick: modified submodule does not update submodule work tree # TODO known breakage
+not ok 13 - git cherry-pick: modified submodule does not update submodule work tree to invalid commit # TODO known breakage
+not ok 14 - git cherry-pick: modified submodule does not update submodule work tree from invalid commit # TODO known breakage
+# still have 8 known breakage(s)
+# passed all remaining 6 test(s)
+1..14
+*** t3513-revert-submodule.sh ***
+ok 1 - git_revert: added submodule creates empty directory
+ok 2 - git_revert: added submodule leaves existing empty directory alone
+ok 3 - git_revert: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git_revert: replace tracked file with submodule creates empty directory
+not ok 5 - git_revert: replace directory with submodule # TODO known breakage
+ok 6 - git_revert: removed submodule leaves submodule directory and its contents in place
+ok 7 - git_revert: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git_revert: replace submodule with a directory must fail
+ok 9 - git_revert: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git_revert: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git_revert: replace submodule containing a .git directory with a file must fail # TODO known breakage
+not ok 12 - git_revert: modified submodule does not update submodule work tree # TODO known breakage
+not ok 13 - git_revert: modified submodule does not update submodule work tree to invalid commit # TODO known breakage
+not ok 14 - git_revert: modified submodule does not update submodule work tree from invalid commit # TODO known breakage
+# still have 6 known breakage(s)
+# passed all remaining 8 test(s)
+1..14
 *** t3600-rm.sh ***
 ok 1 - Initialize test directory
 ok 2 - add files with funny names
@@ -3313,8 +5537,51 @@
 ok 34 - refresh index before checking if it is up-to-date
 ok 35 - choking "git rm" should not let it die with cruft
 ok 36 - rm removes subdirectories recursively
-# passed all 36 test(s)
-1..36
+ok 37 - rm removes empty submodules from work tree
+ok 38 - rm removes removed submodule from index and .gitmodules
+ok 39 - rm removes work tree of unmodified submodules
+ok 40 - rm removes a submodule with a trailing /
+ok 41 - rm fails when given a file with a trailing /
+ok 42 - rm succeeds when given a directory with a trailing /
+ok 43 - rm of a populated submodule with different HEAD fails unless forced
+ok 44 - rm --cached leaves work tree of populated submodules and .gitmodules alone
+ok 45 - rm --dry-run does not touch the submodule or .gitmodules
+ok 46 - rm does not complain when no .gitmodules file is found
+ok 47 - rm will error out on a modified .gitmodules file unless staged
+ok 48 - rm issues a warning when section is not found in .gitmodules
+ok 49 - rm of a populated submodule with modifications fails unless forced
+ok 50 - rm of a populated submodule with untracked files fails unless forced
+ok 51 - setup submodule conflict
+ok 52 - rm removes work tree of unmodified conflicted submodule
+ok 53 - rm of a conflicted populated submodule with different HEAD fails unless forced
+ok 54 - rm of a conflicted populated submodule with modifications fails unless forced
+ok 55 - rm of a conflicted populated submodule with untracked files fails unless forced
+ok 56 - rm of a conflicted populated submodule with a .git directory fails even when forced
+ok 57 - rm of a conflicted unpopulated submodule succeeds
+ok 58 - rm of a populated submodule with a .git directory fails even when forced
+ok 59 - setup subsubmodule
+ok 60 - rm recursively removes work tree of unmodified submodules
+ok 61 - rm of a populated nested submodule with different nested HEAD fails unless forced
+ok 62 - rm of a populated nested submodule with nested modifications fails unless forced
+ok 63 - rm of a populated nested submodule with nested untracked files fails unless forced
+ok 64 - rm of a populated nested submodule with a nested .git directory fails even when forced
+ok 65 - checking out a commit after submodule removal needs manual updates
+ok 66 - rm of d/f when d has become a non-directory
+ok 67 - rm of d/f when d has become a dangling symlink
+ok 68 - rm of file when it has become a directory
+ok 69 - rm across a symlinked leading path (no index)
+not ok 70 - rm across a symlinked leading path (w/ index) # TODO known breakage
+ok 71 - setup for testing rm messages
+ok 72 - rm files with different staged content
+ok 73 - rm files with different staged content without hints
+ok 74 - rm file with local modification
+ok 75 - rm file with local modification without hints
+ok 76 - rm file with changes in the index
+ok 77 - rm file with changes in the index without hints
+ok 78 - rm files with two different errors
+# still have 1 known breakage(s)
+# passed all remaining 77 test(s)
+1..78
 *** t3700-add.sh ***
 ok 1 - Test of git add
 ok 2 - Post-check that foo is in the index
@@ -3328,29 +5595,33 @@
 ok 10 - .gitignore is honored
 ok 11 - error out when attempting to add ignored ones without -f
 ok 12 - error out when attempting to add ignored ones without -f
-ok 13 - add ignored ones with -f
+ok 13 - error out when attempting to add ignored ones but add others
 ok 14 - add ignored ones with -f
 ok 15 - add ignored ones with -f
-ok 16 - .gitignore with subdirectory
-ok 17 - check correct prefix detection
-ok 18 - git add with filemode=0, symlinks=0, and unmerged entries
-ok 19 - git add with filemode=0, symlinks=0 prefers stage 2 over stage 1
-ok 20 - git add --refresh
-ok 21 - git add should fail atomically upon an unreadable file
-ok 22 - git add --ignore-errors
-ok 23 - git add (add.ignore-errors)
-ok 24 - git add (add.ignore-errors = false)
-ok 25 - --no-ignore-errors overrides config
-ok 26 - git add 'fo\[ou\]bar' ignores foobar
-ok 27 - git add to resolve conflicts on otherwise ignored path
-ok 28 - "add non-existent" should fail
-ok 29 - git add --dry-run of existing changed file
-ok 30 - git add --dry-run of non-existing file
-ok 31 - git add --dry-run of an existing file output
-ok 32 - git add --dry-run --ignore-missing of non-existing file
-ok 33 - git add --dry-run --ignore-missing of non-existing file output
-# passed all 33 test(s)
-1..33
+ok 16 - add ignored ones with -f
+ok 17 - .gitignore with subdirectory
+ok 18 - check correct prefix detection
+ok 19 - git add with filemode=0, symlinks=0, and unmerged entries
+ok 20 - git add with filemode=0, symlinks=0 prefers stage 2 over stage 1
+ok 21 - git add --refresh
+ok 22 - git add --refresh with pathspec
+ok 23 - git add should fail atomically upon an unreadable file
+ok 24 - git add --ignore-errors
+ok 25 - git add (add.ignore-errors)
+ok 26 - git add (add.ignore-errors = false)
+ok 27 - --no-ignore-errors overrides config
+ok 28 - git add 'fo\[ou\]bar' ignores foobar
+ok 29 - git add to resolve conflicts on otherwise ignored path
+ok 30 - "add non-existent" should fail
+ok 31 - git add -A on empty repo does not error out
+ok 32 - "git add ." in empty repo
+ok 33 - git add --dry-run of existing changed file
+ok 34 - git add --dry-run of non-existing file
+ok 35 - git add --dry-run of an existing file output
+ok 36 - git add --dry-run --ignore-missing of non-existing file
+ok 37 - git add --dry-run --ignore-missing of non-existing file output
+# passed all 37 test(s)
+1..37
 *** t3701-add-interactive.sh ***
 ok 1 - setup (initial)
 ok 2 - status works (initial)
@@ -3387,13 +5658,17 @@
 ok 33 - deleting an empty file
 ok 34 - split hunk setup
 ok 35 - split hunk "add -p (edit)"
-# passed all 35 test(s)
-1..35
+not ok 36 - split hunk "add -p (no, yes, edit)" # TODO known breakage
+ok 37 - patch mode ignores unmerged entries
+# still have 1 known breakage(s)
+# passed all remaining 36 test(s)
+1..37
 *** t3702-add-edit.sh ***
 ok 1 - setup
 ok 2 - add -e
-# passed all 2 test(s)
-1..2
+ok 3 - add -e notices editor failure
+# passed all 3 test(s)
+1..3
 *** t3703-add-magic-pathspec.sh ***
 ok 1 - setup
 ok 2 - add :/
@@ -3435,37 +5710,40 @@
 *** t3900-i18n-commit.sh ***
 ok 1 - setup
 ok 2 - no encoding header for base case
-not ok 3 - UTF-16 refused because of NULs # TODO known breakage
-ok 4 - ISO8859-1 setup
-ok 5 - eucJP setup
-ok 6 - ISO-2022-JP setup
-ok 7 - check encoding header for ISO8859-1
-ok 8 - check encoding header for eucJP
-ok 9 - check encoding header for ISO-2022-JP
-ok 10 - config to remove customization
-ok 11 - ISO8859-1 should be shown in UTF-8 now
-ok 12 - eucJP should be shown in UTF-8 now
-ok 13 - ISO-2022-JP should be shown in UTF-8 now
-ok 14 - config to add customization
-ok 15 - ISO8859-1 should be shown in itself now
-ok 16 - eucJP should be shown in itself now
-ok 17 - ISO-2022-JP should be shown in itself now
-ok 18 - config to tweak customization
-ok 19 - ISO8859-1 should be shown in UTF-8 now
-ok 20 - eucJP should be shown in UTF-8 now
-ok 21 - ISO-2022-JP should be shown in UTF-8 now
-ok 22 - eucJP should be shown in eucJP now
-ok 23 - ISO-2022-JP should be shown in eucJP now
-ok 24 - eucJP should be shown in ISO-2022-JP now
-ok 25 - ISO-2022-JP should be shown in ISO-2022-JP now
-ok 26 - No conversion with ISO8859-1
-ok 27 - No conversion with eucJP
-ok 28 - No conversion with ISO-2022-JP
-ok 29 - commit --fixup with eucJP encoding
-ok 30 - commit --squash with ISO-2022-JP encoding
-# still have 1 known breakage(s)
-# passed all remaining 29 test(s)
-1..30
+ok 3 - UTF-16 refused because of NULs
+ok 4 - UTF-8 invalid characters refused
+ok 5 - UTF-8 overlong sequences rejected
+ok 6 - UTF-8 non-characters refused
+ok 7 - UTF-8 non-characters refused
+ok 8 - ISO8859-1 setup
+ok 9 - eucJP setup
+ok 10 - ISO-2022-JP setup
+ok 11 - check encoding header for ISO8859-1
+ok 12 - check encoding header for eucJP
+ok 13 - check encoding header for ISO-2022-JP
+ok 14 - config to remove customization
+ok 15 - ISO8859-1 should be shown in UTF-8 now
+ok 16 - eucJP should be shown in UTF-8 now
+ok 17 - ISO-2022-JP should be shown in UTF-8 now
+ok 18 - config to add customization
+ok 19 - ISO8859-1 should be shown in itself now
+ok 20 - eucJP should be shown in itself now
+ok 21 - ISO-2022-JP should be shown in itself now
+ok 22 - config to tweak customization
+ok 23 - ISO8859-1 should be shown in UTF-8 now
+ok 24 - eucJP should be shown in UTF-8 now
+ok 25 - ISO-2022-JP should be shown in UTF-8 now
+ok 26 - eucJP should be shown in eucJP now
+ok 27 - ISO-2022-JP should be shown in eucJP now
+ok 28 - eucJP should be shown in ISO-2022-JP now
+ok 29 - ISO-2022-JP should be shown in ISO-2022-JP now
+ok 30 - No conversion with ISO8859-1
+ok 31 - No conversion with eucJP
+ok 32 - No conversion with ISO-2022-JP
+ok 33 - commit --fixup with eucJP encoding
+ok 34 - commit --squash with ISO-2022-JP encoding
+# passed all 34 test(s)
+1..34
 *** t3901-i18n-patch.sh ***
 ok 1 - setup
 ok 2 - format-patch output (ISO-8859-1)
@@ -3482,8 +5760,13 @@
 ok 13 - rebase --merge (U/L)
 ok 14 - rebase --merge (L/L)
 ok 15 - rebase --merge (L/U)
-# passed all 15 test(s)
-1..15
+ok 16 - am (U/U)
+ok 17 - am (L/L)
+ok 18 - am (U/L)
+ok 19 - am --no-utf8 (U/L)
+ok 20 - am (L/U)
+# passed all 20 test(s)
+1..20
 *** t3902-quoted.sh ***
 ok 1 - setup
 ok 2 - setup expected files
@@ -3509,46 +5792,60 @@
 ok 6 - apply stashed changes
 ok 7 - apply stashed changes (including index)
 ok 8 - unstashing in a subdirectory
-ok 9 - drop top stash
-ok 10 - drop middle stash
-ok 11 - stash pop
-ok 12 - stash branch
-ok 13 - apply -q is quiet
-ok 14 - save -q is quiet
-ok 15 - pop -q is quiet
-ok 16 - pop -q --index works and is quiet
-ok 17 - drop -q is quiet
-ok 18 - stash -k
-ok 19 - stash --no-keep-index
-ok 20 - stash --invalid-option
-ok 21 - stash an added file
-ok 22 - stash rm then recreate
-ok 23 - stash rm and ignore
-ok 24 - stash rm and ignore (stage .gitignore)
-ok 25 - stash file to symlink
-ok 26 - stash file to symlink (stage rm)
-ok 27 - stash file to symlink (full stage)
-ok 28 - stash symlink to file
-ok 29 - stash symlink to file (stage rm)
-ok 30 - stash symlink to file (full stage)
-not ok 31 - stash directory to file # TODO known breakage
-not ok 32 - stash file to directory # TODO known breakage
-ok 33 - stash branch - no stashes on stack, stash-like argument
-ok 34 - stash branch - stashes on stack, stash-like argument
-ok 35 - stash show - stashes on stack, stash-like argument
-ok 36 - stash show -p - stashes on stack, stash-like argument
-ok 37 - stash show - no stashes on stack, stash-like argument
-ok 38 - stash show -p - no stashes on stack, stash-like argument
-ok 39 - stash drop - fail early if specified stash is not a stash reference
-ok 40 - stash pop - fail early if specified stash is not a stash reference
-ok 41 - ref with non-existent reflog
-ok 42 - invalid ref of the form [email protected]{n}, n >= N
-ok 43 - stash branch should not drop the stash if the branch exists
-ok 44 - stash apply shows status same as git status (relative to current directory)
-ok 45 - stash where working directory contains "HEAD" file
+ok 9 - stash drop complains of extra options
+ok 10 - drop top stash
+ok 11 - drop middle stash
+ok 12 - stash pop
+ok 13 - stash branch
+ok 14 - apply -q is quiet
+ok 15 - save -q is quiet
+ok 16 - pop -q is quiet
+ok 17 - pop -q --index works and is quiet
+ok 18 - drop -q is quiet
+ok 19 - stash -k
+ok 20 - stash --no-keep-index
+ok 21 - stash --invalid-option
+ok 22 - stash an added file
+ok 23 - stash rm then recreate
+ok 24 - stash rm and ignore
+ok 25 - stash rm and ignore (stage .gitignore)
+ok 26 - stash file to symlink
+ok 27 - stash file to symlink (stage rm)
+ok 28 - stash file to symlink (full stage)
+ok 29 - stash symlink to file
+ok 30 - this must have re-created the symlink
+ok 31 - unstash must re-create the file
+ok 32 - stash symlink to file (stage rm)
+ok 33 - this must have re-created the symlink
+ok 34 - unstash must re-create the file
+ok 35 - stash symlink to file (full stage)
+ok 36 - this must have re-created the symlink
+ok 37 - unstash must re-create the file
+not ok 38 - stash directory to file # TODO known breakage
+not ok 39 - stash file to directory # TODO known breakage
+ok 40 - stash branch - no stashes on stack, stash-like argument
+ok 41 - stash branch - stashes on stack, stash-like argument
+ok 42 - stash show format defaults to --stat
+ok 43 - stash show - stashes on stack, stash-like argument
+ok 44 - stash show -p - stashes on stack, stash-like argument
+ok 45 - stash show - no stashes on stack, stash-like argument
+ok 46 - stash show -p - no stashes on stack, stash-like argument
+ok 47 - stash drop - fail early if specified stash is not a stash reference
+ok 48 - stash pop - fail early if specified stash is not a stash reference
+ok 49 - ref with non-existent reflog
+ok 50 - invalid ref of the form [email protected]{n}, n >= N
+ok 51 - stash branch should not drop the stash if the branch exists
+ok 52 - stash apply shows status same as git status (relative to current directory)
+ok 53 - stash where working directory contains "HEAD" file
+ok 54 - store called with invalid commit
+ok 55 - store updates stash ref and reflog
+ok 56 - handle stash specification with spaces
+ok 57 - setup stash with index and worktree changes
+ok 58 - stash list implies --first-parent -m
+ok 59 - stash list --cc shows combined diff
 # still have 2 known breakage(s)
-# passed all remaining 43 test(s)
-1..45
+# passed all remaining 57 test(s)
+1..59
 *** t3904-stash-patch.sh ***
 ok 1 - setup
 ok 2 - saying "n" does nothing
@@ -3556,8 +5853,10 @@
 ok 4 - git stash -p --no-keep-index
 ok 5 - git stash --no-keep-index -p
 ok 6 - none of this moved HEAD
-# passed all 6 test(s)
-1..6
+not ok 7 - stash -p with split hunk # TODO known breakage
+# still have 1 known breakage(s)
+# passed all remaining 6 test(s)
+1..7
 *** t3905-stash-include-untracked.sh ***
 ok 1 - stash save --include-untracked some dirty working directory
 ok 2 - stash save --include-untracked cleaned the untracked files
@@ -3576,12 +5875,37 @@
 ok 15 - stash save --all is stash poppable
 # passed all 15 test(s)
 1..15
+*** t3906-stash-submodule.sh ***
+not ok 1 - git_stash: added submodule creates empty directory # TODO known breakage
+not ok 2 - git_stash: added submodule leaves existing empty directory alone # TODO known breakage
+ok 3 - git_stash: added submodule doesn't remove untracked unignored file with same name
+not ok 4 - git_stash: replace tracked file with submodule creates empty directory # TODO known breakage
+not ok 5 - git_stash: replace directory with submodule # TODO known breakage
+not ok 6 - git_stash: removed submodule leaves submodule directory and its contents in place # TODO known breakage
+not ok 7 - git_stash: removed submodule leaves submodule containing a .git directory alone # TODO known breakage
+ok 8 - git_stash: replace submodule with a directory must fail
+ok 9 - git_stash: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git_stash: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git_stash: replace submodule containing a .git directory with a file must fail # TODO known breakage
+not ok 12 - git_stash: modified submodule does not update submodule work tree # TODO known breakage
+not ok 13 - git_stash: modified submodule does not update submodule work tree to invalid commit # TODO known breakage
+not ok 14 - git_stash: modified submodule does not update submodule work tree from invalid commit # TODO known breakage
+# still have 11 known breakage(s)
+# passed all remaining 3 test(s)
+1..14
+*** t3910-mac-os-precompose.sh ***
+1..0 # SKIP filesystem does not corrupt utf-8
 *** t4000-diff-format.sh ***
 ok 1 - update-index --add two files with and without +x.
 ok 2 - git diff-files -p after editing work tree.
 ok 3 - validate git diff-files -p output.
-# passed all 3 test(s)
-1..3
+ok 4 - git diff-files -s after editing work tree
+ok 5 - git diff-files --no-patch as synonym for -s
+ok 6 - git diff-files --no-patch --patch shows the patch
+ok 7 - git diff-files --no-patch --patch-with-raw shows the patch and raw data
+ok 8 - git diff-files --patch --no-patch does not show the patch
+# passed all 8 test(s)
+1..8
 *** t4001-diff-rename.sh ***
 ok 1 - update-index --add a file.
 ok 2 - write that tree.
@@ -3591,8 +5915,13 @@
 ok 6 - favour same basenames over different ones
 ok 7 - favour same basenames even with minor differences
 ok 8 - setup for many rename source candidates
-# passed all 8 test(s)
-1..8
+ok 9 - rename pretty print with nothing in common
+ok 10 - rename pretty print with common prefix
+ok 11 - rename pretty print with common suffix
+ok 12 - rename pretty print with common prefix and suffix
+ok 13 - rename pretty print common prefix and suffix overlap
+# passed all 13 test(s)
+1..13
 *** t4002-diff-basic.sh ***
 ok 1 - adding test file NN and Z/NN
 ok 2 - adding test file ND and Z/ND
@@ -3689,7 +6018,7 @@
 *** t4006-diff-mode.sh ***
 ok 1 - setup
 ok 2 - chmod
-ok 3 - verify
+ok 3 - prepare binary file
 # passed all 3 test(s)
 1..3
 *** t4007-rename-3.sh ***
@@ -3706,29 +6035,20 @@
 *** t4008-diff-break-rewrite.sh ***
 ok 1 - setup
 ok 2 - change file1 with copy-edit of file0 and remove file0
-ok 3 - run diff with -B
-ok 4 - validate result of -B (#1)
-ok 5 - run diff with -B and -M
-ok 6 - validate result of -B -M (#2)
-ok 7 - swap file0 and file1
-ok 8 - run diff with -B
-ok 9 - validate result of -B (#3)
-ok 10 - run diff with -B and -M
-ok 11 - validate result of -B -M (#4)
-ok 12 - make file0 into something completely different
-ok 13 - run diff with -B
-ok 14 - validate result of -B (#5)
-ok 15 - run diff with -B -M
-ok 16 - validate result of -B -M (#6)
-ok 17 - run diff with -M
-ok 18 - validate result of -M (#7)
-ok 19 - file1 edited to look like file0 and file0 rename-edited to file2
-ok 20 - run diff with -B
-ok 21 - validate result of -B (#8)
-ok 22 - run diff with -B -C
-ok 23 - validate result of -B -M (#9)
-# passed all 23 test(s)
-1..23
+ok 3 - run diff with -B (#1)
+ok 4 - run diff with -B and -M (#2)
+ok 5 - swap file0 and file1
+ok 6 - run diff with -B (#3)
+ok 7 - run diff with -B and -M (#4)
+ok 8 - make file0 into something completely different
+ok 9 - run diff with -B (#5)
+ok 10 - run diff with -B -M (#6)
+ok 11 - run diff with -M (#7)
+ok 12 - file1 edited to look like file0 and file0 rename-edited to file2
+ok 13 - run diff with -B (#8)
+ok 14 - run diff with -B -C (#9)
+# passed all 14 test(s)
+1..14
 *** t4009-diff-rename-4.sh ***
 ok 1 - prepare reference tree
 ok 2 - prepare work tree
@@ -3753,14 +6073,18 @@
 ok 11 - diff-tree with wildcard shows dir also matches
 ok 12 - diff-tree -r with wildcard from beginning
 ok 13 - diff-tree -r with wildcard
-# passed all 13 test(s)
-1..13
+ok 14 - setup submodules
+ok 15 - diff-tree ignores trailing slash on submodule path
+ok 16 - diff multiple wildcard pathspecs
+ok 17 - diff-cache ignores trailing slash on submodule path
+# passed all 17 test(s)
+1..17
 *** t4011-diff-symlink.sh ***
-ok 1 - diff new symlink
-ok 2 - diff unchanged symlink
-ok 3 - diff removed symlink
-ok 4 - diff identical, but newly created symlink
-ok 5 - diff different symlink
+ok 1 - diff new symlink and file
+ok 2 - diff unchanged symlink and file
+ok 3 - diff removed symlink and file
+ok 4 - diff identical, but newly created symlink and file
+ok 5 - diff different symlink and file
 ok 6 - diff symlinks with non-existing targets
 ok 7 - setup symlinks with attributes
 ok 8 - symlinks do not respect userdiff config by path
@@ -3768,16 +6092,20 @@
 1..8
 *** t4012-diff-binary.sh ***
 ok 1 - prepare repository
-ok 2 - diff without --binary
-ok 3 - diff with --binary
-ok 4 - apply detecting corrupt patch correctly
-ok 5 - apply detecting corrupt patch correctly
-ok 6 - initial commit
-ok 7 - diff-index with --binary
-ok 8 - apply binary patch
-ok 9 - diff --no-index with binary creation
-# passed all 9 test(s)
-1..9
+ok 2 - apply --stat output for binary file change
+ok 3 - diff --shortstat output for binary file change
+ok 4 - diff --shortstat output for binary file change only
+ok 5 - apply --numstat notices binary file change
+ok 6 - apply --numstat understands diff --binary format
+ok 7 - apply detecting corrupt patch correctly
+ok 8 - apply detecting corrupt patch correctly
+ok 9 - initial commit
+ok 10 - diff-index with --binary
+ok 11 - apply binary patch
+ok 12 - diff --no-index with binary creation
+ok 13 - diff --stat with binary files and big change count
+# passed all 13 test(s)
+1..13
 *** t4013-diff-various.sh ***
 ok 1 - setup
 ok 2 - git diff-tree initial
@@ -3925,13 +6253,14 @@
 ok 144 - log -S requires an argument
 ok 145 - diff --cached on unborn branch
 ok 146 - diff --cached -- file on unborn branch
-# passed all 146 test(s)
-1..146
+ok 147 - diff-tree --stdin with log formatting
+# passed all 147 test(s)
+1..147
 *** t4014-format-patch.sh ***
-ok 1 - set up terminal for tests
-ok 2 - setup
+ok 1 - setup
+ok 2 - format-patch --ignore-if-in-upstream
 ok 3 - format-patch --ignore-if-in-upstream
-ok 4 - format-patch --ignore-if-in-upstream
+ok 4 - format-patch --ignore-if-in-upstream handles tags
 ok 5 - format-patch doesn't consider merge commits
 ok 6 - format-patch result applies
 ok 7 - format-patch --ignore-if-in-upstream result applies
@@ -3941,80 +6270,129 @@
 ok 11 - extra headers
 ok 12 - extra headers without newlines
 ok 13 - extra headers with multiple To:s
-ok 14 - additional command line cc
-ok 15 - command line headers
-ok 16 - configuration headers and command line headers
-ok 17 - command line To: header
-ok 18 - configuration To: header
-ok 19 - --no-to overrides config.to
-ok 20 - --no-to and --to replaces config.to
-ok 21 - --no-cc overrides config.cc
-ok 22 - --no-add-header overrides config.headers
-ok 23 - multiple files
-ok 24 - no threading
-ok 25 - thread
-ok 26 - thread in-reply-to
-ok 27 - thread cover-letter
-ok 28 - thread cover-letter in-reply-to
-ok 29 - thread explicit shallow
-ok 30 - thread deep
-ok 31 - thread deep in-reply-to
-ok 32 - thread deep cover-letter
-ok 33 - thread deep cover-letter in-reply-to
-ok 34 - thread via config
-ok 35 - thread deep via config
-ok 36 - thread config + override
-ok 37 - thread config + --no-thread
-ok 38 - excessive subject
-ok 39 - cover-letter inherits diff options
-ok 40 - shortlog of cover-letter wraps overly-long onelines
-ok 41 - format-patch respects -U
-ok 42 - format-patch -p suppresses stat
-ok 43 - format-patch from a subdirectory (1)
-ok 44 - format-patch from a subdirectory (2)
-ok 45 - format-patch from a subdirectory (3)
-ok 46 - format-patch --in-reply-to
-ok 47 - format-patch --signoff
-ok 48 - options no longer allowed for format-patch
-ok 49 - format-patch --numstat should produce a patch
-ok 50 - format-patch -- <path>
-ok 51 - format-patch --ignore-if-in-upstream HEAD
-ok 52 - format-patch --signature
-ok 53 - format-patch with format.signature config
-ok 54 - format-patch --signature overrides format.signature
-ok 55 - format-patch --no-signature ignores format.signature
-ok 56 - format-patch --signature --cover-letter
-ok 57 - format.signature="" supresses signatures
-ok 58 - format-patch --no-signature supresses signatures
-ok 59 - format-patch --signature="" supresses signatures
-ok 60 # skip format-patch --stdout paginates (missing TTY)
-ok 61 # skip format-patch --stdout pagination can be disabled (missing TTY)
-ok 62 - format-patch handles multi-line subjects
-ok 63 - format-patch handles multi-line encoded subjects
-ok 64 - format-patch wraps extremely long headers (ascii)
-ok 65 - format-patch wraps extremely long headers (rfc2047)
-ok 66 - format-patch wraps non-quotable headers
-ok 67 - format-patch quotes dot in headers
-ok 68 - format-patch quotes double-quote in headers
-ok 69 - rfc2047-encoded headers also double-quote 822 specials
-ok 70 - subject lines do not have 822 atom-quoting
-ok 71 - subject prefixes have space prepended
-ok 72 - empty subject prefix does not have extra space
-ok 73 - format patch ignores color.ui
-# passed all 73 test(s)
-1..73
+ok 14 - additional command line cc (ascii)
+not ok 15 - additional command line cc (rfc822) # TODO known breakage
+ok 16 - command line headers
+ok 17 - configuration headers and command line headers
+ok 18 - command line To: header (ascii)
+not ok 19 - command line To: header (rfc822) # TODO known breakage
+not ok 20 - command line To: header (rfc2047) # TODO known breakage
+ok 21 - configuration To: header (ascii)
+not ok 22 - configuration To: header (rfc822) # TODO known breakage
+not ok 23 - configuration To: header (rfc2047) # TODO known breakage
+ok 24 - --no-to overrides config.to
+ok 25 - --no-to and --to replaces config.to
+ok 26 - --no-cc overrides config.cc
+ok 27 - --no-add-header overrides config.headers
+ok 28 - multiple files
+ok 29 - reroll count
+ok 30 - reroll count (-v)
+ok 31 - no threading
+ok 32 - thread
+ok 33 - thread in-reply-to
+ok 34 - thread cover-letter
+ok 35 - thread cover-letter in-reply-to
+ok 36 - thread explicit shallow
+ok 37 - thread deep
+ok 38 - thread deep in-reply-to
+ok 39 - thread deep cover-letter
+ok 40 - thread deep cover-letter in-reply-to
+ok 41 - thread via config
+ok 42 - thread deep via config
+ok 43 - thread config + override
+ok 44 - thread config + --no-thread
+ok 45 - excessive subject
+ok 46 - cover-letter inherits diff options
+ok 47 - shortlog of cover-letter wraps overly-long onelines
+ok 48 - format-patch respects -U
+ok 49 - format-patch -p suppresses stat
+ok 50 - format-patch from a subdirectory (1)
+ok 51 - format-patch from a subdirectory (2)
+ok 52 - format-patch from a subdirectory (3)
+ok 53 - format-patch --in-reply-to
+ok 54 - format-patch --signoff
+ok 55 - format-patch --notes --signoff
+ok 56 - options no longer allowed for format-patch
+ok 57 - format-patch --numstat should produce a patch
+ok 58 - format-patch -- <path>
+ok 59 - format-patch --ignore-if-in-upstream HEAD
+ok 60 - format-patch --signature
+ok 61 - format-patch with format.signature config
+ok 62 - format-patch --signature overrides format.signature
+ok 63 - format-patch --no-signature ignores format.signature
+ok 64 - format-patch --signature --cover-letter
+ok 65 - format.signature="" suppresses signatures
+ok 66 - format-patch --no-signature suppresses signatures
+ok 67 - format-patch --signature="" suppresses signatures
+ok 68 - prepare mail-signature input
+ok 69 - --signature-file=file works
+ok 70 - format.signaturefile works
+ok 71 - --no-signature suppresses format.signaturefile 
+ok 72 - --signature-file overrides format.signaturefile
+ok 73 - --signature overrides format.signaturefile
+ok 74 # skip format-patch --stdout paginates (missing TTY)
+ok 75 # skip format-patch --stdout pagination can be disabled (missing TTY)
+ok 76 - format-patch handles multi-line subjects
+ok 77 - format-patch handles multi-line encoded subjects
+ok 78 - format-patch wraps extremely long subject (ascii)
+ok 79 - format-patch wraps extremely long subject (rfc2047)
+ok 80 - format-patch quotes dot in from-headers
+ok 81 - format-patch quotes double-quote in from-headers
+ok 82 - format-patch uses rfc2047-encoded from-headers when necessary
+ok 83 - rfc2047-encoded from-headers leave no rfc822 specials
+ok 84 - format-patch wraps moderately long from-header (ascii)
+ok 85 - format-patch wraps extremely long from-header (ascii)
+ok 86 - format-patch wraps extremely long from-header (rfc822)
+ok 87 - format-patch wraps extremely long from-header (rfc2047)
+ok 88 - subject lines do not have 822 atom-quoting
+ok 89 - subject prefixes have space prepended
+ok 90 - empty subject prefix does not have extra space
+ok 91 - --from=ident notices bogus ident
+ok 92 - --from=ident replaces author
+ok 93 - --from uses committer ident
+ok 94 - --from omits redundant in-body header
+ok 95 - in-body headers trigger content encoding
+ok 96 - signoff: commit with no body
+ok 97 - signoff: commit with only subject
+ok 98 - signoff: commit with only subject that does not end with NL
+ok 99 - signoff: no existing signoffs
+ok 100 - signoff: no existing signoffs and no trailing NL
+ok 101 - signoff: some random signoff
+ok 102 - signoff: misc conforming footer elements
+ok 103 - signoff: some random signoff-alike
+ok 104 - signoff: not really a signoff
+ok 105 - signoff: not really a signoff (2)
+ok 106 - signoff: valid S-o-b paragraph in the middle
+ok 107 - signoff: the same signoff at the end
+ok 108 - signoff: the same signoff at the end, no trailing NL
+ok 109 - signoff: the same signoff NOT at the end
+ok 110 - signoff: detect garbage in non-conforming footer
+ok 111 - signoff: footer begins with non-signoff without @ sign
+ok 112 - format patch ignores color.ui
+ok 113 - cover letter using branch description (1)
+ok 114 - cover letter using branch description (2)
+ok 115 - cover letter using branch description (3)
+ok 116 - cover letter using branch description (4)
+ok 117 - cover letter using branch description (5)
+ok 118 - cover letter using branch description (6)
+ok 119 - cover letter with nothing
+ok 120 - cover letter auto
+ok 121 - cover letter auto user override
+# still have 5 known breakage(s)
+# passed all remaining 116 test(s)
+1..121
 *** t4015-diff-whitespace.sh ***
-ok 1 - Ray's example without options
-ok 2 - Ray's example with -w
-ok 3 - Ray's example with -b
-ok 4 - another test, without options
-ok 5 - another test, with -w
-ok 6 - another test, with -w -b
-ok 7 - another test, with -w --ignore-space-at-eol
-ok 8 - another test, with -w -b --ignore-space-at-eol
-ok 9 - another test, with -b
-ok 10 - another test, with -b --ignore-space-at-eol
-ok 11 - another test, with --ignore-space-at-eol
+ok 1 - Ray Lehtiniemi's example
+ok 2 - another test, without options
+ok 3 - ignore-blank-lines: only new lines
+ok 4 - ignore-blank-lines: only new lines with space
+ok 5 - ignore-blank-lines: after change
+ok 6 - ignore-blank-lines: before change
+ok 7 - ignore-blank-lines: between changes
+ok 8 - ignore-blank-lines: between changes (with interhunkctx)
+ok 9 - ignore-blank-lines: scattered spaces
+ok 10 - ignore-blank-lines: spaces coalesce
+ok 11 - ignore-blank-lines: mix changes and blank lines
 ok 12 - check mixed spaces and tabs in indent
 ok 13 - check mixed tabs and spaces in indent
 ok 14 - check with no whitespace errors
@@ -4060,13 +6438,15 @@
 ok 54 - combined diff with autocrlf conversion
 ok 55 - setup diff colors
 ok 56 - diff that introduces a line with only tabs
-# passed all 56 test(s)
-1..56
+ok 57 - diff that introduces and removes ws breakages
+ok 58 - the same with --ws-error-highlight
+# passed all 58 test(s)
+1..58
 *** t4016-diff-quote.sh ***
 ok 1 - setup
 ok 2 - setup expected files
 ok 3 - git diff --summary -M HEAD
-ok 4 - setup expected files
+ok 4 - git diff --numstat -M HEAD
 ok 5 - git diff --stat -M HEAD
 # passed all 5 test(s)
 1..5
@@ -4098,49 +6478,81 @@
 # passed all 24 test(s)
 1..24
 *** t4018-diff-funcname.sh ***
-ok 1 - builtin bibtex pattern compiles
-ok 2 - builtin bibtex wordRegex pattern compiles
-ok 3 - builtin cpp pattern compiles
-ok 4 - builtin cpp wordRegex pattern compiles
-ok 5 - builtin csharp pattern compiles
-ok 6 - builtin csharp wordRegex pattern compiles
-ok 7 - builtin fortran pattern compiles
-ok 8 - builtin fortran wordRegex pattern compiles
-ok 9 - builtin html pattern compiles
-ok 10 - builtin html wordRegex pattern compiles
-ok 11 - builtin java pattern compiles
-ok 12 - builtin java wordRegex pattern compiles
-ok 13 - builtin matlab pattern compiles
-ok 14 - builtin matlab wordRegex pattern compiles
-ok 15 - builtin objc pattern compiles
-ok 16 - builtin objc wordRegex pattern compiles
-ok 17 - builtin pascal pattern compiles
-ok 18 - builtin pascal wordRegex pattern compiles
-ok 19 - builtin perl pattern compiles
-ok 20 - builtin perl wordRegex pattern compiles
-ok 21 - builtin php pattern compiles
-ok 22 - builtin php wordRegex pattern compiles
-ok 23 - builtin python pattern compiles
-ok 24 - builtin python wordRegex pattern compiles
-ok 25 - builtin ruby pattern compiles
-ok 26 - builtin ruby wordRegex pattern compiles
-ok 27 - builtin tex pattern compiles
-ok 28 - builtin tex wordRegex pattern compiles
-ok 29 - default behaviour
-ok 30 - set up .gitattributes declaring drivers to test
-ok 31 - preset java pattern
-ok 32 - preset perl pattern
-ok 33 - perl pattern accepts K&R style brace placement, too
-ok 34 - but is not distracted by end of <<here document
-ok 35 - perl pattern is not distracted by sub within POD
-ok 36 - perl pattern gets full line of POD header
-ok 37 - perl pattern is not distracted by forward declaration
-ok 38 - custom pattern
-ok 39 - last regexp must not be negated
-ok 40 - pattern which matches to end of line
-ok 41 - alternation in pattern
-# passed all 41 test(s)
-1..41
+ok 1 - setup
+ok 2 - builtin ada pattern compiles
+ok 3 - builtin ada wordRegex pattern compiles
+ok 4 - builtin bibtex pattern compiles
+ok 5 - builtin bibtex wordRegex pattern compiles
+ok 6 - builtin cpp pattern compiles
+ok 7 - builtin cpp wordRegex pattern compiles
+ok 8 - builtin csharp pattern compiles
+ok 9 - builtin csharp wordRegex pattern compiles
+ok 10 - builtin fortran pattern compiles
+ok 11 - builtin fortran wordRegex pattern compiles
+ok 12 - builtin fountain pattern compiles
+ok 13 - builtin fountain wordRegex pattern compiles
+ok 14 - builtin html pattern compiles
+ok 15 - builtin html wordRegex pattern compiles
+ok 16 - builtin java pattern compiles
+ok 17 - builtin java wordRegex pattern compiles
+ok 18 - builtin matlab pattern compiles
+ok 19 - builtin matlab wordRegex pattern compiles
+ok 20 - builtin objc pattern compiles
+ok 21 - builtin objc wordRegex pattern compiles
+ok 22 - builtin pascal pattern compiles
+ok 23 - builtin pascal wordRegex pattern compiles
+ok 24 - builtin perl pattern compiles
+ok 25 - builtin perl wordRegex pattern compiles
+ok 26 - builtin php pattern compiles
+ok 27 - builtin php wordRegex pattern compiles
+ok 28 - builtin python pattern compiles
+ok 29 - builtin python wordRegex pattern compiles
+ok 30 - builtin ruby pattern compiles
+ok 31 - builtin ruby wordRegex pattern compiles
+ok 32 - builtin tex pattern compiles
+ok 33 - builtin tex wordRegex pattern compiles
+ok 34 - builtin custom1 pattern compiles
+ok 35 - builtin custom1 wordRegex pattern compiles
+ok 36 - builtin custom2 pattern compiles
+ok 37 - builtin custom2 wordRegex pattern compiles
+ok 38 - builtin custom3 pattern compiles
+ok 39 - builtin custom3 wordRegex pattern compiles
+ok 40 - last regexp must not be negated
+ok 41 - setup hunk header tests
+ok 42 - hunk header: README
+ok 43 - hunk header: cpp-c++-function
+ok 44 - hunk header: cpp-class-constructor
+ok 45 - hunk header: cpp-class-constructor-mem-init
+ok 46 - hunk header: cpp-class-definition
+ok 47 - hunk header: cpp-class-definition-derived
+ok 48 - hunk header: cpp-class-destructor
+ok 49 - hunk header: cpp-function-returning-global-type
+ok 50 - hunk header: cpp-function-returning-nested
+ok 51 - hunk header: cpp-function-returning-pointer
+ok 52 - hunk header: cpp-function-returning-reference
+ok 53 - hunk header: cpp-gnu-style-function
+ok 54 - hunk header: cpp-namespace-definition
+ok 55 - hunk header: cpp-operator-definition
+ok 56 - hunk header: cpp-skip-access-specifiers
+ok 57 - hunk header: cpp-skip-comment-block
+ok 58 - hunk header: cpp-skip-labels
+ok 59 - hunk header: cpp-struct-definition
+ok 60 - hunk header: cpp-struct-single-line
+ok 61 - hunk header: cpp-template-function-definition
+ok 62 - hunk header: cpp-union-definition
+ok 63 - hunk header: cpp-void-c-function
+ok 64 - hunk header: custom1-pattern
+ok 65 - hunk header: custom2-match-to-end-of-line
+ok 66 - hunk header: custom3-alternation-in-pattern
+ok 67 - hunk header: fountain-scene
+ok 68 - hunk header: java-class-member-function
+ok 69 - hunk header: perl-skip-end-of-heredoc
+ok 70 - hunk header: perl-skip-forward-decl
+ok 71 - hunk header: perl-skip-sub-in-pod
+ok 72 - hunk header: perl-sub-definition
+ok 73 - hunk header: perl-sub-definition-kr-brace
+# passed all 73 test(s)
+1..73
 *** t4019-diff-wserror.sh ***
 ok 1 - setup
 ok 2 - default
@@ -4170,20 +6582,29 @@
 ok 2 - GIT_EXTERNAL_DIFF environment
 ok 3 - GIT_EXTERNAL_DIFF environment should apply only to diff
 ok 4 - GIT_EXTERNAL_DIFF environment and --no-ext-diff
-ok 5 - diff attribute
-ok 6 - diff attribute should apply only to diff
-ok 7 - diff attribute and --no-ext-diff
-ok 8 - diff attribute
-ok 9 - diff attribute should apply only to diff
-ok 10 - diff attribute and --no-ext-diff
-ok 11 - no diff with -diff
-ok 12 - force diff with "diff"
-ok 13 - GIT_EXTERNAL_DIFF with more than one changed files
-ok 14 - GIT_EXTERNAL_DIFF generates pretty paths
-ok 15 - external diff with autocrlf = true
-ok 16 - diff --cached
-# passed all 16 test(s)
-1..16
+ok 5 - typechange diff
+ok 6 - diff.external
+ok 7 - diff.external should apply only to diff
+ok 8 - diff.external and --no-ext-diff
+ok 9 - diff attribute
+ok 10 - diff attribute should apply only to diff
+ok 11 - diff attribute and --no-ext-diff
+ok 12 - diff attribute
+ok 13 - diff attribute should apply only to diff
+ok 14 - diff attribute and --no-ext-diff
+ok 15 - GIT_EXTERNAL_DIFF trumps diff.external
+ok 16 - attributes trump GIT_EXTERNAL_DIFF and diff.external
+ok 17 - no diff with -diff
+ok 18 - force diff with "diff"
+ok 19 - GIT_EXTERNAL_DIFF with more than one changed files
+ok 20 - GIT_EXTERNAL_DIFF path counter/total
+ok 21 - GIT_EXTERNAL_DIFF generates pretty paths
+ok 22 - external diff with autocrlf = true
+ok 23 - diff --cached
+ok 24 - clean up crlf leftovers
+ok 25 - submodule diff
+# passed all 25 test(s)
+1..25
 *** t4021-format-patch-numbered.sh ***
 ok 1 - setup
 ok 2 - single patch defaults to no numbers
@@ -4206,8 +6627,13 @@
 ok 4 - suppress deletion diff with -D
 ok 5 - show deletion diff with -B
 ok 6 - suppress deletion diff with -B -D
-# passed all 6 test(s)
-1..6
+ok 7 - prepare a file that ends with an incomplete line
+ok 8 - rewrite the middle 90% of sequence file and terminate with newline
+ok 9 - confirm that sequence file is considered a rewrite
+ok 10 - no newline at eof is on its own line without -B
+ok 11 - no newline at eof is on its own line with -B
+# passed all 11 test(s)
+1..11
 *** t4023-diff-rename-typechange.sh ***
 ok 1 - setup
 ok 2 - cross renames to be detected for regular files
@@ -4233,18 +6659,24 @@
 ok 5 - fg attr bg
 ok 6 - fg bg attr
 ok 7 - fg bg attr...
-ok 8 - long color specification
-ok 9 - 256 colors
-ok 10 - color too small
-ok 11 - color too big
-ok 12 - extra character after color number
-ok 13 - extra character after color name
-ok 14 - extra character after attribute
-ok 15 - unknown color slots are ignored (diff)
-ok 16 - unknown color slots are ignored (branch)
-ok 17 - unknown color slots are ignored (status)
-# passed all 17 test(s)
-1..17
+ok 8 - attr negation
+ok 9 - long color specification
+ok 10 - absurdly long color specification
+ok 11 - 0-7 are aliases for basic ANSI color names
+ok 12 - 256 colors
+ok 13 - 24-bit colors
+ok 14 - "normal" yields no color at all"
+ok 15 - -1 is a synonym for "normal"
+ok 16 - color too small
+ok 17 - color too big
+ok 18 - extra character after color number
+ok 19 - extra character after color name
+ok 20 - extra character after attribute
+ok 21 - unknown color slots are ignored (diff)
+ok 22 - unknown color slots are ignored (branch)
+ok 23 - unknown color slots are ignored (status)
+# passed all 23 test(s)
+1..23
 *** t4027-diff-submodule.sh ***
 ok 1 - setup
 ok 2 - git diff --raw HEAD
@@ -4286,24 +6718,33 @@
 ok 3 - file is considered binary by plumbing
 ok 4 - setup textconv filters
 ok 5 - diff produces text
-ok 6 - diff-tree produces binary
-ok 7 - log produces text
-ok 8 - format-patch produces binary
-ok 9 - status -v produces text
-ok 10 - diffstat does not run textconv
-ok 11 - textconv does not act on symlinks
-# passed all 11 test(s)
-1..11
+ok 6 - show commit produces text
+ok 7 - diff-tree produces binary
+ok 8 - log produces text
+ok 9 - format-patch produces binary
+ok 10 - status -v produces text
+ok 11 - show blob produces binary
+ok 12 - show --textconv blob produces text
+ok 13 - show --no-textconv blob produces binary
+ok 14 - grep-diff (-G) operates on textconv data (add)
+ok 15 - grep-diff (-G) operates on textconv data (modification)
+ok 16 - pickaxe (-S) operates on textconv data (add)
+ok 17 - pickaxe (-S) operates on textconv data (modification)
+ok 18 - diffstat does not run textconv
+ok 19 - textconv does not act on symlinks
+# passed all 19 test(s)
+1..19
 *** t4031-diff-rewrite-binary.sh ***
 ok 1 - create binary file with changes
 ok 2 - vanilla diff is binary
 ok 3 - rewrite diff is binary
 ok 4 - rewrite diff can show binary patch
-ok 5 - rewrite diff --stat shows binary changes
-ok 6 - setup textconv
-ok 7 - rewrite diff respects textconv
-# passed all 7 test(s)
-1..7
+ok 5 - rewrite diff --numstat shows binary changes
+ok 6 - diff --stat counts binary rewrite as 0 lines
+ok 7 - setup textconv
+ok 8 - rewrite diff respects textconv
+# passed all 8 test(s)
+1..8
 *** t4032-diff-inter-hunk-context.sh ***
 ok 1 - diff -U0, 1 common line: count hunks (2)
 ok 2 - diff -U0, 1 common line: check output
@@ -4355,24 +6796,28 @@
 ok 18 - test parsing words for newline
 ok 19 - test when words are only removed at the end
 ok 20 - --word-diff=none
-ok 21 - diff driver 'bibtex'
-ok 22 - diff driver 'cpp'
-ok 23 - diff driver 'csharp'
-ok 24 - diff driver 'fortran'
-ok 25 - diff driver 'html'
-ok 26 - diff driver 'java'
-ok 27 - diff driver 'matlab'
-ok 28 - diff driver 'objc'
-ok 29 - diff driver 'pascal'
-ok 30 - diff driver 'perl'
-ok 31 - diff driver 'php'
-ok 32 - diff driver 'python'
-ok 33 - diff driver 'ruby'
-ok 34 - diff driver 'tex'
-ok 35 - word-diff with diff.sbe
-ok 36 - word-diff with no newline at EOF
-# passed all 36 test(s)
-1..36
+ok 21 - unset default driver
+ok 22 - diff driver 'ada'
+ok 23 - diff driver 'bibtex'
+ok 24 - diff driver 'cpp'
+ok 25 - diff driver 'csharp'
+ok 26 - diff driver 'fortran'
+ok 27 - diff driver 'html'
+ok 28 - diff driver 'java'
+ok 29 - diff driver 'matlab'
+ok 30 - diff driver 'objc'
+ok 31 - diff driver 'pascal'
+ok 32 - diff driver 'perl'
+ok 33 - diff driver 'php'
+ok 34 - diff driver 'python'
+ok 35 - diff driver 'ruby'
+ok 36 - diff driver 'tex'
+ok 37 - word-diff with diff.sbe
+ok 38 - word-diff with no newline at EOF
+ok 39 - setup history with two files
+ok 40 - wordRegex for the first file does not apply to the second
+# passed all 40 test(s)
+1..40
 *** t4035-diff-quiet.sh ***
 ok 1 - setup
 ok 2 - git diff-tree HEAD^ HEAD
@@ -4388,8 +6833,15 @@
 ok 12 - git diff-tree -Snot-found HEAD^ HEAD -- b
 ok 13 - git diff-files
 ok 14 - git diff-index --cached HEAD
-# passed all 14 test(s)
-1..14
+ok 15 - git diff, one file outside repo
+ok 16 - git diff, both files outside repo
+ok 17 - git diff --ignore-space-at-eol, one file outside repo
+ok 18 - git diff --ignore-space-at-eol, both files outside repo
+ok 19 - git diff --ignore-all-space, one file outside repo
+ok 20 - git diff --ignore-all-space, both files outside repo
+ok 21 - git diff --quiet ignores stat-change only entries
+# passed all 21 test(s)
+1..21
 *** t4036-format-patch-signer-mime.sh ***
 ok 1 - setup
 ok 2 - format normally
@@ -4408,14 +6860,29 @@
 ok 2 - check combined output (1)
 ok 3 - check combined output (2)
 ok 4 - diagnose truncated file
-# passed all 4 test(s)
-1..4
+ok 5 - setup for --cc --raw
+ok 6 - check --cc --raw with four trees
+ok 7 - check --cc --raw with forty trees
+ok 8 - setup combined ignore spaces
+ok 9 - check combined output (no ignore space)
+ok 10 - check combined output (ignore space at eol)
+ok 11 - check combined output (ignore space change)
+ok 12 - check combined output (ignore all spaces)
+ok 13 - combine diff coalesce simple
+ok 14 - combine diff coalesce tricky
+not ok 15 - combine diff coalesce three parents # TODO known breakage
+ok 16 - combine diff missing delete bug
+ok 17 - combine diff gets tree sorting right
+# still have 1 known breakage(s)
+# passed all remaining 16 test(s)
+1..17
 *** t4039-diff-assume-unchanged.sh ***
 ok 1 - setup
 ok 2 - diff-index does not examine assume-unchanged entries
 ok 3 - diff-files does not examine assume-unchanged entries
-# passed all 3 test(s)
-1..3
+ok 4 - find-copies-harder is not confused by mode bits
+# passed all 4 test(s)
+1..4
 *** t4040-whitespace-status.sh ***
 ok 1 - setup
 ok 2 - diff-tree --exit-code
@@ -4432,47 +6899,51 @@
 1..11
 *** t4041-diff-submodule-option.sh ***
 ok 1 - added submodule
-ok 2 - modified submodule(forward)
-ok 3 - modified submodule(forward)
-ok 4 - modified submodule(forward) --submodule
-ok 5 - modified submodule(forward) --submodule=short
-ok 6 - modified submodule(backward)
-ok 7 - modified submodule(backward and forward)
-ok 8 - typechanged submodule(submodule->blob), --cached
-ok 9 - typechanged submodule(submodule->blob)
-ok 10 - typechanged submodule(submodule->blob)
-ok 11 - nonexistent commit
-ok 12 - typechanged submodule(blob->submodule)
-ok 13 - submodule is up to date
-ok 14 - submodule contains untracked content
-ok 15 - submodule contains untracked content (untracked ignored)
-ok 16 - submodule contains untracked content (dirty ignored)
-ok 17 - submodule contains untracked content (all ignored)
-ok 18 - submodule contains untracked and modifed content
-ok 19 - submodule contains untracked and modifed content (untracked ignored)
-ok 20 - submodule contains untracked and modifed content (dirty ignored)
-ok 21 - submodule contains untracked and modifed content (all ignored)
-ok 22 - submodule contains modifed content
-ok 23 - submodule is modified
-ok 24 - modified submodule contains untracked content
-ok 25 - modified submodule contains untracked content (untracked ignored)
-ok 26 - modified submodule contains untracked content (dirty ignored)
-ok 27 - modified submodule contains untracked content (all ignored)
-ok 28 - modified submodule contains untracked and modifed content
-ok 29 - modified submodule contains untracked and modifed content (untracked ignored)
-ok 30 - modified submodule contains untracked and modifed content (dirty ignored)
-ok 31 - modified submodule contains untracked and modifed content (all ignored)
-ok 32 - modified submodule contains modifed content
-ok 33 - deleted submodule
-ok 34 - multiple submodules
-ok 35 - path filter
-ok 36 - given commit
-ok 37 - given commit --submodule
-ok 38 - given commit --submodule=short
-ok 39 - setup .git file for sm2
-ok 40 - diff --submodule with .git file
-# passed all 40 test(s)
-1..40
+ok 2 - added submodule, set diff.submodule
+ok 3 - --submodule=short overrides diff.submodule
+ok 4 - diff.submodule does not affect plumbing
+ok 5 - modified submodule(forward)
+ok 6 - modified submodule(forward)
+ok 7 - modified submodule(forward) --submodule
+ok 8 - modified submodule(forward) --submodule=short
+ok 9 - modified submodule(backward)
+ok 10 - modified submodule(backward and forward)
+ok 11 - typechanged submodule(submodule->blob), --cached
+ok 12 - typechanged submodule(submodule->blob)
+ok 13 - typechanged submodule(submodule->blob)
+ok 14 - nonexistent commit
+ok 15 - typechanged submodule(blob->submodule)
+ok 16 - submodule is up to date
+ok 17 - submodule contains untracked content
+ok 18 - submodule contains untracked content (untracked ignored)
+ok 19 - submodule contains untracked content (dirty ignored)
+ok 20 - submodule contains untracked content (all ignored)
+ok 21 - submodule contains untracked and modifed content
+ok 22 - submodule contains untracked and modifed content (untracked ignored)
+ok 23 - submodule contains untracked and modifed content (dirty ignored)
+ok 24 - submodule contains untracked and modifed content (all ignored)
+ok 25 - submodule contains modifed content
+ok 26 - submodule is modified
+ok 27 - modified submodule contains untracked content
+ok 28 - modified submodule contains untracked content (untracked ignored)
+ok 29 - modified submodule contains untracked content (dirty ignored)
+ok 30 - modified submodule contains untracked content (all ignored)
+ok 31 - modified submodule contains untracked and modifed content
+ok 32 - modified submodule contains untracked and modifed content (untracked ignored)
+ok 33 - modified submodule contains untracked and modifed content (dirty ignored)
+ok 34 - modified submodule contains untracked and modifed content (all ignored)
+ok 35 - modified submodule contains modifed content
+ok 36 - deleted submodule
+ok 37 - multiple submodules
+ok 38 - path filter
+ok 39 - given commit
+ok 40 - given commit --submodule
+ok 41 - given commit --submodule=short
+ok 42 - setup .git file for sm2
+ok 43 - diff --submodule with .git file
+ok 44 - diff --submodule with objects referenced by alternates
+# passed all 44 test(s)
+1..44
 *** t4042-diff-textconv-caching.sh ***
 ok 1 - setup
 ok 2 - first textconv works
@@ -4480,8 +6951,9 @@
 ok 4 - cached textconv does not run helper
 ok 5 - changing textconv invalidates cache
 ok 6 - switching diff driver produces correct results
-# passed all 6 test(s)
-1..6
+ok 7 - log notes cache and still use cache for -p
+# passed all 7 test(s)
+1..7
 *** t4043-diff-rename-binary.sh ***
 ok 1 - prepare repository
 ok 2 - move the files into a "sub" directory
@@ -4498,14 +6970,17 @@
 ok 2 - -p --relative=subdir/
 ok 3 - -p --relative=subdir
 ok 4 - -p --relative=sub
-ok 5 - --stat --relative=subdir/
-ok 6 - --stat --relative=subdir
-ok 7 - --stat --relative=sub
-ok 8 - --raw --relative=subdir/
-ok 9 - --raw --relative=subdir
-ok 10 - --raw --relative=sub
-# passed all 10 test(s)
-1..10
+ok 5 - --numstat --relative=subdir/
+ok 6 - --numstat --relative=subdir
+ok 7 - --numstat --relative=sub
+ok 8 - --stat --relative=subdir/
+ok 9 - --stat --relative=subdir
+ok 10 - --stat --relative=sub
+ok 11 - --raw --relative=subdir/
+ok 12 - --raw --relative=subdir
+ok 13 - --raw --relative=sub
+# passed all 13 test(s)
+1..13
 *** t4046-diff-unmerged.sh ***
 ok 1 - setup
 ok 2 - diff-files -0
@@ -4516,7 +6991,7 @@
 1..5
 *** t4047-diff-dirstat.sh ***
 ok 1 - setup
-ok 2 - sanity check setup (--stat)
+ok 2 - sanity check setup (--numstat)
 ok 3 - various ways to misspell --dirstat
 ok 4 - vanilla --dirstat
 ok 5 - vanilla -X
@@ -4555,8 +7030,9 @@
 ok 38 - --dirstat=future_param,lines,0 should fail loudly
 ok 39 - --dirstat=dummy1,cumulative,2dummy should report both unrecognized parameters
 ok 40 - diff.dirstat=future_param,0,lines should warn, but still work
-# passed all 40 test(s)
-1..40
+ok 41 - --shortstat --dirstat should output only one dirstat
+# passed all 41 test(s)
+1..41
 *** t4048-diff-combined-binary.sh ***
 ok 1 - setup binary merge conflict
 ok 2 - diff -m indicates binary-ness
@@ -4576,8 +7052,11 @@
 1..14
 *** t4049-diff-stat-count.sh ***
 ok 1 - setup
-# passed all 1 test(s)
-1..1
+ok 2 - mode-only change show as a 0-line change
+ok 3 - binary changes do not count in lines
+ok 4 - exclude unmerged entries from total file count
+# passed all 4 test(s)
+1..4
 *** t4050-diff-histogram.sh ***
 ok 1 - histogram diff
 ok 2 - histogram diff output is valid
@@ -4590,6 +7069,158 @@
 ok 3 - diff -W
 # passed all 3 test(s)
 1..3
+*** t4052-stat-output.sh ***
+ok 1 - preparation
+ok 2 - format-patch: small change with long name gives more space to the name
+ok 3 - format-patch --stat=width: a long name is given more room when the bar is short
+ok 4 - format-patch --stat-width=width with long name
+ok 5 - format-patch --stat=...,name-width with long name
+ok 6 - format-patch --stat-name-width with long name
+ok 7 - diff: small change with long name gives more space to the name
+ok 8 - diff --stat=width: a long name is given more room when the bar is short
+ok 9 - diff --stat-width=width with long name
+ok 10 - diff --stat=...,name-width with long name
+ok 11 - diff --stat-name-width with long name
+ok 12 - show: small change with long name gives more space to the name
+ok 13 - show --stat=width: a long name is given more room when the bar is short
+ok 14 - show --stat-width=width with long name
+ok 15 - show --stat=...,name-width with long name
+ok 16 - show --stat-name-width with long name
+ok 17 - log: small change with long name gives more space to the name
+ok 18 - log --stat=width: a long name is given more room when the bar is short
+ok 19 - log --stat-width=width with long name
+ok 20 - log --stat=...,name-width with long name
+ok 21 - log --stat-name-width with long name
+ok 22 - preparation for big change tests
+ok 23 - format-patch ignores COLUMNS (big change)
+ok 24 - format-patch --graph ignores COLUMNS (big change)
+ok 25 - diff respects COLUMNS (big change)
+ok 26 - show respects COLUMNS (big change)
+ok 27 - log respects COLUMNS (big change)
+ok 28 - log --graph respects COLUMNS (big change)
+ok 29 - format-patch ignores not enough COLUMNS (big change)
+ok 30 - format-patch --graph ignores not enough COLUMNS (big change)
+ok 31 - diff respects not enough COLUMNS (big change)
+ok 32 - show respects not enough COLUMNS (big change)
+ok 33 - log respects not enough COLUMNS (big change)
+ok 34 - log --graph respects not enough COLUMNS (big change)
+ok 35 - format-patch ignores statGraphWidth config
+ok 36 - format-patch --graph ignores statGraphWidth config
+ok 37 - diff respects statGraphWidth config
+ok 38 - show respects statGraphWidth config
+ok 39 - log respects statGraphWidth config
+ok 40 - log --graph respects statGraphWidth config
+ok 41 - format-patch --stat=width with big change
+ok 42 - format-patch --stat-width=width with big change
+ok 43 - format-patch --stat-graph-width with big change
+ok 44 - format-patch --stat-width=width --graph with big change
+ok 45 - format-patch --stat-graph-width --graph with big change
+ok 46 - diff --stat=width with big change
+ok 47 - diff --stat-width=width with big change
+ok 48 - diff --stat-graph-width with big change
+ok 49 - show --stat=width with big change
+ok 50 - show --stat-width=width with big change
+ok 51 - show --stat-graph-width with big change
+ok 52 - log --stat=width with big change
+ok 53 - log --stat-width=width with big change
+ok 54 - log --stat-graph-width with big change
+ok 55 - log --stat-width=width --graph with big change
+ok 56 - log --stat-graph-width --graph with big change
+ok 57 - preparation for long filename tests
+ok 58 - format-patch --stat=width with big change is more balanced
+ok 59 - format-patch --stat=width --graph with big change is balanced
+ok 60 - diff --stat=width with big change is more balanced
+ok 61 - show --stat=width with big change is more balanced
+ok 62 - log --stat=width with big change is more balanced
+ok 63 - log --stat=width --graph with big change is balanced
+ok 64 - format-patch ignores COLUMNS (long filename)
+ok 65 - format-patch --graph ignores COLUMNS (long filename)
+ok 66 - diff respects COLUMNS (long filename)
+ok 67 - show respects COLUMNS (long filename)
+ok 68 - log respects COLUMNS (long filename)
+ok 69 - log --graph respects COLUMNS (long filename)
+ok 70 - format-patch ignores prefix greater than COLUMNS (big change)
+ok 71 - format-patch --graph ignores prefix greater than COLUMNS (big change)
+ok 72 - diff respects prefix greater than COLUMNS (big change)
+ok 73 - show respects prefix greater than COLUMNS (big change)
+ok 74 - log respects prefix greater than COLUMNS (big change)
+ok 75 - log --graph respects prefix greater than COLUMNS (big change)
+ok 76 - merge --stat respects COLUMNS (big change)
+ok 77 - merge --stat respects COLUMNS (long filename)
+# passed all 77 test(s)
+1..77
+*** t4053-diff-no-index.sh ***
+ok 1 - setup
+ok 2 - git diff --no-index directories
+ok 3 - git diff --no-index relative path outside repo
+ok 4 - git diff --no-index with broken index
+ok 5 - git diff outside repo with broken index
+ok 6 - git diff --no-index executed outside repo gives correct error message
+ok 7 - diff D F and diff F D
+ok 8 - turning a file into a directory
+# passed all 8 test(s)
+1..8
+*** t4054-diff-bogus-tree.sh ***
+ok 1 - create bogus tree
+ok 2 - create tree with matching file
+ok 3 - raw diff shows null sha1 (addition)
+ok 4 - raw diff shows null sha1 (removal)
+ok 5 - raw diff shows null sha1 (modification)
+ok 6 - raw diff shows null sha1 (other direction)
+ok 7 - raw diff shows null sha1 (reverse)
+ok 8 - raw diff shows null sha1 (index)
+ok 9 - patch fails due to bogus sha1 (addition)
+ok 10 - patch fails due to bogus sha1 (removal)
+ok 11 - patch fails due to bogus sha1 (modification)
+ok 12 - patch fails due to bogus sha1 (other direction)
+ok 13 - patch fails due to bogus sha1 (reverse)
+ok 14 - patch fails due to bogus sha1 (index)
+# passed all 14 test(s)
+1..14
+*** t4055-diff-context.sh ***
+ok 1 - setup
+ok 2 - the default number of context lines is 3
+ok 3 - diff.context honored by "log"
+ok 4 - The -U option overrides diff.context
+ok 5 - diff.context honored by "diff"
+ok 6 - plumbing not affected
+ok 7 - non-integer config parsing
+ok 8 - negative integer config parsing
+ok 9 - -U0 is valid, so is diff.context=0
+# passed all 9 test(s)
+1..9
+*** t4056-diff-order.sh ***
+ok 1 - setup
+ok 2 - no order (=tree object order)
+ok 3 - missing orderfile
+ok 4 - unreadable orderfile
+ok 5 - orderfile using option (1)
+ok 6 - orderfile is fifo (1)
+ok 7 - orderfile using config (1)
+ok 8 - cancelling configured orderfile (1)
+ok 9 - orderfile using option (2)
+ok 10 - orderfile is fifo (2)
+ok 11 - orderfile using config (2)
+ok 12 - cancelling configured orderfile (2)
+ok 13 - setup for testing combine-diff order
+ok 14 - combine-diff: no order (=tree object order)
+ok 15 - combine-diff: orderfile using option (1)
+ok 16 - combine-diff: orderfile using option (2)
+# passed all 16 test(s)
+1..16
+*** t4057-diff-combined-paths.sh ***
+ok 1 - trivial merge - combine-diff empty
+ok 2 - only one trully conflicting path
+ok 3 - merge introduces new file
+ok 4 - merge removed a file
+# passed all 4 test(s)
+1..4
+*** t4058-diff-duplicates.sh ***
+ok 1 - create trees with duplicate entries
+ok 2 - diff-tree between trees
+ok 3 - diff-tree with renames
+# passed all 3 test(s)
+1..3
 *** t4100-apply-stat.sh ***
 ok 1 - rename
 ok 2 - rename with recount
@@ -4637,26 +7268,28 @@
 *** t4103-apply-binary.sh ***
 ok 1 - setup
 ok 2 - stat binary diff -- should not fail.
-ok 3 - stat binary diff (copy) -- should not fail.
-ok 4 - check binary diff -- should fail.
-ok 5 - check binary diff (copy) -- should fail.
-ok 6 - check incomplete binary diff with replacement -- should fail.
-ok 7 - check incomplete binary diff with replacement (copy) -- should fail.
-ok 8 - check binary diff with replacement.
-ok 9 - check binary diff with replacement (copy).
-ok 10 - apply binary diff -- should fail.
+ok 3 - stat binary -p0 diff -- should not fail.
+ok 4 - stat binary diff (copy) -- should not fail.
+ok 5 - check binary diff -- should fail.
+ok 6 - check binary diff (copy) -- should fail.
+ok 7 - check incomplete binary diff with replacement -- should fail.
+ok 8 - check incomplete binary diff with replacement (copy) -- should fail.
+ok 9 - check binary diff with replacement.
+ok 10 - check binary diff with replacement (copy).
 ok 11 - apply binary diff -- should fail.
-ok 12 - apply binary diff (copy) -- should fail.
+ok 12 - apply binary diff -- should fail.
 ok 13 - apply binary diff (copy) -- should fail.
-ok 14 - apply binary diff with full-index
-ok 15 - apply binary diff with full-index (copy)
-ok 16 - apply full-index binary diff in new repo
-ok 17 - apply binary diff without replacement.
-ok 18 - apply binary diff without replacement (copy).
-ok 19 - apply binary diff.
-ok 20 - apply binary diff (copy).
-# passed all 20 test(s)
-1..20
+ok 14 - apply binary diff (copy) -- should fail.
+ok 15 - apply binary diff with full-index
+ok 16 - apply binary diff with full-index (copy)
+ok 17 - apply full-index binary diff in new repo
+ok 18 - apply binary diff without replacement.
+ok 19 - apply binary diff without replacement (copy).
+ok 20 - apply binary diff.
+ok 21 - apply binary diff (copy).
+ok 22 - apply binary -p0 diff
+# passed all 22 test(s)
+1..22
 *** t4104-apply-boundary.sh ***
 ok 1 - setup
 ok 2 - apply add-a-patch with context
@@ -4710,12 +7343,21 @@
 ok 5 - patch2 applies (apply.ignorewhitespace = change)
 ok 6 - patch3 fails (missing string at EOL)
 ok 7 - patch4 fails (missing EOL at EOF)
-ok 8 - patch5 applies (leading whitespace)
-ok 9 - patches do not mangle whitespace
-ok 10 - re-create file (with --ignore-whitespace)
-ok 11 - patch5 fails (--no-ignore-whitespace)
-# passed all 11 test(s)
-1..11
+ok 8 - patch5 fails (leading whitespace differences matter)
+ok 9 - re-create file (with --ignore-whitespace)
+ok 10 - patch5 fails (--no-ignore-whitespace)
+# passed all 10 test(s)
+1..10
+*** t4108-apply-threeway.sh ***
+ok 1 - setup
+ok 2 - apply without --3way
+ok 3 - apply with --3way
+ok 4 - apply with --3way with rerere enabled
+ok 5 - apply -3 with add/add conflict setup
+ok 6 - apply -3 with add/add conflict
+ok 7 - apply -3 with add/add conflict (dirty working tree)
+# passed all 7 test(s)
+1..7
 *** t4109-apply-multifrag.sh ***
 ok 1 - git apply (1)
 ok 2 - git apply (2)
@@ -4732,12 +7374,13 @@
 ok 3 - apply from subdir of toplevel
 ok 4 - apply --cached from subdir of toplevel
 ok 5 - apply --index from subdir of toplevel
-ok 6 - apply from .git dir
-ok 7 - apply from subdir of .git dir
-ok 8 - apply --cached from .git dir
-ok 9 - apply --cached from subdir of .git dir
-# passed all 9 test(s)
-1..9
+ok 6 - apply half-broken patch from subdir of toplevel
+ok 7 - apply from .git dir
+ok 8 - apply from subdir of .git dir
+ok 9 - apply --cached from .git dir
+ok 10 - apply --cached from subdir of .git dir
+# passed all 10 test(s)
+1..10
 *** t4112-apply-renames.sh ***
 ok 1 - check rename/copy patch
 ok 2 - apply rename/copy patch
@@ -4781,14 +7424,15 @@
 1..7
 *** t4117-apply-reject.sh ***
 ok 1 - setup
-ok 2 - apply without --reject should fail
+ok 2 - apply --reject is incompatible with --3way
 ok 3 - apply without --reject should fail
-ok 4 - apply with --reject should fail but update the file
+ok 4 - apply without --reject should fail
 ok 5 - apply with --reject should fail but update the file
-ok 6 - the same test with --verbose
-ok 7 - apply cleanly with --verbose
-# passed all 7 test(s)
-1..7
+ok 6 - apply with --reject should fail but update the file
+ok 7 - the same test with --verbose
+ok 8 - apply cleanly with --verbose
+# passed all 8 test(s)
+1..8
 *** t4118-apply-empty-context.sh ***
 ok 1 - setup
 ok 2 - apply --numstat
@@ -4806,8 +7450,9 @@
 ok 8 - same but with traditional patch input of depth 2
 ok 9 - same but with traditional patch input of depth 1
 ok 10 - same but with traditional patch input of depth 2
-# passed all 10 test(s)
-1..10
+ok 11 - in subdir with traditional patch input
+# passed all 11 test(s)
+1..11
 *** t4120-apply-popt.sh ***
 ok 1 - setup
 ok 2 - apply git diff with -p2
@@ -4828,8 +7473,12 @@
 ok 1 - setup
 ok 2 - apply
 ok 3 - check result
-# passed all 3 test(s)
-1..3
+ok 4 - do not read from beyond symbolic link
+ok 5 - do not follow symbolic link (setup)
+ok 6 - do not follow symbolic link (same input)
+ok 7 - do not follow symbolic link (existing)
+# passed all 7 test(s)
+1..7
 *** t4123-apply-shrink.sh ***
 ok 1 - setup
 ok 2 - apply should fail gracefully
@@ -4910,8 +7559,10 @@
 ok 72 - same, but with the --ignore-space-option
 ok 73 - same, but with CR-LF line endings && cr-at-eol set
 ok 74 - same, but with CR-LF line endings && cr-at-eol unset
-# passed all 74 test(s)
-1..74
+ok 75 - whitespace=fix to expand
+ok 76 - whitespace check skipped for excluded paths
+# passed all 76 test(s)
+1..76
 *** t4125-apply-ws-fuzz.sh ***
 ok 1 - setup
 ok 2 - nofix
@@ -5025,44 +7676,129 @@
 *** t4136-apply-check.sh ***
 ok 1 - setup
 ok 2 - apply --check exits non-zero with unrecognized input
-# passed all 2 test(s)
-1..2
+ok 3 - apply exits non-zero with no-op patch
+# passed all 3 test(s)
+1..3
+*** t4137-apply-submodule.sh ***
+ok 1 - apply_index: added submodule creates empty directory
+ok 2 - apply_index: added submodule leaves existing empty directory alone
+ok 3 - apply_index: added submodule doesn't remove untracked unignored file with same name
+ok 4 - apply_index: replace tracked file with submodule creates empty directory
+ok 5 - apply_index: replace directory with submodule
+ok 6 - apply_index: removed submodule leaves submodule directory and its contents in place
+ok 7 - apply_index: removed submodule leaves submodule containing a .git directory alone
+ok 8 - apply_index: replace submodule with a directory must fail
+ok 9 - apply_index: replace submodule containing a .git directory with a directory must fail
+not ok 10 - apply_index: replace submodule with a file must fail # TODO known breakage
+not ok 11 - apply_index: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - apply_index: modified submodule does not update submodule work tree
+ok 13 - apply_index: modified submodule does not update submodule work tree to invalid commit
+ok 14 - apply_index: modified submodule does not update submodule work tree from invalid commit
+ok 15 - apply_3way: added submodule creates empty directory
+ok 16 - apply_3way: added submodule leaves existing empty directory alone
+ok 17 - apply_3way: added submodule doesn't remove untracked unignored file with same name
+ok 18 - apply_3way: replace tracked file with submodule creates empty directory
+ok 19 - apply_3way: replace directory with submodule
+ok 20 - apply_3way: removed submodule leaves submodule directory and its contents in place
+ok 21 - apply_3way: removed submodule leaves submodule containing a .git directory alone
+ok 22 - apply_3way: replace submodule with a directory must fail
+ok 23 - apply_3way: replace submodule containing a .git directory with a directory must fail
+not ok 24 - apply_3way: replace submodule with a file must fail # TODO known breakage
+not ok 25 - apply_3way: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - apply_3way: modified submodule does not update submodule work tree
+ok 27 - apply_3way: modified submodule does not update submodule work tree to invalid commit
+ok 28 - apply_3way: modified submodule does not update submodule work tree from invalid commit
+# still have 4 known breakage(s)
+# passed all remaining 24 test(s)
+1..28
+*** t4138-apply-ws-expansion.sh ***
+ok 1 - setup
+ok 2 - apply with ws expansion (t=$t)
+ok 3 - apply with ws expansion (t=$t)
+ok 4 - apply with ws expansion (t=$t)
+ok 5 - apply with ws expansion (t=$t)
+# passed all 5 test(s)
+1..5
+*** t4139-apply-escape.sh ***
+ok 1 - bump git repo one level down
+ok 2 - cannot create file containing ..
+ok 3 - can create file containing .. with --unsafe-paths
+ok 4 - cannot create file containing .. (index)
+ok 5 - cannot create file containing .. with --unsafe-paths (index)
+ok 6 - cannot delete file containing ..
+ok 7 - can delete file containing .. with --unsafe-paths
+ok 8 - cannot delete file containing .. (index)
+ok 9 - symlink escape via ..
+ok 10 - symlink escape via .. (index)
+ok 11 - symlink escape via absolute path
+ok 12 - symlink escape via absolute path (index)
+# passed all 12 test(s)
+1..12
 *** t4150-am.sh ***
 ok 1 - setup: messages
 ok 2 - setup
 ok 3 - am applies patch correctly
-ok 4 - am applies patch e-mail not in a mbox
-ok 5 - am applies patch e-mail not in a mbox with CRLF
-ok 6 - am applies patch e-mail with preceding whitespace
-ok 7 - setup: new author and committer
-ok 8 - am changes committer and keeps author
-ok 9 - am --signoff adds Signed-off-by: line
-ok 10 - am stays in branch
-ok 11 - am --signoff does not add Signed-off-by: line if already there
-ok 12 - am without --keep removes Re: and [PATCH] stuff
-ok 13 - am --keep really keeps the subject
-ok 14 - am -3 falls back to 3-way merge
-ok 15 - am can rename a file
-ok 16 - am -3 can rename a file
-ok 17 - am -3 can rename a file after falling back to 3-way merge
-ok 18 - am -3 -q is quiet
-ok 19 - am pauses on conflict
-ok 20 - am --skip works
-ok 21 - am --resolved works
-ok 22 - am takes patches from a Pine mailbox
-ok 23 - am fails on mail without patch
-ok 24 - am fails on empty patch
-ok 25 - am works from stdin in subdirectory
-ok 26 - am works from file (relative path given) in subdirectory
-ok 27 - am works from file (absolute path given) in subdirectory
-ok 28 - am --committer-date-is-author-date
-ok 29 - am without --committer-date-is-author-date
-ok 30 - am --ignore-date
-ok 31 - am into an unborn branch
-ok 32 - am newline in subject
-ok 33 - am -q is quiet
-# passed all 33 test(s)
-1..33
+ok 4 - am fails if index is dirty
+ok 5 - am applies patch e-mail not in a mbox
+ok 6 - am applies patch e-mail not in a mbox with CRLF
+ok 7 - am applies patch e-mail with preceding whitespace
+ok 8 - am applies stgit patch
+ok 9 - am --patch-format=stgit applies stgit patch
+ok 10 - am applies stgit series
+ok 11 - am applies hg patch
+ok 12 - am --patch-format=hg applies hg patch
+ok 13 - am with applypatch-msg hook
+ok 14 - am with failing applypatch-msg hook
+ok 15 - am with pre-applypatch hook
+ok 16 - am with failing pre-applypatch hook
+ok 17 - am with post-applypatch hook
+ok 18 - am with failing post-applypatch hook
+ok 19 - am --scissors cuts the message at the scissors line
+ok 20 - am --no-scissors overrides mailinfo.scissors
+ok 21 - setup: new author and committer
+ok 22 - am changes committer and keeps author
+ok 23 - am --signoff adds Signed-off-by: line
+ok 24 - am stays in branch
+ok 25 - am --signoff does not add Signed-off-by: line if already there
+ok 26 - am without --keep removes Re: and [PATCH] stuff
+ok 27 - am --keep really keeps the subject
+ok 28 - am --keep-non-patch really keeps the non-patch part
+ok 29 - setup am -3
+ok 30 - am -3 falls back to 3-way merge
+ok 31 - am -3 -p0 can read --no-prefix patch
+ok 32 - am with config am.threeWay falls back to 3-way merge
+ok 33 - am with config am.threeWay overridden by --no-3way
+ok 34 - am can rename a file
+ok 35 - am -3 can rename a file
+ok 36 - am -3 can rename a file after falling back to 3-way merge
+ok 37 - am -3 -q is quiet
+ok 38 - am pauses on conflict
+ok 39 - am --skip works
+ok 40 - am --abort removes a stray directory
+ok 41 - am refuses patches when paused
+ok 42 - am --resolved works
+ok 43 - am --resolved fails if index has no changes
+ok 44 - am --resolved fails if index has unmerged entries
+ok 45 - am takes patches from a Pine mailbox
+ok 46 - am fails on mail without patch
+ok 47 - am fails on empty patch
+ok 48 - am works from stdin in subdirectory
+ok 49 - am works from file (relative path given) in subdirectory
+ok 50 - am works from file (absolute path given) in subdirectory
+ok 51 - am --committer-date-is-author-date
+ok 52 - am without --committer-date-is-author-date
+ok 53 - am --ignore-date
+ok 54 - am into an unborn branch
+ok 55 - am newline in subject
+ok 56 - am -q is quiet
+ok 57 - am empty-file does not infloop
+ok 58 - am --message-id really adds the message id
+ok 59 - am.messageid really adds the message id
+ok 60 - am --message-id -s signs off after the message id
+ok 61 - am -3 works with rerere
+ok 62 - am -s unexpected trailer block
+# passed all 62 test(s)
+1..62
 *** t4151-am-abort.sh ***
 ok 1 - setup
 ok 2 - am stops at a patch that does not apply
@@ -5071,9 +7807,19 @@
 ok 5 - am -3 stops at a patch that does not apply
 ok 6 - am -3 --skip continue after failed am -3
 ok 7 - am --abort goes back after failed am -3
-ok 8 - am --abort will keep the local commits intact
-# passed all 8 test(s)
-1..8
+ok 8 - am -3 --skip removes otherfile-4
+ok 9 - am -3 --abort removes otherfile-4
+ok 10 - am --abort will keep the local commits intact
+ok 11 - am --abort will keep dirty index intact
+ok 12 - am -3 stops on conflict on unborn branch
+ok 13 - am -3 --skip clears index on unborn branch
+ok 14 - am -3 --abort removes otherfile-4 on unborn branch
+ok 15 - am -3 --abort on unborn branch removes applied commits
+ok 16 - am --abort on unborn branch will keep local commits intact
+ok 17 - am --skip leaves index stat info alone
+ok 18 - am --abort leaves index stat info alone
+# passed all 18 test(s)
+1..18
 *** t4152-am-subjects.sh ***
 ok 1 - setup baseline commit
 ok 2 - create patches with short subject
@@ -5090,6 +7836,14 @@
 ok 13 - multiline subject preserved (format-patch -k | am -k)
 # passed all 13 test(s)
 1..13
+*** t4153-am-resume-override-opts.sh ***
+ok 1 - setup
+ok 2 # skip --3way overrides --no-3way (missing TTY)
+ok 3 - --no-quiet overrides --quiet
+ok 4 - --signoff overrides --no-signoff
+ok 5 # skip --reject overrides --no-reject (missing TTY)
+# passed all 5 test(s)
+1..5
 *** t4200-rerere.sh ***
 ok 1 - setup
 ok 2 - nothing recorded without rerere
@@ -5126,16 +7880,20 @@
 ok 5 - output from user-defined format is re-wrapped
 ok 6 - shortlog wrapping
 ok 7 - shortlog from non-git directory
-ok 8 - shortlog encoding
-# passed all 8 test(s)
-1..8
+ok 8 - shortlog should add newline when input line matches wraplen
+ok 9 - shortlog encoding
+ok 10 - shortlog ignores commits with missing authors
+ok 11 - shortlog with revision pseudo options
+# passed all 11 test(s)
+1..11
 *** t4202-log.sh ***
+You do not seem to have gpg installed
 ok 1 - setup
 ok 2 - pretty
 ok 3 - pretty (tformat)
 ok 4 - pretty (shortcut)
 ok 5 - format
-ok 6 - format %w(12,1,2)
+ok 6 - format %w(11,1,2)
 ok 7 - format %w(,1,2)
 ok 8 - oneline
 ok 9 - diff-filter=A
@@ -5144,41 +7902,81 @@
 ok 12 - diff-filter=R
 ok 13 - diff-filter=C
 ok 14 - git log --follow
-ok 15 - git log --no-walk <commits> sorts by commit time
-ok 16 - git show <commits> leaves list of commits as given
-ok 17 - setup case sensitivity tests
-ok 18 - log --grep
-ok 19 - log --grep option parsing
-ok 20 - log -i --grep
-ok 21 - log --grep -i
-ok 22 - simple log --graph
-ok 23 - set up merge history
-ok 24 - log --graph with merge
-ok 25 - log --graph with full output
-ok 26 - set up more tangled history
-ok 27 - log --graph with merge
-ok 28 - log.decorate configuration
-ok 29 - reflog is expected format
-ok 30 - whatchanged is expected format
-ok 31 - log.abbrevCommit configuration
-ok 32 - show added path under "--follow -M"
-# passed all 32 test(s)
-1..32
+ok 15 - git config log.follow works like --follow
+ok 16 - git config log.follow does not die with multiple paths
+ok 17 - git config log.follow does not die with no paths
+ok 18 - git config log.follow is overridden by --no-follow
+ok 19 - git log --no-walk <commits> sorts by commit time
+ok 20 - git log --no-walk=sorted <commits> sorts by commit time
+ok 21 - git log --no-walk=unsorted <commits> leaves list of commits as given
+ok 22 - git show <commits> leaves list of commits as given
+ok 23 - setup case sensitivity tests
+ok 24 - log --grep
+ok 25 - log --invert-grep --grep
+ok 26 - log --invert-grep --grep -i
+ok 27 - log --grep option parsing
+ok 28 - log -i --grep
+ok 29 - log --grep -i
+ok 30 - log -F -E --grep=<ere> uses ere
+ok 31 - simple log --graph
+ok 32 - set up merge history
+ok 33 - log --graph with merge
+ok 34 - log --raw --graph -m with merge
+ok 35 - diff-tree --graph
+ok 36 - log --graph with full output
+ok 37 - set up more tangled history
+ok 38 - log --graph with merge
+ok 39 - log.decorate configuration
+ok 40 - reflog is expected format
+ok 41 - whatchanged is expected format
+ok 42 - log.abbrevCommit configuration
+ok 43 - show added path under "--follow -M"
+ok 44 - git log -c --follow
+ok 45 - log --graph with diff and stats
+ok 46 - dotdot is a parent directory
+ok 47 # skip log --graph --show-signature (missing GPG)
+ok 48 # skip log --graph --show-signature for merged tag (missing GPG)
+ok 49 - log --graph --no-walk is forbidden
+ok 50 - log diagnoses bogus HEAD
+# passed all 50 test(s)
+1..50
 *** t4203-mailmap.sh ***
 ok 1 - setup
-ok 2 - No mailmap
-ok 3 - default .mailmap
-ok 4 - mailmap.file set
-ok 5 - mailmap.file override
-ok 6 - mailmap.file non-existent
-ok 7 - name entry after email entry
-ok 8 - name entry after email entry, case-insensitive
-ok 9 - No mailmap files, but configured
-ok 10 - Shortlog output (complex mapping)
-ok 11 - Log output (complex mapping)
-ok 12 - Blame output (complex mapping)
-# passed all 12 test(s)
-1..12
+ok 2 - check-mailmap no arguments
+ok 3 - check-mailmap arguments
+ok 4 - check-mailmap --stdin
+ok 5 - check-mailmap --stdin arguments
+ok 6 - check-mailmap bogus contact
+ok 7 - No mailmap
+ok 8 - default .mailmap
+ok 9 - mailmap.file set
+ok 10 - mailmap.file override
+ok 11 - mailmap.file non-existent
+ok 12 - name entry after email entry
+ok 13 - name entry after email entry, case-insensitive
+ok 14 - No mailmap files, but configured
+ok 15 - setup mailmap blob tests
+ok 16 - mailmap.blob set
+ok 17 - mailmap.blob overrides .mailmap
+ok 18 - mailmap.file overrides mailmap.blob
+ok 19 - mailmap.blob can be missing
+ok 20 - mailmap.blob defaults to off in non-bare repo
+ok 21 - mailmap.blob defaults to HEAD:.mailmap in bare repo
+ok 22 - mailmap.blob can handle blobs without trailing newline
+ok 23 - cleanup after mailmap.blob tests
+ok 24 - single-character name
+ok 25 - preserve canonical email case
+ok 26 - Shortlog output (complex mapping)
+ok 27 - Log output (complex mapping)
+ok 28 - Log output with --use-mailmap
+ok 29 - Log output with log.mailmap
+ok 30 - Grep author with --use-mailmap
+ok 31 - Grep author with log.mailmap
+ok 32 - Only grep replaced author with --use-mailmap
+ok 33 - Blame output (complex mapping)
+ok 34 - commit --author honors mailmap
+# passed all 34 test(s)
+1..34
 *** t4204-patch-id.sh ***
 ok 1 - setup
 ok 2 - patch-id output is well-formed
@@ -5186,22 +7984,67 @@
 ok 4 - patch-id detects inequality
 ok 5 - patch-id supports git-format-patch output
 ok 6 - whitespace is irrelevant in footer
-ok 7 - patch-id supports git-format-patch MIME output
-ok 8 - patch-id handles no-nl-at-eof markers
-# passed all 8 test(s)
-1..8
+ok 7 - file order is irrelevant with --stable
+ok 8 - file order is relevant with --unstable
+ok 9 - default is unstable
+ok 10 - patchid.stable = true is stable
+ok 11 - patchid.stable = false is unstable
+ok 12 - --unstable overrides patchid.stable = true
+ok 13 - --stable overrides patchid.stable = false
+ok 14 - patch-id supports git-format-patch MIME output
+ok 15 - patch-id handles no-nl-at-eof markers
+# passed all 15 test(s)
+1..15
 *** t4205-log-pretty-formats.sh ***
 ok 1 - set up basic repos
 ok 2 - alias builtin format
 ok 3 - alias masking builtin format
 ok 4 - alias user-defined format
-ok 5 - alias user-defined tformat
-ok 6 - alias non-existent format
-ok 7 - alias of an alias
-ok 8 - alias masking an alias
-ok 9 - alias loop
-# passed all 9 test(s)
-1..9
+ok 5 - alias user-defined tformat with %s (ISO8859-1 encoding)
+ok 6 - alias user-defined tformat with %s (utf-8 encoding)
+ok 7 - alias user-defined tformat
+ok 8 - alias non-existent format
+ok 9 - alias of an alias
+ok 10 - alias masking an alias
+ok 11 - alias loop
+ok 12 - NUL separation
+ok 13 - NUL termination
+ok 14 - NUL separation with --stat
+not ok 15 - NUL termination with --stat # TODO known breakage
+ok 16 - setup more commits
+ok 17 - left alignment formatting
+ok 18 - left alignment formatting. i18n.logOutputEncoding
+ok 19 - left alignment formatting at the nth column
+ok 20 - left alignment formatting at the nth column. i18n.logOutputEncoding
+ok 21 - left alignment formatting with no padding
+ok 22 - left alignment formatting with no padding. i18n.logOutputEncoding
+ok 23 - left alignment formatting with trunc
+ok 24 - left alignment formatting with trunc. i18n.logOutputEncoding
+ok 25 - left alignment formatting with ltrunc
+ok 26 - left alignment formatting with ltrunc. i18n.logOutputEncoding
+ok 27 - left alignment formatting with mtrunc
+ok 28 - left alignment formatting with mtrunc. i18n.logOutputEncoding
+ok 29 - right alignment formatting
+ok 30 - right alignment formatting. i18n.logOutputEncoding
+ok 31 - right alignment formatting at the nth column
+ok 32 - right alignment formatting at the nth column. i18n.logOutputEncoding
+ok 33 - right alignment formatting with no padding
+ok 34 - right alignment formatting with no padding. i18n.logOutputEncoding
+ok 35 - center alignment formatting
+ok 36 - center alignment formatting. i18n.logOutputEncoding
+ok 37 - center alignment formatting at the nth column
+ok 38 - center alignment formatting at the nth column. i18n.logOutputEncoding
+ok 39 - center alignment formatting with no padding
+ok 40 - center alignment formatting with no padding. i18n.logOutputEncoding
+ok 41 - left/right alignment formatting with stealing
+ok 42 - left/right alignment formatting with stealing. i18n.logOutputEncoding
+ok 43 - strbuf_utf8_replace() not producing NUL
+ok 44 - ISO and ISO-strict date formats display the same values
+ok 45 - log decoration properly follows tag chain
+ok 46 - clean log decoration
+# still have 1 known breakage(s)
+# passed all remaining 45 test(s)
+1..46
 *** t4206-log-follow-harder-copies.sh ***
 ok 1 - add a file path0 and commit.
 ok 2 - Change path0.
@@ -5217,12 +8060,112 @@
 1..2
 *** t4208-log-magic-pathspec.sh ***
 ok 1 - setup
-ok 2 - "git log :/" should be ambiguous
-ok 3 - "git log :" should be ambiguous
-ok 4 - git log -- :
-ok 5 - git log HEAD -- :/
+ok 2 - "git log :/" should not be ambiguous
+ok 3 - "git log :/a" should be ambiguous (applied both rev and worktree)
+ok 4 - "git log :/a -- " should not be ambiguous
+ok 5 - "git log -- :/a" should not be ambiguous
+ok 6 - "git log :" should be ambiguous
+ok 7 - git log -- :
+ok 8 - git log HEAD -- :/
+ok 9 - command line pathspec parsing for "git log"
+# passed all 9 test(s)
+1..9
+*** t4209-log-pickaxe.sh ***
+ok 1 - setup
+ok 2 - log --grep (match)
+ok 3 - log --grep (nomatch)
+ok 4 - log --grep --regexp-ignore-case (match)
+ok 5 - log --grep -i (match)
+ok 6 - log --grep --regexp-ignore-case (nomatch)
+ok 7 - log --grep -i (nomatch)
+ok 8 - log --author (match)
+ok 9 - log --author (nomatch)
+ok 10 - log --author --regexp-ignore-case (match)
+ok 11 - log --author -i (match)
+ok 12 - log --author --regexp-ignore-case (nomatch)
+ok 13 - log --author -i (nomatch)
+ok 14 - log -G (nomatch)
+ok 15 - log -G (match)
+ok 16 - log -G --regexp-ignore-case (nomatch)
+ok 17 - log -G -i (nomatch)
+ok 18 - log -G --regexp-ignore-case (match)
+ok 19 - log -G -i (match)
+ok 20 - log -G --textconv (missing textconv tool)
+ok 21 - log -G --no-textconv (missing textconv tool)
+ok 22 - log -S (nomatch)
+ok 23 - log -S (match)
+ok 24 - log -S --regexp-ignore-case (match)
+ok 25 - log -S -i (match)
+ok 26 - log -S --regexp-ignore-case (nomatch)
+ok 27 - log -S -i (nomatch)
+ok 28 - log -S --pickaxe-regex (nomatch)
+ok 29 - log -S --pickaxe-regex (match)
+ok 30 - log -S --pickaxe-regex --regexp-ignore-case (match)
+ok 31 - log -S --pickaxe-regex -i (match)
+ok 32 - log -S --pickaxe-regex --regexp-ignore-case (nomatch)
+ok 33 - log -S --pickaxe-regex -i (nomatch)
+ok 34 - log -S --textconv (missing textconv tool)
+ok 35 - log -S --no-textconv (missing textconv tool)
+# passed all 35 test(s)
+1..35
+*** t4210-log-i18n.sh ***
+ok 1 - create commits in different encodings
+ok 2 - log --grep searches in log output encoding (utf8)
+ok 3 - log --grep searches in log output encoding (latin1)
+ok 4 - log --grep does not find non-reencoded values (utf8)
+ok 5 - log --grep does not find non-reencoded values (latin1)
 # passed all 5 test(s)
 1..5
+*** t4211-line-log.sh ***
+ok 1 - setup (import history)
+ok 2 - -L 4,12:a.c simple
+ok 3 - -L 4,+9:a.c simple
+ok 4 - -L '/long f/,/^}/:a.c' simple
+ok 5 - -L :f:a.c simple
+ok 6 - -L '/main/,/^}/:a.c' simple
+ok 7 - -L :main:a.c simple
+ok 8 - -L 1,+4:a.c simple
+ok 9 - -L 20:a.c simple
+ok 10 - -L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple
+ok 11 - -L 24,+1:a.c simple
+ok 12 - -M -L '/long f/,/^}/:b.c' move-support
+ok 13 - -M -L ':f:b.c' parallel-change
+ok 14 - -L 4,12:a.c -L :main:a.c simple
+ok 15 - -L 4,18:a.c -L ^:main:a.c simple
+ok 16 - -L :main:a.c -L 4,18:a.c simple
+ok 17 - -L 4:a.c -L 8,12:a.c simple
+ok 18 - -L 8,12:a.c -L 4:a.c simple
+ok 19 - invalid args: -L
+ok 20 - invalid args: -L b.c
+ok 21 - invalid args: -L 1:
+ok 22 - invalid args: -L 1:nonexistent
+ok 23 - invalid args: -L 1:simple
+ok 24 - invalid args: -L '/foo:b.c'
+ok 25 - invalid args: -L 1000:b.c
+ok 26 - invalid args: -L 1,1000:b.c
+ok 27 - invalid args: -L :b.c
+ok 28 - invalid args: -L :foo:b.c
+ok 29 - -L X (X == nlines)
+ok 30 - -L X (X == nlines + 1)
+ok 31 - -L X (X == nlines + 2)
+ok 32 - -L ,Y (Y == nlines)
+ok 33 - -L ,Y (Y == nlines + 1)
+ok 34 - -L ,Y (Y == nlines + 2)
+ok 35 - -L with --first-parent and a merge
+# passed all 35 test(s)
+1..35
+*** t4212-log-corrupt.sh ***
+ok 1 - setup
+ok 2 - fsck notices broken commit
+ok 3 - git log with broken author email
+ok 4 - git log --format with broken author email
+ok 5 - unparsable dates produce sentinel value
+ok 6 - unparsable dates produce sentinel value (%ad)
+ok 7 - date parser recognizes integer overflow
+ok 8 - date parser recognizes time_t overflow
+ok 9 - absurdly far-in-future date
+# passed all 9 test(s)
+1..9
 *** t4252-am-options.sh ***
 ok 1 - setup
 ok 2 - interrupted am --whitespace=fix
@@ -5239,9 +8182,9 @@
 ok 2 - am with dos files without --keep-cr
 ok 3 - am with dos files with --keep-cr
 ok 4 - am with dos files config am.keepcr
-ok 5 - am with dos files config am.keepcr overriden by --no-keep-cr
+ok 5 - am with dos files config am.keepcr overridden by --no-keep-cr
 ok 6 - am with dos files with --keep-cr continue
-ok 7 - am with unix files config am.keepcr overriden by --no-keep-cr
+ok 7 - am with unix files config am.keepcr overridden by --no-keep-cr
 # passed all 7 test(s)
 1..7
 *** t4254-am-corrupt.sh ***
@@ -5250,6 +8193,43 @@
 ok 3 - compare diagnostic; ensure file is still here
 # passed all 3 test(s)
 1..3
+*** t4255-am-submodule.sh ***
+ok 1 - am: added submodule creates empty directory
+ok 2 - am: added submodule leaves existing empty directory alone
+ok 3 - am: added submodule doesn't remove untracked unignored file with same name
+ok 4 - am: replace tracked file with submodule creates empty directory
+ok 5 - am: replace directory with submodule
+ok 6 - am: removed submodule leaves submodule directory and its contents in place
+ok 7 - am: removed submodule leaves submodule containing a .git directory alone
+ok 8 - am: replace submodule with a directory must fail
+ok 9 - am: replace submodule containing a .git directory with a directory must fail
+not ok 10 - am: replace submodule with a file must fail # TODO known breakage
+not ok 11 - am: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - am: modified submodule does not update submodule work tree
+ok 13 - am: modified submodule does not update submodule work tree to invalid commit
+ok 14 - am: modified submodule does not update submodule work tree from invalid commit
+ok 15 - am_3way: added submodule creates empty directory
+ok 16 - am_3way: added submodule leaves existing empty directory alone
+ok 17 - am_3way: added submodule doesn't remove untracked unignored file with same name
+ok 18 - am_3way: replace tracked file with submodule creates empty directory
+ok 19 - am_3way: replace directory with submodule
+ok 20 - am_3way: removed submodule leaves submodule directory and its contents in place
+ok 21 - am_3way: removed submodule leaves submodule containing a .git directory alone
+not ok 22 - am_3way: replace submodule with a directory must fail # TODO known breakage
+not ok 23 - am_3way: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 24 - am_3way: replace submodule with a file must fail # TODO known breakage
+not ok 25 - am_3way: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - am_3way: modified submodule does not update submodule work tree
+ok 27 - am_3way: modified submodule does not update submodule work tree to invalid commit
+ok 28 - am_3way: modified submodule does not update submodule work tree from invalid commit
+ok 29 - setup diff.submodule
+ok 30 - diff.submodule unset
+ok 31 - diff.submodule unset with extra file
+ok 32 - diff.submodule=log
+ok 33 - diff.submodule=log with extra file
+# still have 6 known breakage(s)
+# passed all remaining 27 test(s)
+1..33
 *** t4300-merge-tree.sh ***
 ok 1 - setup
 ok 2 - file add A, !B
@@ -5263,70 +8243,68 @@
 ok 10 - file change A, B (mixed)
 ok 11 - file remove A, !B
 ok 12 - file remove !A, B
-ok 13 - file change A, remove B
-ok 14 - file remove A, change B
-# passed all 14 test(s)
-1..14
+ok 13 - file remove A, B (same)
+ok 14 - file change A, remove B
+ok 15 - file remove A, change B
+ok 16 - tree add A, B (same)
+ok 17 - tree add A, B (different)
+ok 18 - tree unchanged A, removed B
+ok 19 - turn file to tree
+ok 20 - turn tree to file
+# passed all 20 test(s)
+1..20
 *** t5000-tar-tree.sh ***
 ok 1 - populate workdir
 ok 2 - add ignored file
 ok 3 - add files to repository
-ok 4 - create bare clone
-ok 5 - remove ignored file
-ok 6 - git archive
-ok 7 - git tar-tree
-ok 8 - git archive vs. git tar-tree
-ok 9 - git archive in a bare repo
-ok 10 - git archive vs. the same in a bare repo
-ok 11 - git archive with --output
-ok 12 - git archive --remote
-ok 13 - validate file modification time
-ok 14 - git get-tar-commit-id
-ok 15 - extract tar archive
-ok 16 - validate filenames
-ok 17 - validate file contents
-ok 18 - git tar-tree with prefix
-ok 19 - extract tar archive with prefix
-ok 20 - validate filenames with prefix
-ok 21 - validate file contents with prefix
-ok 22 - create archives with substfiles
-ok 23 - extract substfiles
-ok 24 - validate substfile contents
-ok 25 - extract substfiles from archive with prefix
-ok 26 - validate substfile contents from archive with prefix
-ok 27 - git archive --format=zip
-ok 28 - git archive --format=zip in a bare repo
-ok 29 - git archive --format=zip vs. the same in a bare repo
-ok 30 - git archive --format=zip with --output
-ok 31 - git archive with --output, inferring format
-ok 32 - git archive with --output, override inferred format
-ok 33 - extract ZIP archive
-ok 34 - validate filenames