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) $@
 
 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/git@$(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
+@@ -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
-@@ -31,6 +31,7 @@
- #else
- #include <openssl/evp.h>
- #include <openssl/hmac.h>
-+#include <openssl/x509v3.h>
- #endif
- 
- struct store_conf {
-@@ -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
-@@ -279,6 +332,7 @@
- #endif
- 	SSL_CTX *ctx;
- 	int ret;
-+	X509 *cert;
- 
- 	SSL_library_init();
- 	SSL_load_error_strings();
-@@ -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)
- {
-@@ -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
-@@ -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 > $@
- 	echo '	mkdir -p blib/lib' >> $@
- 	echo '	$(RM) blib/lib/Git.pm; cp Git.pm blib/lib/' >> $@
- 	echo '	$(RM) blib/lib/Error.pm' >> $@
--	'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
- 	echo '	cp private-Error.pm blib/lib/Error.pm' >> $@
- 	echo install: >> $@
--	echo '	mkdir -p "$$(DESTDIR)$(instdir_SQ)"' >> $@
--	echo '	$(RM) "$$(DESTDIR)$(instdir_SQ)/Git.pm"; cp Git.pm "$$(DESTDIR)$(instdir_SQ)"' >> $@
--	echo '	$(RM) "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@
--	'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
--	echo '	cp private-Error.pm "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@
-+	echo '	mkdir -p "$$(DESTDIR)/$(instdir_SQ)"' >> $@
-+	echo '	$(RM) "$$(DESTDIR)/$(instdir_SQ)/Git.pm"; cp Git.pm "$$(DESTDIR)/$(instdir_SQ)"' >> $@
-+	echo '	$(RM) "$$(DESTDIR)/$(instdir_SQ)/Error.pm"' >> $@
-+	echo '	cp private-Error.pm "$$(DESTDIR)/$(instdir_SQ)/Error.pm"' >> $@
- 	echo instlibdir: >> $@
+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
+@@ -80,7 +80,7 @@
  	echo '	echo $(instdir_SQ)' >> $@
  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
-@@ -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
-@@ -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
+@@ -445,7 +445,7 @@
+ #IPv6
+ for tuah in ::1 [::1] [::1]: user@::1 user@[::1] user@[::1]: [user@::1] [user@::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
+@@ -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 "master@{May 25 2005}" (before history)
-ok 29 - Query master@{2005-05-25} (before history)
-ok 30 - Query "master@{May 26 2005 23:31:59}" (1 second before history)
-ok 31 - Query "master@{May 26 2005 23:32:00}" (exactly history start)
-ok 32 - Query "master@{May 26 2005 23:32:30}" (first non-creation change)
-ok 33 - Query "master@{2005-05-26 23:33:01}" (middle of history with gap)
-ok 34 - Query "master@{2005-05-26 23:38:00}" (middle of history)
-ok 35 - Query "master@{2005-05-26 23:43:00}" (exact end of history)
-ok 36 - Query "master@{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 master@{2005-05-26 23:30}:F (expect TEST)
-ok 41 - git cat-file blob master@{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 "master@{May 25 2005}" (before history)
+ok 38 - Query master@{2005-05-25} (before history)
+ok 39 - Query "master@{May 26 2005 23:31:59}" (1 second before history)
+ok 40 - Query "master@{May 26 2005 23:32:00}" (exactly history start)
+ok 41 - Query "master@{May 26 2005 23:32:30}" (first non-creation change)
+ok 42 - Query "master@{2005-05-26 23:33:01}" (middle of history with gap)
+ok 43 - Query "master@{2005-05-26 23:38:00}" (middle of history)
+ok 44 - Query "master@{2005-05-26 23:43:00}" (exact end of history)
+ok 45 - Query "master@{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 master@{2005-05-26 23:30}:F (expect TEST)
+ok 50 - git cat-file blob master@{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/foo@bar' is valid
-ok 28 - ref name 'heads/v@{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/foo@bar' is valid
+ok 29 - ref name 'heads/v@{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 - master@{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 - master@{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 - my-side@{upstream} resolves to correct full name
-ok 5 - my-side@{u} resolves to correct commit
-ok 6 - not-tracking@{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 my-side@{u} forks from the same
-ok 10 - merge my-side@{u} records the correct name
-ok 11 - branch -d other@{u}
-ok 12 - checkout other@{u}
-ok 13 - log -g other@{u}
-ok 14 - log -g other@{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/my-side@{upstream} does not resolve to my-side{upstream}
+ok 9 - my-side@{u} resolves to correct commit
+ok 10 - not-tracking@{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 my-side@{u} forks from the same
+ok 14 - merge my-side@{u} records the correct name
+ok 15 - branch -d other@{u}
+ok 16 - checkout other@{u}
+ok 17 - branch@{u} works when tracking a local branch
+ok 18 - branch@{u} error message when no upstream
+ok 19 - @{u} error message when no upstream
+ok 20 - branch@{u} error message with misspelt branch
+ok 21 - @{u} error message when not on a branch
+ok 22 - branch@{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 other@{u}
+ok 26 - log -g other@{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 - HEAD@{1} = new-one
+ok 5 - @{now} = new-two
+ok 6 - HEAD@{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 - HEAD@{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 - HEAD@{-1} is nonsensical
+ok 24 - @{-1}@{-1} is nonsensical
+ok 25 - HEAD@{3} = old-two
+ok 26 - @{3} is nonsensical
+ok 27 - switch to old-branch
+ok 28 - HEAD = refs/heads/old-branch
+ok 29 - HEAD@{1} = new-two
+ok 30 - @{1} = old-one
+ok 31 - create path with @
+ok 32 - @:normal = content
+ok 33 - @:fun@ny = 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 stash@{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 stash@{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
-ok 35 - validate file contents
-ok 36 - git archive --format=zip with prefix
-ok 37 - extract ZIP archive with prefix
-ok 38 - validate filenames with prefix
-ok 39 - validate file contents with prefix
-ok 40 - git archive --list outside of a git repo
-ok 41 - clients cannot access unreachable commits
-ok 42 - git-archive --prefix=olde-
-ok 43 - setup tar filters
-ok 44 - archive --list mentions user filter
-ok 45 - archive --list shows only enabled remote filters
-ok 46 - invoke tar filter by format
-ok 47 - invoke tar filter by extension
-ok 48 - default output format remains tar
-ok 49 - extension matching requires dot
-ok 50 - only enabled filters are available remotely
-ok 51 - git archive --format=tgz
-ok 52 - git archive --format=tar.gz
-ok 53 - infer tgz from .tgz filename
-ok 54 - infer tgz from .tar.gz filename
-ok 55 - extract tgz file
-ok 56 - remote tar.gz is allowed by default
-ok 57 - remote tar.gz can be disabled
-# passed all 57 test(s)
-1..57
+ok 4 - setup export-subst
+ok 5 - create bare clone
+ok 6 - remove ignored file
+ok 7 - git archive
+ok 8 -  extract tar archive
+ok 9 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)
+ok 10 -  validate filenames
+ok 11 -  validate file contents
+ok 12 - git archive --prefix=prefix/
+ok 13 -  extract tar archive
+ok 14 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)
+ok 15 -  validate filenames
+ok 16 -  validate file contents
+ok 17 - git-archive --prefix=olde-
+ok 18 -  extract tar archive
+ok 19 # skip  interpret pax headers (missing TAR_NEEDS_PAX_FALLBACK)
+ok 20 -  validate filenames
+ok 21 -  validate file contents
+ok 22 - git archive on large files
+ok 23 - git archive in a bare repo
+ok 24 - git archive vs. the same in a bare repo
+ok 25 - git archive with --output
+ok 26 - git archive --remote
+ok 27 - validate file modification time
+ok 28 - git get-tar-commit-id
+ok 29 - git archive with --output, override inferred format
+ok 30 - git archive --list outside of a git repo
+ok 31 - clients cannot access unreachable commits
+ok 32 - upload-archive can allow unreachable commits
+ok 33 - setup tar filters
+ok 34 - archive --list mentions user filter
+ok 35 - archive --list shows only enabled remote filters
+ok 36 - invoke tar filter by format
+ok 37 - invoke tar filter by extension
+ok 38 - default output format remains tar
+ok 39 - extension matching requires dot
+ok 40 - only enabled filters are available remotely
+ok 41 - git archive --format=tgz
+ok 42 - git archive --format=tar.gz
+ok 43 - infer tgz from .tgz filename
+ok 44 - infer tgz from .tar.gz filename
+ok 45 - extract tgz file
+ok 46 - remote tar.gz is allowed by default
+ok 47 - remote tar.gz can be disabled
+ok 48 - archive and :(glob)
+ok 49 - catch non-matching pathspec
+# passed all 49 test(s)
+1..49
 *** t5001-archive-attr.sh ***
 ok 1 - setup
 ok 2 - git archive
@@ -5347,10 +8325,95 @@
 ok 17 -  bare-worktree/ignored-by-tree exists
 ok 18 -  bare-worktree/ignored-by-worktree exists
 ok 19 - export-subst
-ok 20 - git tar-tree vs. git archive with worktree attributes
-ok 21 - git tar-tree vs. git archive with worktree attrs, bare
-# passed all 21 test(s)
-1..21
+# passed all 19 test(s)
+1..19
+*** t5002-archive-attr-pattern.sh ***
+ok 1 - setup
+ok 2 - git archive
+ok 3 -  archive/ignored does not exist
+ok 4 -  archive/not-ignored-dir/ignored does not exist
+ok 5 -  archive/not-ignored-dir/ignored-only-if-dir exists
+ok 6 -  archive/not-ignored-dir/ exists
+ok 7 -  archive/ignored-only-if-dir/ does not exist
+ok 8 -  archive/ignored-ony-if-dir/ignored-by-ignored-dir does not exist
+ok 9 -  archive/ignored-without-slash/ does not exist
+ok 10 -  archive/ignored-without-slash/foo does not exist
+ok 11 -  archive/wildcard-without-slash/ does not exist
+ok 12 -  archive/wildcard-without-slash/foo does not exist
+ok 13 -  archive/deep/and/slashless/ does not exist
+ok 14 -  archive/deep/and/slashless/foo does not exist
+ok 15 -  archive/deep/with/wildcard/ does not exist
+ok 16 -  archive/deep/with/wildcard/foo does not exist
+ok 17 -  archive/one-level-lower/ exists
+ok 18 -  archive/one-level-lower/two-levels-lower/ignored-only-if-dir/ does not exist
+ok 19 -  archive/one-level-lower/two-levels-lower/ignored-ony-if-dir/ignored-by-ignored-dir does not exist
+# passed all 19 test(s)
+1..19
+*** t5003-archive-zip.sh ***
+ok 1 - populate workdir
+ok 2 - add symlink
+ok 3 - prepare file list
+ok 4 - add ignored file
+ok 5 - add files to repository
+ok 6 - setup export-subst and diff attributes
+ok 7 - create bare clone
+ok 8 - remove ignored file
+ok 9 - git archive --format=zip
+ok 10 -  extract ZIP archive
+ok 11 -  validate filenames
+ok 12 -  validate file contents
+ok 13 -  extract ZIP archive with EOL conversion
+ok 14 -  validate that text files are converted
+ok 15 -  validate that binary files are unchanged
+ok 16 -  validate that diff files are converted
+ok 17 -  validate that -diff files are unchanged
+ok 18 - git archive --format=zip in a bare repo
+ok 19 - git archive --format=zip vs. the same in a bare repo
+ok 20 - git archive --format=zip with --output
+ok 21 - git archive with --output, inferring format
+ok 22 - git archive --format=zip with prefix
+ok 23 -  extract ZIP archive
+ok 24 -  validate filenames
+ok 25 -  validate file contents
+ok 26 -  extract ZIP archive with EOL conversion
+ok 27 -  validate that text files are converted
+ok 28 -  validate that binary files are unchanged
+ok 29 -  validate that diff files are converted
+ok 30 -  validate that -diff files are unchanged
+ok 31 - git archive -0 --format=zip on large files
+ok 32 -  extract ZIP archive
+ok 33 -  validate filenames
+ok 34 -  validate file contents
+ok 35 -  extract ZIP archive with EOL conversion
+ok 36 -  validate that text files are converted
+ok 37 -  validate that binary files are unchanged
+ok 38 -  validate that diff files are converted
+ok 39 -  validate that -diff files are unchanged
+ok 40 - git archive --format=zip on large files
+ok 41 -  extract ZIP archive
+ok 42 -  validate filenames
+ok 43 -  validate file contents
+ok 44 -  extract ZIP archive with EOL conversion
+ok 45 -  validate that text files are converted
+ok 46 -  validate that binary files are unchanged
+ok 47 -  validate that diff files are converted
+ok 48 -  validate that -diff files are unchanged
+# passed all 48 test(s)
+1..48
+*** t5004-archive-corner-cases.sh ***
+ok 1 - create commit with empty tree
+ok 2 - tar archive of commit with empty tree
+ok 3 - tar archive of empty tree is empty
+ok 4 - tar archive of empty tree with prefix
+ok 5 - zip archive of empty tree is empty
+ok 6 - zip archive of empty tree with prefix
+ok 7 - archive complains about pathspec on empty tree
+ok 8 - create a commit with an empty subtree
+ok 9 - archive empty subtree with no pathspec
+ok 10 - archive empty subtree by direct pathspec
+ok 11 - zip archive with many entries
+# passed all 11 test(s)
+1..11
 *** t5100-mailinfo.sh ***
 ok 1 - split sample box
 ok 2 - mailinfo 0001
@@ -5369,29 +8432,32 @@
 ok 15 - mailinfo 0014
 ok 16 - mailinfo 0015
 ok 17 - mailinfo 0016
-ok 18 - split box with rfc2047 samples
-ok 19 - mailinfo rfc2047/0001
-ok 20 - mailinfo rfc2047/0002
-ok 21 - mailinfo rfc2047/0003
-ok 22 - mailinfo rfc2047/0004
-ok 23 - mailinfo rfc2047/0005
-ok 24 - mailinfo rfc2047/0006
-ok 25 - mailinfo rfc2047/0007
-ok 26 - mailinfo rfc2047/0008
-ok 27 - mailinfo rfc2047/0009
-ok 28 - mailinfo rfc2047/0010
-ok 29 - mailinfo rfc2047/0011
-ok 30 - respect NULs
-ok 31 - Preserve NULs out of MIME encoded message
-ok 32 - mailinfo on from header without name works
-# passed all 32 test(s)
-1..32
+ok 18 - mailinfo 0017
+ok 19 - split box with rfc2047 samples
+ok 20 - mailinfo rfc2047/0001
+ok 21 - mailinfo rfc2047/0002
+ok 22 - mailinfo rfc2047/0003
+ok 23 - mailinfo rfc2047/0004
+ok 24 - mailinfo rfc2047/0005
+ok 25 - mailinfo rfc2047/0006
+ok 26 - mailinfo rfc2047/0007
+ok 27 - mailinfo rfc2047/0008
+ok 28 - mailinfo rfc2047/0009
+ok 29 - mailinfo rfc2047/0010
+ok 30 - mailinfo rfc2047/0011
+ok 31 - respect NULs
+ok 32 - Preserve NULs out of MIME encoded message
+ok 33 - mailinfo on from header without name works
+ok 34 - mailinfo finds headers after embedded From line
+ok 35 - mailinfo on message with quoted >From
+# passed all 35 test(s)
+1..35
 *** t5150-request-pull.sh ***
 ok 1 - setup
 ok 2 - setup: two scripts for reading pull requests
 ok 3 - pull request when forgot to push
 ok 4 - pull request after push
-ok 5 - request names an appropriate branch
+ok 5 - request asks HEAD to be pulled
 ok 6 - pull request format
 ok 7 - request-pull ignores OPTIONS_KEEPDASHDASH poison
 # passed all 7 test(s)
@@ -5399,37 +8465,39 @@
 *** t5300-pack-object.sh ***
 ok 1 - setup
 ok 2 - pack without delta
-ok 3 - unpack without delta
-ok 4 - check unpack without delta
-ok 5 - pack with REF_DELTA
-ok 6 - unpack with REF_DELTA
-ok 7 - check unpack with REF_DELTA
-ok 8 - pack with OFS_DELTA
-ok 9 - unpack with OFS_DELTA
-ok 10 - check unpack with OFS_DELTA
-ok 11 - compare delta flavors
-ok 12 - use packed objects
-ok 13 - use packed deltified (REF_DELTA) objects
-ok 14 - use packed deltified (OFS_DELTA) objects
-ok 15 - survive missing objects/pack directory
-ok 16 - verify pack
-ok 17 - verify pack -v
-ok 18 - verify-pack catches mismatched .idx and .pack files
-ok 19 - verify-pack catches a corrupted pack signature
-ok 20 - verify-pack catches a corrupted pack version
-ok 21 - verify-pack catches a corrupted type/size of the 1st packed object data
-ok 22 - verify-pack catches a corrupted sum of the index file itself
-ok 23 - build pack index for an existing pack
-ok 24 - unpacking with --strict
-ok 25 - index-pack with --strict
-ok 26 - honor pack.packSizeLimit
-ok 27 - verify resulting packs
-ok 28 - tolerate packsizelimit smaller than biggest object
-ok 29 - verify resulting packs
-ok 30 - fake a SHA1 hash collision
-ok 31 - make sure index-pack detects the SHA1 collision
-# passed all 31 test(s)
-1..31
+ok 3 - pack-objects with bogus arguments
+ok 4 - unpack without delta
+ok 5 - check unpack without delta
+ok 6 - pack with REF_DELTA
+ok 7 - unpack with REF_DELTA
+ok 8 - check unpack with REF_DELTA
+ok 9 - pack with OFS_DELTA
+ok 10 - unpack with OFS_DELTA
+ok 11 - check unpack with OFS_DELTA
+ok 12 - compare delta flavors
+ok 13 - use packed objects
+ok 14 - use packed deltified (REF_DELTA) objects
+ok 15 - use packed deltified (OFS_DELTA) objects
+ok 16 - survive missing objects/pack directory
+ok 17 - verify pack
+ok 18 - verify pack -v
+ok 19 - verify-pack catches mismatched .idx and .pack files
+ok 20 - verify-pack catches a corrupted pack signature
+ok 21 - verify-pack catches a corrupted pack version
+ok 22 - verify-pack catches a corrupted type/size of the 1st packed object data
+ok 23 - verify-pack catches a corrupted sum of the index file itself
+ok 24 - build pack index for an existing pack
+ok 25 - unpacking with --strict
+ok 26 - index-pack with --strict
+ok 27 - honor pack.packSizeLimit
+ok 28 - verify resulting packs
+ok 29 - tolerate packsizelimit smaller than biggest object
+ok 30 - verify resulting packs
+ok 31 - fake a SHA1 hash collision
+ok 32 - make sure index-pack detects the SHA1 collision
+ok 33 - make sure index-pack detects the SHA1 collision (large blobs)
+# passed all 33 test(s)
+1..33
 *** t5301-sliding-window.sh ***
 ok 1 - setup
 ok 2 - verify-pack -v, defaults
@@ -5450,28 +8518,30 @@
 ok 8 - index-pack results should match pack-objects ones
 ok 9 - index-pack --verify on index version 1
 ok 10 - index-pack --verify on index version 2
-ok 11 - index v2: force some 64-bit offsets with pack-objects
-ok 12 - index v2: verify a pack with some 64-bit offsets
-ok 13 - 64-bit offsets: should be different from previous index v2 results
-ok 14 - index v2: force some 64-bit offsets with index-pack
-ok 15 - 64-bit offsets: index-pack result should match pack-objects one
-ok 16 - index-pack --verify on 64-bit offset v2 (cheat)
-ok 17 - index-pack --verify on 64-bit offset v2
-ok 18 - [index v1] 1) stream pack to repository
-ok 19 - [index v1] 2) create a stealth corruption in a delta base reference
-ok 20 - [index v1] 3) corrupted delta happily returned wrong data
-ok 21 - [index v1] 4) confirm that the pack is actually corrupted
-ok 22 - [index v1] 5) pack-objects happily reuses corrupted data
-ok 23 - [index v1] 6) newly created pack is BAD !
-ok 24 - [index v2] 1) stream pack to repository
-ok 25 - [index v2] 2) create a stealth corruption in a delta base reference
-ok 26 - [index v2] 3) corrupted delta happily returned wrong data
-ok 27 - [index v2] 4) confirm that the pack is actually corrupted
-ok 28 - [index v2] 5) pack-objects refuses to reuse corrupted data
-ok 29 - [index v2] 6) verify-pack detects CRC mismatch
-ok 30 - running index-pack in the object store
-# passed all 30 test(s)
-1..30
+ok 11 - pack-objects --index-version=2, is not accepted
+ok 12 - index v2: force some 64-bit offsets with pack-objects
+ok 13 - index v2: verify a pack with some 64-bit offsets
+ok 14 - 64-bit offsets: should be different from previous index v2 results
+ok 15 - index v2: force some 64-bit offsets with index-pack
+ok 16 - 64-bit offsets: index-pack result should match pack-objects one
+ok 17 - index-pack --verify on 64-bit offset v2 (cheat)
+ok 18 - index-pack --verify on 64-bit offset v2
+ok 19 - [index v1] 1) stream pack to repository
+ok 20 - [index v1] 2) create a stealth corruption in a delta base reference
+ok 21 - [index v1] 3) corrupted delta happily returned wrong data
+ok 22 - [index v1] 4) confirm that the pack is actually corrupted
+ok 23 - [index v1] 5) pack-objects happily reuses corrupted data
+ok 24 - [index v1] 6) newly created pack is BAD !
+ok 25 - [index v2] 1) stream pack to repository
+ok 26 - [index v2] 2) create a stealth corruption in a delta base reference
+ok 27 - [index v2] 3) corrupted delta happily returned wrong data
+ok 28 - [index v2] 4) confirm that the pack is actually corrupted
+ok 29 - [index v2] 5) pack-objects refuses to reuse corrupted data
+ok 30 - [index v2] 6) verify-pack detects CRC mismatch
+ok 31 - running index-pack in the object store
+ok 32 - index-pack --strict warns upon missing tagger in tag
+# passed all 32 test(s)
+1..32
 *** t5303-pack-corruption-resilience.sh ***
 ok 1 - initial setup validation
 ok 2 - create corruption in header of first object
@@ -5496,9 +8566,12 @@
 ok 21 - ... but having a loose copy allows for full recovery
 ok 22 - ... and then a repack "clears" the corruption
 ok 23 - ... and a redundant pack allows for full recovery too
-ok 24 - corrupting header to have too small output buffer fails unpack
-# passed all 24 test(s)
-1..24
+ok 24 - corruption of delta base reference pointing to wrong object
+ok 25 - ... but having a loose copy allows for full recovery
+ok 26 - ... and then a repack "clears" the corruption
+ok 27 - corrupting header to have too small output buffer fails unpack
+# passed all 27 test(s)
+1..27
 *** t5304-prune.sh ***
 ok 1 - setup
 ok 2 - prune stale packs
@@ -5508,16 +8581,21 @@
 ok 6 - gc: start with ok gc.pruneExpire
 ok 7 - prune: prune nonsense parameters
 ok 8 - prune: prune unreachable heads
-ok 9 - prune: do not prune heads listed as an argument
-ok 10 - gc --no-prune
-ok 11 - gc respects gc.pruneExpire
-ok 12 - gc --prune=<date>
-ok 13 - gc --prune=never
-ok 14 - gc respects gc.pruneExpire=never
-ok 15 - prune --expire=never
-ok 16 - gc: prune old objects after local clone
-# passed all 16 test(s)
-1..16
+ok 9 - prune: do not prune detached HEAD with no reflog
+ok 10 - prune: prune former HEAD after checking out branch
+ok 11 - prune: do not prune heads listed as an argument
+ok 12 - gc --no-prune
+ok 13 - gc respects gc.pruneExpire
+ok 14 - gc --prune=<date>
+ok 15 - gc --prune=never
+ok 16 - gc respects gc.pruneExpire=never
+ok 17 - prune --expire=never
+ok 18 - gc: prune old objects after local clone
+ok 19 - garbage report in count-objects -v
+ok 20 - prune .git/shallow
+ok 21 - prune: handle alternate object database
+# passed all 21 test(s)
+1..21
 *** t5305-include-tag.sh ***
 ok 1 - setup
 ok 2 - pack without --include-tag
@@ -5543,6 +8621,78 @@
 ok 5 - pack-objects notices corruption
 # passed all 5 test(s)
 1..5
+*** t5308-pack-detect-duplicates.sh ***
+ok 1 - pack with no duplicates
+ok 2 - index-pack will allow duplicate objects by default
+ok 3 - create batch-check test vectors
+ok 4 - lookup in duplicated pack (binary search)
+ok 5 - lookup in duplicated pack (GIT_USE_LOOKUP)
+ok 6 - index-pack can reject packs with duplicates
+# passed all 6 test(s)
+1..6
+*** t5309-pack-delta-cycles.sh ***
+ok 1 - index-pack works with a single delta (A->B)
+ok 2 - index-pack works with a single delta (B->A)
+ok 3 - index-pack detects missing base objects
+ok 4 - index-pack detects REF_DELTA cycles
+not ok 5 - failover to an object in another pack # TODO known breakage
+not ok 6 - failover to a duplicate object in the same pack # TODO known breakage
+# still have 2 known breakage(s)
+# passed all remaining 4 test(s)
+1..6
+*** t5310-pack-bitmaps.sh ***
+ok 1 - setup repo with moderate-sized history
+ok 2 - full repack creates bitmaps
+ok 3 - rev-list --test-bitmap verifies bitmaps
+ok 4 - counting commits via bitmap (full bitmap)
+ok 5 - counting partial commits via bitmap (full bitmap)
+ok 6 - counting non-linear history (full bitmap)
+ok 7 - counting commits with limiting (full bitmap)
+ok 8 - enumerate --objects (full bitmap)
+ok 9 - bitmap --objects handles non-commit objects (full bitmap)
+ok 10 - clone from bitmapped repository
+ok 11 - setup further non-bitmapped commits
+ok 12 - counting commits via bitmap (partial bitmap)
+ok 13 - counting partial commits via bitmap (partial bitmap)
+ok 14 - counting non-linear history (partial bitmap)
+ok 15 - counting commits with limiting (partial bitmap)
+ok 16 - enumerate --objects (partial bitmap)
+ok 17 - bitmap --objects handles non-commit objects (partial bitmap)
+ok 18 - fetch (partial bitmap)
+ok 19 - incremental repack cannot create bitmaps
+ok 20 - incremental repack can disable bitmaps
+ok 21 - full repack, reusing previous bitmaps
+ok 22 - fetch (full bitmap)
+ok 23 - create objects for missing-HAVE tests
+ok 24 - pack with missing blob
+ok 25 - pack with missing tree
+ok 26 - pack with missing parent
+ok 27 # skip we can read jgit bitmaps (missing JGIT)
+ok 28 # skip jgit can read our bitmaps (missing JGIT)
+ok 29 - splitting packs does not generate bogus bitmaps
+# passed all 29 test(s)
+1..29
+*** t5311-pack-bitmaps-shallow.sh ***
+ok 1 - setup shallow repo
+ok 2 - turn on bitmaps in the parent
+ok 3 - shallow fetch from bitmapped repo
+# passed all 3 test(s)
+1..3
+*** t5312-prune-corruption.sh ***
+ok 1 - disable reflogs
+ok 2 - create history reachable only from a bogus-named ref
+ok 3 - pruning does not drop bogus object
+ok 4 - put bogus object into pack
+ok 5 - destructive repack keeps packed object
+ok 6 - clean up bogus ref
+ok 7 - create history with missing tip commit
+ok 8 - pruning with a corrupted tip does not drop history
+ok 9 - pack-refs does not silently delete broken loose ref
+ok 10 - create packed-refs file with broken ref
+ok 11 - pack-refs does not silently delete broken packed ref
+ok 12 - pack-refs does not drop broken refs during deletion
+# passed all 12 test(s)
+1..12
 *** t5400-send-pack.sh ***
 ok 1 - setup
 ok 2 - pack the source repository
@@ -5554,11 +8704,12 @@
 ok 8 - override denyDeletes with git -c receive-pack
 ok 9 - denyNonFastforwards trumps --force
 ok 10 - push --all excludes remote-tracking hierarchy
-ok 11 - pushing explicit refspecs respects forcing
-ok 12 - pushing wildcard refspecs respects forcing
-ok 13 - deny pushing to delete current branch
-# passed all 13 test(s)
-1..13
+ok 11 - receive-pack runs auto-gc in remote repo
+ok 12 - pushing explicit refspecs respects forcing
+ok 13 - pushing wildcard refspecs respects forcing
+ok 14 - deny pushing to delete current branch
+# passed all 14 test(s)
+1..14
 *** t5401-update-hooks.sh ***
 ok 1 - setup
 ok 2 - push
@@ -5572,8 +8723,9 @@
 ok 10 - all *-receive hook args are empty
 ok 11 - send-pack produced no output
 ok 12 - send-pack stderr contains hook messages
-# passed all 12 test(s)
-1..12
+ok 13 - pre-receive hook that forgets to read its input
+# passed all 13 test(s)
+1..13
 *** t5402-post-merge-hook.sh ***
 ok 1 - setup
 ok 2 - post-merge does not run for up-to-date 
@@ -5630,35 +8782,364 @@
 ok 11 - git rebase -i (squash)
 ok 12 - git rebase -i (fixup without conflict)
 ok 13 - git rebase -i (double edit)
-# passed all 13 test(s)
-1..13
+ok 14 - git rebase -i (exec)
+# passed all 14 test(s)
+1..14
+*** t5408-send-pack-stdin.sh ***
+ok 1 - setup refs
+ok 2 - refs on cmdline
+ok 3 - refs over stdin
+ok 4 - stdin lines are full refspecs
+ok 5 - stdin mixed with cmdline
+ok 6 - cmdline refs written in order
+ok 7 - --stdin refs come after cmdline
+ok 8 - refspecs and --mirror do not mix (cmdline)
+ok 9 - refspecs and --mirror do not mix (stdin)
+# passed all 9 test(s)
+1..9
 *** t5500-fetch-pack.sh ***
 ok 1 - setup
 ok 2 - 1st pull
 ok 3 - post 1st pull setup
 ok 4 - 2nd pull
 ok 5 - 3rd pull
-ok 6 - clone shallow
-ok 7 - clone shallow object count
-ok 8 - clone shallow object count (part 2)
-ok 9 - fsck in shallow repo
-ok 10 - simple fetch in shallow repo
-ok 11 - no changes expected
-ok 12 - fetch same depth in shallow repo
-ok 13 - no changes expected
-ok 14 - add two more
-ok 15 - pull in shallow repo
-ok 16 - clone shallow object count
-ok 17 - add two more (part 2)
-ok 18 - deepening pull in shallow repo
-ok 19 - clone shallow object count
-ok 20 - deepening fetch in shallow repo
-ok 21 - clone shallow object count
-ok 22 - pull in shallow repo with missing merge base
-ok 23 - additional simple shallow deepenings
-ok 24 - clone shallow object count
-# passed all 24 test(s)
-1..24
+ok 6 - single branch clone
+ok 7 - single branch object count
+ok 8 - single given branch clone
+ok 9 - clone shallow depth 1
+ok 10 - clone shallow depth 1 with fsck
+ok 11 - clone shallow
+ok 12 - clone shallow depth count
+ok 13 - clone shallow object count
+ok 14 - clone shallow object count (part 2)
+ok 15 - fsck in shallow repo
+ok 16 - simple fetch in shallow repo
+ok 17 - no changes expected
+ok 18 - fetch same depth in shallow repo
+ok 19 - no changes expected
+ok 20 - add two more
+ok 21 - pull in shallow repo
+ok 22 - clone shallow object count
+ok 23 - add two more (part 2)
+ok 24 - deepening pull in shallow repo
+ok 25 - clone shallow object count
+ok 26 - deepening fetch in shallow repo
+ok 27 - clone shallow object count
+ok 28 - pull in shallow repo with missing merge base
+ok 29 - additional simple shallow deepenings
+ok 30 - clone shallow depth count
+ok 31 - clone shallow object count
+ok 32 - fetch --no-shallow on full repo
+ok 33 - fetch --depth --no-shallow
+ok 34 - turn shallow to complete repository
+ok 35 - clone shallow without --no-single-branch
+ok 36 - clone shallow object count
+ok 37 - clone shallow with --branch
+ok 38 - clone shallow object count
+ok 39 - clone shallow with detached HEAD
+ok 40 - shallow clone pulling tags
+ok 41 - shallow cloning single tag
+ok 42 - clone shallow with packed refs
+ok 43 - fetch in shallow repo unreachable shallow objects
+ok 44 - fetch creating new shallow root
+ok 45 - setup tests for the --stdin parameter
+ok 46 - fetch refs from cmdline
+ok 47 - fetch refs from stdin
+ok 48 - fetch mixed refs from cmdline and stdin
+ok 49 - test duplicate refs from stdin
+ok 50 - set up tests of missing reference
+ok 51 - test lonely missing ref
+ok 52 - test missing ref after existing
+ok 53 - test missing ref before existing
+ok 54 - test --all, --depth, and explicit head
+ok 55 - test --all, --depth, and explicit tag
+ok 56 - shallow fetch with tags does not break the repository
+ok 57 - fetch-pack --diag-url ssh+git://host/repo
+ok 58 - fetch-pack --diag-url ssh+git://host/~repo
+ok 59 - fetch-pack --diag-url ssh+git://host:/repo
+ok 60 - fetch-pack --diag-url ssh+git://host:/~repo
+ok 61 - fetch-pack --diag-url ssh+git://user@host/repo
+ok 62 - fetch-pack --diag-url ssh+git://user@host/~repo
+ok 63 - fetch-pack --diag-url ssh+git://user@host:/repo
+ok 64 - fetch-pack --diag-url ssh+git://user@host:/~repo
+ok 65 - fetch-pack --diag-url ssh+git://user@[::1]/repo
+ok 66 - fetch-pack --diag-url ssh+git://user@[::1]/~repo
+ok 67 - fetch-pack --diag-url ssh+git://user@[::1]:/repo
+ok 68 - fetch-pack --diag-url ssh+git://user@[::1]:/~repo
+ok 69 - fetch-pack --diag-url ssh+git://user@::1/repo
+ok 70 - fetch-pack --diag-url ssh+git://user@::1/~repo
+ok 71 - fetch-pack --diag-url ssh+git://user@::1:/repo
+ok 72 - fetch-pack --diag-url ssh+git://user@::1:/~repo
+ok 73 - fetch-pack --diag-url ssh+git://host:22/repo
+ok 74 - fetch-pack --diag-url ssh+git://User@host:22/repo
+ok 75 - fetch-pack --diag-url ssh+git://User@[::1]:22/repo
+ok 76 - fetch-pack --diag-url git+ssh://host/repo
+ok 77 - fetch-pack --diag-url git+ssh://host/~repo
+ok 78 - fetch-pack --diag-url git+ssh://host:/repo
+ok 79 - fetch-pack --diag-url git+ssh://host:/~repo
+ok 80 - fetch-pack --diag-url git+ssh://user@host/repo
+ok 81 - fetch-pack --diag-url git+ssh://user@host/~repo
+ok 82 - fetch-pack --diag-url git+ssh://user@host:/repo
+ok 83 - fetch-pack --diag-url git+ssh://user@host:/~repo
+ok 84 - fetch-pack --diag-url git+ssh://user@[::1]/repo
+ok 85 - fetch-pack --diag-url git+ssh://user@[::1]/~repo
+ok 86 - fetch-pack --diag-url git+ssh://user@[::1]:/repo
+ok 87 - fetch-pack --diag-url git+ssh://user@[::1]:/~repo
+ok 88 - fetch-pack --diag-url git+ssh://user@::1/repo
+ok 89 - fetch-pack --diag-url git+ssh://user@::1/~repo
+ok 90 - fetch-pack --diag-url git+ssh://user@::1:/repo
+ok 91 - fetch-pack --diag-url git+ssh://user@::1:/~repo
+ok 92 - fetch-pack --diag-url git+ssh://host:22/repo
+ok 93 - fetch-pack --diag-url git+ssh://User@host:22/repo
+ok 94 - fetch-pack --diag-url git+ssh://User@[::1]:22/repo
+ok 95 - fetch-pack --diag-url git://host/repo
+ok 96 - fetch-pack --diag-url git://host/~repo
+ok 97 - fetch-pack --diag-url git://host:/repo
+ok 98 - fetch-pack --diag-url git://host:/~repo
+ok 99 - fetch-pack --diag-url git://user@host/repo
+ok 100 - fetch-pack --diag-url git://user@host/~repo
+ok 101 - fetch-pack --diag-url git://user@host:/repo
+ok 102 - fetch-pack --diag-url git://user@host:/~repo
+ok 103 - fetch-pack --diag-url git://user@[::1]/repo
+ok 104 - fetch-pack --diag-url git://user@[::1]/~repo
+ok 105 - fetch-pack --diag-url git://user@[::1]:/repo
+ok 106 - fetch-pack --diag-url git://user@[::1]:/~repo
+ok 107 - fetch-pack --diag-url git://user@::1/repo
+ok 108 - fetch-pack --diag-url git://user@::1/~repo
+ok 109 - fetch-pack --diag-url git://user@::1:/repo
+ok 110 - fetch-pack --diag-url git://user@::1:/~repo
+ok 111 - fetch-pack --diag-url git://host:22/repo
+ok 112 - fetch-pack --diag-url git://User@host:22/repo
+ok 113 - fetch-pack --diag-url git://User@[::1]:22/repo
+ok 114 - fetch-pack --diag-url ssh://host/repo
+ok 115 - fetch-pack --diag-url ssh://host/~repo
+ok 116 - fetch-pack --diag-url ssh://host:/repo
+ok 117 - fetch-pack --diag-url ssh://host:/~repo
+ok 118 - fetch-pack --diag-url ssh://user@host/repo
+ok 119 - fetch-pack --diag-url ssh://user@host/~repo
+ok 120 - fetch-pack --diag-url ssh://user@host:/repo
+ok 121 - fetch-pack --diag-url ssh://user@host:/~repo
+ok 122 - fetch-pack --diag-url ssh://user@[::1]/repo
+ok 123 - fetch-pack --diag-url ssh://user@[::1]/~repo
+ok 124 - fetch-pack --diag-url ssh://user@[::1]:/repo
+ok 125 - fetch-pack --diag-url ssh://user@[::1]:/~repo
+ok 126 - fetch-pack --diag-url ssh://user@::1/repo
+ok 127 - fetch-pack --diag-url ssh://user@::1/~repo
+ok 128 - fetch-pack --diag-url ssh://user@::1:/repo
+ok 129 - fetch-pack --diag-url ssh://user@::1:/~repo
+ok 130 - fetch-pack --diag-url ssh://host:22/repo
+ok 131 - fetch-pack --diag-url ssh://User@host:22/repo
+ok 132 - fetch-pack --diag-url ssh://User@[::1]:22/repo
+ok 133 - fetch-pack --diag-url file://User@[::1]/repo
+ok 134 - fetch-pack --diag-url file://User@[::1]/~repo
+ok 135 - fetch-pack --diag-url ./nohost:repo
+ok 136 - fetch-pack --diag-url ./file:nohost/~repo
+ok 137 - fetch-pack --diag-url ./nohost:12:repo
+ok 138 - fetch-pack --diag-url ./file:nohost:12/~repo
+ok 139 - fetch-pack --diag-url ./[::1]:repo
+ok 140 - fetch-pack --diag-url ./file:[::1]/~repo
+ok 141 - fetch-pack --diag-url ./[::1]:23:repo
+ok 142 - fetch-pack --diag-url ./file:[::1]:23/~repo
+ok 143 - fetch-pack --diag-url ./[:repo
+ok 144 - fetch-pack --diag-url ./file:[/~repo
+ok 145 - fetch-pack --diag-url ./[:aa:repo
+ok 146 - fetch-pack --diag-url ./file:[:aa/~repo
+ok 147 - fetch-pack --diag-url host:repo
+ok 148 - fetch-pack --diag-url host:/~repo
+ok 149 - fetch-pack --diag-url [::1]:repo
+ok 150 - fetch-pack --diag-url [::1]:/~repo
+ok 151 - fetch-pack --diag-url ssh+git://host/re:po
+ok 152 - fetch-pack --diag-url ssh+git://host/~re:po
+ok 153 - fetch-pack --diag-url ssh+git://host:/re:po
+ok 154 - fetch-pack --diag-url ssh+git://host:/~re:po
+ok 155 - fetch-pack --diag-url ssh+git://user@host/re:po
+ok 156 - fetch-pack --diag-url ssh+git://user@host/~re:po
+ok 157 - fetch-pack --diag-url ssh+git://user@host:/re:po
+ok 158 - fetch-pack --diag-url ssh+git://user@host:/~re:po
+ok 159 - fetch-pack --diag-url ssh+git://user@[::1]/re:po
+ok 160 - fetch-pack --diag-url ssh+git://user@[::1]/~re:po
+ok 161 - fetch-pack --diag-url ssh+git://user@[::1]:/re:po
+ok 162 - fetch-pack --diag-url ssh+git://user@[::1]:/~re:po
+ok 163 - fetch-pack --diag-url ssh+git://user@::1/re:po
+ok 164 - fetch-pack --diag-url ssh+git://user@::1/~re:po
+ok 165 - fetch-pack --diag-url ssh+git://user@::1:/re:po
+ok 166 - fetch-pack --diag-url ssh+git://user@::1:/~re:po
+ok 167 - fetch-pack --diag-url ssh+git://host:22/re:po
+ok 168 - fetch-pack --diag-url ssh+git://User@host:22/re:po
+ok 169 - fetch-pack --diag-url ssh+git://User@[::1]:22/re:po
+ok 170 - fetch-pack --diag-url git+ssh://host/re:po
+ok 171 - fetch-pack --diag-url git+ssh://host/~re:po
+ok 172 - fetch-pack --diag-url git+ssh://host:/re:po
+ok 173 - fetch-pack --diag-url git+ssh://host:/~re:po
+ok 174 - fetch-pack --diag-url git+ssh://user@host/re:po
+ok 175 - fetch-pack --diag-url git+ssh://user@host/~re:po
+ok 176 - fetch-pack --diag-url git+ssh://user@host:/re:po
+ok 177 - fetch-pack --diag-url git+ssh://user@host:/~re:po
+ok 178 - fetch-pack --diag-url git+ssh://user@[::1]/re:po
+ok 179 - fetch-pack --diag-url git+ssh://user@[::1]/~re:po
+ok 180 - fetch-pack --diag-url git+ssh://user@[::1]:/re:po
+ok 181 - fetch-pack --diag-url git+ssh://user@[::1]:/~re:po
+ok 182 - fetch-pack --diag-url git+ssh://user@::1/re:po
+ok 183 - fetch-pack --diag-url git+ssh://user@::1/~re:po
+ok 184 - fetch-pack --diag-url git+ssh://user@::1:/re:po
+ok 185 - fetch-pack --diag-url git+ssh://user@::1:/~re:po
+ok 186 - fetch-pack --diag-url git+ssh://host:22/re:po
+ok 187 - fetch-pack --diag-url git+ssh://User@host:22/re:po
+ok 188 - fetch-pack --diag-url git+ssh://User@[::1]:22/re:po
+ok 189 - fetch-pack --diag-url git://host/re:po
+ok 190 - fetch-pack --diag-url git://host/~re:po
+ok 191 - fetch-pack --diag-url git://host:/re:po
+ok 192 - fetch-pack --diag-url git://host:/~re:po
+ok 193 - fetch-pack --diag-url git://user@host/re:po
+ok 194 - fetch-pack --diag-url git://user@host/~re:po
+ok 195 - fetch-pack --diag-url git://user@host:/re:po
+ok 196 - fetch-pack --diag-url git://user@host:/~re:po
+ok 197 - fetch-pack --diag-url git://user@[::1]/re:po
+ok 198 - fetch-pack --diag-url git://user@[::1]/~re:po
+ok 199 - fetch-pack --diag-url git://user@[::1]:/re:po
+ok 200 - fetch-pack --diag-url git://user@[::1]:/~re:po
+ok 201 - fetch-pack --diag-url git://user@::1/re:po
+ok 202 - fetch-pack --diag-url git://user@::1/~re:po
+ok 203 - fetch-pack --diag-url git://user@::1:/re:po
+ok 204 - fetch-pack --diag-url git://user@::1:/~re:po
+ok 205 - fetch-pack --diag-url git://host:22/re:po
+ok 206 - fetch-pack --diag-url git://User@host:22/re:po
+ok 207 - fetch-pack --diag-url git://User@[::1]:22/re:po
+ok 208 - fetch-pack --diag-url ssh://host/re:po
+ok 209 - fetch-pack --diag-url ssh://host/~re:po
+ok 210 - fetch-pack --diag-url ssh://host:/re:po
+ok 211 - fetch-pack --diag-url ssh://host:/~re:po
+ok 212 - fetch-pack --diag-url ssh://user@host/re:po
+ok 213 - fetch-pack --diag-url ssh://user@host/~re:po
+ok 214 - fetch-pack --diag-url ssh://user@host:/re:po
+ok 215 - fetch-pack --diag-url ssh://user@host:/~re:po
+ok 216 - fetch-pack --diag-url ssh://user@[::1]/re:po
+ok 217 - fetch-pack --diag-url ssh://user@[::1]/~re:po
+ok 218 - fetch-pack --diag-url ssh://user@[::1]:/re:po
+ok 219 - fetch-pack --diag-url ssh://user@[::1]:/~re:po
+ok 220 - fetch-pack --diag-url ssh://user@::1/re:po
+ok 221 - fetch-pack --diag-url ssh://user@::1/~re:po
+ok 222 - fetch-pack --diag-url ssh://user@::1:/re:po
+ok 223 - fetch-pack --diag-url ssh://user@::1:/~re:po
+ok 224 - fetch-pack --diag-url ssh://host:22/re:po
+ok 225 - fetch-pack --diag-url ssh://User@host:22/re:po
+ok 226 - fetch-pack --diag-url ssh://User@[::1]:22/re:po
+ok 227 - fetch-pack --diag-url file://User@[::1]/re:po
+ok 228 - fetch-pack --diag-url file://User@[::1]/~re:po
+ok 229 - fetch-pack --diag-url ./nohost:re:po
+ok 230 - fetch-pack --diag-url ./file:nohost/~re:po
+ok 231 - fetch-pack --diag-url ./nohost:12:re:po
+ok 232 - fetch-pack --diag-url ./file:nohost:12/~re:po
+ok 233 - fetch-pack --diag-url ./[::1]:re:po
+ok 234 - fetch-pack --diag-url ./file:[::1]/~re:po
+ok 235 - fetch-pack --diag-url ./[::1]:23:re:po
+ok 236 - fetch-pack --diag-url ./file:[::1]:23/~re:po
+ok 237 - fetch-pack --diag-url ./[:re:po
+ok 238 - fetch-pack --diag-url ./file:[/~re:po
+ok 239 - fetch-pack --diag-url ./[:aa:re:po
+ok 240 - fetch-pack --diag-url ./file:[:aa/~re:po
+ok 241 - fetch-pack --diag-url host:re:po
+ok 242 - fetch-pack --diag-url host:/~re:po
+ok 243 - fetch-pack --diag-url [::1]:re:po
+ok 244 - fetch-pack --diag-url [::1]:/~re:po
+ok 245 - fetch-pack --diag-url ssh+git://host/re/po
+ok 246 - fetch-pack --diag-url ssh+git://host/~re/po
+ok 247 - fetch-pack --diag-url ssh+git://host:/re/po
+ok 248 - fetch-pack --diag-url ssh+git://host:/~re/po
+ok 249 - fetch-pack --diag-url ssh+git://user@host/re/po
+ok 250 - fetch-pack --diag-url ssh+git://user@host/~re/po
+ok 251 - fetch-pack --diag-url ssh+git://user@host:/re/po
+ok 252 - fetch-pack --diag-url ssh+git://user@host:/~re/po
+ok 253 - fetch-pack --diag-url ssh+git://user@[::1]/re/po
+ok 254 - fetch-pack --diag-url ssh+git://user@[::1]/~re/po
+ok 255 - fetch-pack --diag-url ssh+git://user@[::1]:/re/po
+ok 256 - fetch-pack --diag-url ssh+git://user@[::1]:/~re/po
+ok 257 - fetch-pack --diag-url ssh+git://user@::1/re/po
+ok 258 - fetch-pack --diag-url ssh+git://user@::1/~re/po
+ok 259 - fetch-pack --diag-url ssh+git://user@::1:/re/po
+ok 260 - fetch-pack --diag-url ssh+git://user@::1:/~re/po
+ok 261 - fetch-pack --diag-url ssh+git://host:22/re/po
+ok 262 - fetch-pack --diag-url ssh+git://User@host:22/re/po
+ok 263 - fetch-pack --diag-url ssh+git://User@[::1]:22/re/po
+ok 264 - fetch-pack --diag-url git+ssh://host/re/po
+ok 265 - fetch-pack --diag-url git+ssh://host/~re/po
+ok 266 - fetch-pack --diag-url git+ssh://host:/re/po
+ok 267 - fetch-pack --diag-url git+ssh://host:/~re/po
+ok 268 - fetch-pack --diag-url git+ssh://user@host/re/po
+ok 269 - fetch-pack --diag-url git+ssh://user@host/~re/po
+ok 270 - fetch-pack --diag-url git+ssh://user@host:/re/po
+ok 271 - fetch-pack --diag-url git+ssh://user@host:/~re/po
+ok 272 - fetch-pack --diag-url git+ssh://user@[::1]/re/po
+ok 273 - fetch-pack --diag-url git+ssh://user@[::1]/~re/po
+ok 274 - fetch-pack --diag-url git+ssh://user@[::1]:/re/po
+ok 275 - fetch-pack --diag-url git+ssh://user@[::1]:/~re/po
+ok 276 - fetch-pack --diag-url git+ssh://user@::1/re/po
+ok 277 - fetch-pack --diag-url git+ssh://user@::1/~re/po
+ok 278 - fetch-pack --diag-url git+ssh://user@::1:/re/po
+ok 279 - fetch-pack --diag-url git+ssh://user@::1:/~re/po
+ok 280 - fetch-pack --diag-url git+ssh://host:22/re/po
+ok 281 - fetch-pack --diag-url git+ssh://User@host:22/re/po
+ok 282 - fetch-pack --diag-url git+ssh://User@[::1]:22/re/po
+ok 283 - fetch-pack --diag-url git://host/re/po
+ok 284 - fetch-pack --diag-url git://host/~re/po
+ok 285 - fetch-pack --diag-url git://host:/re/po
+ok 286 - fetch-pack --diag-url git://host:/~re/po
+ok 287 - fetch-pack --diag-url git://user@host/re/po
+ok 288 - fetch-pack --diag-url git://user@host/~re/po
+ok 289 - fetch-pack --diag-url git://user@host:/re/po
+ok 290 - fetch-pack --diag-url git://user@host:/~re/po
+ok 291 - fetch-pack --diag-url git://user@[::1]/re/po
+ok 292 - fetch-pack --diag-url git://user@[::1]/~re/po
+ok 293 - fetch-pack --diag-url git://user@[::1]:/re/po
+ok 294 - fetch-pack --diag-url git://user@[::1]:/~re/po
+ok 295 - fetch-pack --diag-url git://user@::1/re/po
+ok 296 - fetch-pack --diag-url git://user@::1/~re/po
+ok 297 - fetch-pack --diag-url git://user@::1:/re/po
+ok 298 - fetch-pack --diag-url git://user@::1:/~re/po
+ok 299 - fetch-pack --diag-url git://host:22/re/po
+ok 300 - fetch-pack --diag-url git://User@host:22/re/po
+ok 301 - fetch-pack --diag-url git://User@[::1]:22/re/po
+ok 302 - fetch-pack --diag-url ssh://host/re/po
+ok 303 - fetch-pack --diag-url ssh://host/~re/po
+ok 304 - fetch-pack --diag-url ssh://host:/re/po
+ok 305 - fetch-pack --diag-url ssh://host:/~re/po
+ok 306 - fetch-pack --diag-url ssh://user@host/re/po
+ok 307 - fetch-pack --diag-url ssh://user@host/~re/po
+ok 308 - fetch-pack --diag-url ssh://user@host:/re/po
+ok 309 - fetch-pack --diag-url ssh://user@host:/~re/po
+ok 310 - fetch-pack --diag-url ssh://user@[::1]/re/po
+ok 311 - fetch-pack --diag-url ssh://user@[::1]/~re/po
+ok 312 - fetch-pack --diag-url ssh://user@[::1]:/re/po
+ok 313 - fetch-pack --diag-url ssh://user@[::1]:/~re/po
+ok 314 - fetch-pack --diag-url ssh://user@::1/re/po
+ok 315 - fetch-pack --diag-url ssh://user@::1/~re/po
+ok 316 - fetch-pack --diag-url ssh://user@::1:/re/po
+ok 317 - fetch-pack --diag-url ssh://user@::1:/~re/po
+ok 318 - fetch-pack --diag-url ssh://host:22/re/po
+ok 319 - fetch-pack --diag-url ssh://User@host:22/re/po
+ok 320 - fetch-pack --diag-url ssh://User@[::1]:22/re/po
+ok 321 - fetch-pack --diag-url file://User@[::1]/re/po
+ok 322 - fetch-pack --diag-url file://User@[::1]/~re/po
+ok 323 - fetch-pack --diag-url ./nohost:re/po
+ok 324 - fetch-pack --diag-url ./file:nohost/~re/po
+ok 325 - fetch-pack --diag-url ./nohost:12:re/po
+ok 326 - fetch-pack --diag-url ./file:nohost:12/~re/po
+ok 327 - fetch-pack --diag-url ./[::1]:re/po
+ok 328 - fetch-pack --diag-url ./file:[::1]/~re/po
+ok 329 - fetch-pack --diag-url ./[::1]:23:re/po
+ok 330 - fetch-pack --diag-url ./file:[::1]:23/~re/po
+ok 331 - fetch-pack --diag-url ./[:re/po
+ok 332 - fetch-pack --diag-url ./file:[/~re/po
+ok 333 - fetch-pack --diag-url ./[:aa:re/po
+ok 334 - fetch-pack --diag-url ./file:[:aa/~re/po
+ok 335 - fetch-pack --diag-url host:re/po
+ok 336 - fetch-pack --diag-url host:/~re/po
+ok 337 - fetch-pack --diag-url [::1]:re/po
+ok 338 - fetch-pack --diag-url [::1]:/~re/po
+ok 339 # skip fetch-pack --diag-url file://c:/repo (missing MINGW)
+ok 340 # skip fetch-pack --diag-url c:repo (missing MINGW)
+# passed all 340 test(s)
+1..340
 *** t5501-fetch-push-alternates.sh ***
 ok 1 - setup
 ok 2 - pushing into a repository with the same alternate
@@ -5699,79 +9180,91 @@
 ok 7 - push with !receive.fsckobjects
 ok 8 - push with receive.fsckobjects
 ok 9 - push with transfer.fsckobjects
-# passed all 9 test(s)
-1..9
+ok 10 - push with receive.fsck.skipList
+ok 11 - push with receive.fsck.missingEmail=warn
+ok 12 - receive.fsck.unterminatedHeader=warn triggers error
+# passed all 12 test(s)
+1..12
 *** t5505-remote.sh ***
 ok 1 - setup
 ok 2 - remote information for the origin
 ok 3 - add another remote
-ok 4 - remote forces tracking branches
-ok 5 - remove remote
+ok 4 - check remote-tracking
+ok 5 - remote forces tracking branches
 ok 6 - remove remote
-ok 7 - remove remote protects local branches
-ok 8 - show
-ok 9 - show -n
-ok 10 - prune
-ok 11 - set-head --delete
-ok 12 - set-head --auto
-ok 13 - set-head --auto fails w/multiple HEADs
-ok 14 - set-head explicit
-ok 15 - prune --dry-run
-ok 16 - add --mirror && prune
-ok 17 - add --mirror=fetch
-ok 18 - fetch mirrors act as mirrors during fetch
-ok 19 - fetch mirrors can prune
-ok 20 - fetch mirrors do not act as mirrors during push
-ok 21 - add fetch mirror with specific branches
-ok 22 - fetch mirror respects specific branches
-ok 23 - add --mirror=push
-ok 24 - push mirrors act as mirrors during push
-ok 25 - push mirrors do not act as mirrors during fetch
-ok 26 - push mirrors do not allow you to specify refs
-ok 27 - add alt && prune
-ok 28 - add with reachable tags (default)
-ok 29 - add --tags
-ok 30 - add --no-tags
-ok 31 - reject --no-no-tags
-ok 32 - update
-ok 33 - update with arguments
-ok 34 - update --prune
-ok 35 - update default
-ok 36 - update default (overridden, with funny whitespace)
-ok 37 - update (with remotes.default defined)
-ok 38 - "remote show" does not show symbolic refs
-ok 39 - reject adding remote with an invalid name
-ok 40 - rename a remote
-ok 41 - rename does not update a non-default fetch refspec
-ok 42 - rename a remote with name part of fetch spec
-ok 43 - rename a remote with name prefix of other remote
-ok 44 - migrate a remote from named file in $GIT_DIR/remotes
-ok 45 - migrate a remote from named file in $GIT_DIR/branches
-ok 46 - remote prune to cause a dangling symref
-ok 47 - show empty remote
-ok 48 - remote set-branches requires a remote
-ok 49 - remote set-branches
-ok 50 - remote set-branches with --mirror
-ok 51 - new remote
-ok 52 - remote set-url bar
-ok 53 - remote set-url baz bar
-ok 54 - remote set-url zot bar
-ok 55 - remote set-url --push zot baz
-ok 56 - remote set-url --push zot
-ok 57 - remote set-url --push qux zot
-ok 58 - remote set-url --push foo qu+x
-ok 59 - remote set-url --push --add aaa
-ok 60 - remote set-url --push bar aaa
-ok 61 - remote set-url --push --delete bar
-ok 62 - remote set-url --push --delete foo
-ok 63 - remote set-url --add bbb
-ok 64 - remote set-url --delete .*
-ok 65 - remote set-url --delete bbb
-ok 66 - remote set-url --delete baz
-ok 67 - remote set-url --add ccc
+ok 7 - remove remote
+ok 8 - remove remote protects local branches
+ok 9 - show
+ok 10 - show -n
+ok 11 - prune
+ok 12 - set-head --delete
+ok 13 - set-head --auto
+ok 14 - set-head --auto has no problem w/multiple HEADs
+ok 15 - set-head explicit
+ok 16 - prune --dry-run
+ok 17 - add --mirror && prune
+ok 18 - add --mirror=fetch
+ok 19 - fetch mirrors act as mirrors during fetch
+ok 20 - fetch mirrors can prune
+ok 21 - fetch mirrors do not act as mirrors during push
+ok 22 - add fetch mirror with specific branches
+ok 23 - fetch mirror respects specific branches
+ok 24 - add --mirror=push
+ok 25 - push mirrors act as mirrors during push
+ok 26 - push mirrors do not act as mirrors during fetch
+ok 27 - push mirrors do not allow you to specify refs
+ok 28 - add alt && prune
+ok 29 - add with reachable tags (default)
+ok 30 - add --tags
+ok 31 - add --no-tags
+ok 32 - reject --no-no-tags
+ok 33 - update
+ok 34 - update with arguments
+ok 35 - update --prune
+ok 36 - update default
+ok 37 - update default (overridden, with funny whitespace)
+ok 38 - update (with remotes.default defined)
+ok 39 - "remote show" does not show symbolic refs
+ok 40 - reject adding remote with an invalid name
+ok 41 - rename a remote
+ok 42 - rename does not update a non-default fetch refspec
+ok 43 - rename a remote with name part of fetch spec
+ok 44 - rename a remote with name prefix of other remote
+ok 45 - migrate a remote from named file in $GIT_DIR/remotes
+ok 46 - migrate a remote from named file in $GIT_DIR/branches
+ok 47 - migrate a remote from named file in $GIT_DIR/branches (2)
+ok 48 - remote prune to cause a dangling symref
+ok 49 - show empty remote
+ok 50 - remote set-branches requires a remote
+ok 51 - remote set-branches
+ok 52 - remote set-branches with --mirror
+ok 53 - new remote
+ok 54 - remote set-url bar
+ok 55 - remote set-url baz bar
+ok 56 - remote set-url zot bar
+ok 57 - remote set-url --push zot baz
+ok 58 - remote set-url --push zot
+ok 59 - remote set-url --push qux zot
+ok 60 - remote set-url --push foo qu+x
+ok 61 - remote set-url --push --add aaa
+ok 62 - remote set-url --push bar aaa
+ok 63 - remote set-url --push --delete bar
+ok 64 - remote set-url --push --delete foo
+ok 65 - remote set-url --add bbb
+ok 66 - remote set-url --delete .*
+ok 67 - remote set-url --delete bbb
 ok 68 - remote set-url --delete baz
-# passed all 68 test(s)
-1..68
+ok 69 - remote set-url --add ccc
+ok 70 - remote set-url --delete baz
+ok 71 - extra args: setup
+ok 72 - extra args: add nick url
+ok 73 - extra args: rename origin newname
+ok 74 - extra args: remove origin
+ok 75 - extra args: set-head origin master
+ok 76 - extra args: set-url origin newurl oldurl
+ok 77 - add remote matching the "insteadOf" URL
+# passed all 77 test(s)
+1..77
 *** t5506-remote-groups.sh ***
 ok 1 - setup
 ok 2 - no group updates all
@@ -5798,40 +9291,79 @@
 ok 5 - fetch --prune on its own works as expected
 ok 6 - fetch --prune with a branch name keeps branches
 ok 7 - fetch --prune with a namespace keeps other namespaces
-ok 8 - fetch --prune --tags does not delete the remote-tracking branches
-ok 9 - fetch --prune --tags with branch does not delete other remote-tracking branches
-ok 10 - fetch tags when there is no tags
-ok 11 - fetch following tags
-ok 12 - fetch must not resolve short tag name
-ok 13 - fetch can now resolve short remote name
-ok 14 - create bundle 1
-ok 15 - header of bundle looks right
-ok 16 - create bundle 2
-ok 17 - unbundle 1
-ok 18 - bundle 1 has only 3 files 
-ok 19 - unbundle 2
-ok 20 - bundle does not prerequisite objects
-ok 21 - bundle should be able to create a full history
-ok 22 - fetch via rsync
-ok 23 - push via rsync
-ok 24 - push via rsync
-ok 25 - fetch with a non-applying branch.<name>.merge
-ok 26 - fetch from GIT URL with a non-applying branch.<name>.merge [1]
-ok 27 - fetch from GIT URL with a non-applying branch.<name>.merge [2]
-ok 28 - fetch from GIT URL with a non-applying branch.<name>.merge [3]
-ok 29 - quoting of a strangely named repo
-ok 30 - bundle should record HEAD correctly
-ok 31 - explicit fetch should not update tracking
-ok 32 - explicit pull should not update tracking
-ok 33 - configured fetch updates tracking
-ok 34 - pushing nonexistent branch by mistake should not segv
-ok 35 - auto tag following fetches minimum
-ok 36 - refuse to fetch into the current branch
-ok 37 - fetch into the current branch with --update-head-ok
-ok 38 - fetch --dry-run
-ok 39 - should be able to fetch with duplicate refspecs
-# passed all 39 test(s)
-1..39
+ok 8 - fetch --prune handles overlapping refspecs
+ok 9 - fetch --prune --tags prunes branches but not tags
+ok 10 - fetch --prune --tags with branch does not prune other things
+ok 11 - fetch --prune --tags with refspec prunes based on refspec
+ok 12 - fetch tags when there is no tags
+ok 13 - fetch following tags
+ok 14 - fetch uses remote ref names to describe new refs
+ok 15 - fetch must not resolve short tag name
+ok 16 - fetch can now resolve short remote name
+ok 17 - create bundle 1
+ok 18 - header of bundle looks right
+ok 19 - create bundle 2
+ok 20 - unbundle 1
+ok 21 - bundle 1 has only 3 files 
+ok 22 - unbundle 2
+ok 23 - bundle does not prerequisite objects
+ok 24 - bundle should be able to create a full history
+ok 25 - fetch via rsync
+ok 26 - push via rsync
+ok 27 - push via rsync
+ok 28 - fetch with a non-applying branch.<name>.merge
+ok 29 - fetch from GIT URL with a non-applying branch.<name>.merge [1]
+ok 30 - fetch from GIT URL with a non-applying branch.<name>.merge [2]
+ok 31 - fetch from GIT URL with a non-applying branch.<name>.merge [3]
+ok 32 - quoting of a strangely named repo
+ok 33 - bundle should record HEAD correctly
+ok 34 - mark initial state of origin/master
+ok 35 - explicit fetch should update tracking
+ok 36 - explicit pull should update tracking
+ok 37 - explicit --refmap is allowed only with command-line refspec
+ok 38 - explicit --refmap option overrides remote.*.fetch
+ok 39 - explicitly empty --refmap option disables remote.*.fetch
+ok 40 - configured fetch updates tracking
+ok 41 - non-matching refspecs do not confuse tracking update
+ok 42 - pushing nonexistent branch by mistake should not segv
+ok 43 - auto tag following fetches minimum
+ok 44 - refuse to fetch into the current branch
+ok 45 - fetch into the current branch with --update-head-ok
+ok 46 - fetch --dry-run
+ok 47 - should be able to fetch with duplicate refspecs
+ok 48 - prune fetch.prune=unset remote.origin.prune=unset; kept
+ok 49 - prune fetch.prune=unset remote.origin.prune=unset --no-prune; kept
+ok 50 - prune fetch.prune=unset remote.origin.prune=unset --prune; pruned
+ok 51 - prune fetch.prune=false remote.origin.prune=unset; kept
+ok 52 - prune fetch.prune=false remote.origin.prune=unset --no-prune; kept
+ok 53 - prune fetch.prune=false remote.origin.prune=unset --prune; pruned
+ok 54 - prune fetch.prune=true remote.origin.prune=unset; pruned
+ok 55 - prune fetch.prune=true remote.origin.prune=unset --prune; pruned
+ok 56 - prune fetch.prune=true remote.origin.prune=unset --no-prune; kept
+ok 57 - prune fetch.prune=unset remote.origin.prune=false; kept
+ok 58 - prune fetch.prune=unset remote.origin.prune=false --no-prune; kept
+ok 59 - prune fetch.prune=unset remote.origin.prune=false --prune; pruned
+ok 60 - prune fetch.prune=false remote.origin.prune=false; kept
+ok 61 - prune fetch.prune=false remote.origin.prune=false --no-prune; kept
+ok 62 - prune fetch.prune=false remote.origin.prune=false --prune; pruned
+ok 63 - prune fetch.prune=true remote.origin.prune=false; kept
+ok 64 - prune fetch.prune=true remote.origin.prune=false --prune; pruned
+ok 65 - prune fetch.prune=true remote.origin.prune=false --no-prune; kept
+ok 66 - prune fetch.prune=unset remote.origin.prune=true; pruned
+ok 67 - prune fetch.prune=unset remote.origin.prune=true --no-prune; kept
+ok 68 - prune fetch.prune=unset remote.origin.prune=true --prune; pruned
+ok 69 - prune fetch.prune=false remote.origin.prune=true; pruned
+ok 70 - prune fetch.prune=false remote.origin.prune=true --no-prune; kept
+ok 71 - prune fetch.prune=false remote.origin.prune=true --prune; pruned
+ok 72 - prune fetch.prune=true remote.origin.prune=true; pruned
+ok 73 - prune fetch.prune=true remote.origin.prune=true --prune; pruned
+ok 74 - prune fetch.prune=true remote.origin.prune=true --no-prune; kept
+ok 75 - all boundary commits are excluded
+ok 76 - fetch --prune prints the remotes url
+ok 77 - branchname D/F conflict resolved by --prune
+ok 78 - fetching a one-level ref works
+# passed all 78 test(s)
+1..78
 *** t5511-refspec.sh ***
 ok 1 - push  (invalid)
 ok 2 - push :
@@ -5866,16 +9398,20 @@
 ok 31 - fetch :refs/remotes/frotz/HEAD-to-me
 ok 32 - push :refs/remotes/frotz/delete me (invalid)
 ok 33 - fetch :refs/remotes/frotz/HEAD to me (invalid)
-ok 34 - fetch refs/heads/*/for-linus:refs/remotes/mine/*-blah (invalid)
-ok 35 - push refs/heads/*/for-linus:refs/remotes/mine/*-blah (invalid)
-ok 36 - fetch refs/heads*/for-linus:refs/remotes/mine/* (invalid)
-ok 37 - push refs/heads*/for-linus:refs/remotes/mine/* (invalid)
+ok 34 - fetch refs/heads/*/for-linus:refs/remotes/mine/*-blah
+ok 35 - push refs/heads/*/for-linus:refs/remotes/mine/*-blah
+ok 36 - fetch refs/heads*/for-linus:refs/remotes/mine/*
+ok 37 - push refs/heads*/for-linus:refs/remotes/mine/*
 ok 38 - fetch refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)
 ok 39 - push refs/heads/*/*/for-linus:refs/remotes/mine/* (invalid)
-ok 40 - fetch refs/heads/*/for-linus:refs/remotes/mine/*
-ok 41 - push refs/heads/*/for-linus:refs/remotes/mine/*
-# passed all 41 test(s)
-1..41
+ok 40 - fetch refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)
+ok 41 - push refs/heads/*g*/for-linus:refs/remotes/mine/* (invalid)
+ok 42 - fetch refs/heads/*/for-linus:refs/remotes/mine/*
+ok 43 - push refs/heads/*/for-linus:refs/remotes/mine/*
+ok 44 - fetch refs/heads/Ä
+ok 45 - fetch refs/heads/	tab (invalid)
+# passed all 45 test(s)
+1..45
 *** t5512-ls-remote.sh ***
 ok 1 - setup
 ok 2 - ls-remote --tags .git
@@ -5891,8 +9427,14 @@
 ok 12 - Report success even when nothing matches
 ok 13 - Report no-match with --exit-code
 ok 14 - Report match with --exit-code
-# passed all 14 test(s)
-1..14
+ok 15 - set up some extra tags for ref hiding
+ok 16 - Hide some refs with transfer.hiderefs
+ok 17 - Override hiding of transfer.hiderefs
+ok 18 - Hide some refs with uploadpack.hiderefs
+ok 19 - Override hiding of uploadpack.hiderefs
+ok 20 - overrides work between mixed transfer/upload-pack hideRefs
+# passed all 20 test(s)
+1..20
 *** t5513-fetch-track.sh ***
 ok 1 - setup
 ok 2 - fetch
@@ -5908,8 +9450,10 @@
 ok 7 - git fetch --multiple (bad remote names)
 ok 8 - git fetch --all (skipFetchAll)
 ok 9 - git fetch --multiple (ignoring skipFetchAll)
-# passed all 9 test(s)
-1..9
+ok 10 - git fetch --all --no-tags
+ok 11 - git fetch --all --tags
+# passed all 11 test(s)
+1..11
 *** t5515-fetch-merge-logic.sh ***
 ok 1 - setup
 ok 2 - br-config-explicit
@@ -6013,38 +9557,63 @@
 ok 32 - push with +HEAD
 ok 33 - push HEAD with non-existent, incomplete dest
 ok 34 - push with config remote.*.push = HEAD
-ok 35 - push with config remote.*.pushurl
-ok 36 - push with dry-run
-ok 37 - push updates local refs
-ok 38 - push updates up-to-date local refs
-ok 39 - push preserves up-to-date packed refs
-ok 40 - push does not update local refs on failure
-ok 41 - allow deleting an invalid remote ref
-ok 42 - pushing valid refs triggers post-receive and post-update hooks
-ok 43 - deleting dangling ref triggers hooks with correct args
-ok 44 - deletion of a non-existent ref is not fed to post-receive and post-update hooks
-ok 45 - deletion of a non-existent ref alone does trigger post-receive and post-update hooks
-ok 46 - mixed ref updates, deletes, invalid deletes trigger hooks with correct input
-ok 47 - allow deleting a ref using --delete
-ok 48 - allow deleting a tag using --delete
-ok 49 - push --delete without args aborts
-ok 50 - push --delete refuses src:dest refspecs
-ok 51 - warn on push to HEAD of non-bare repository
-ok 52 - deny push to HEAD of non-bare repository
-ok 53 - allow push to HEAD of bare repository (bare)
-ok 54 - allow push to HEAD of non-bare repository (config)
-ok 55 - fetch with branches
-ok 56 - fetch with branches containing #
-ok 57 - push with branches
-ok 58 - push with branches containing #
-ok 59 - push into aliased refs (consistent)
-ok 60 - push into aliased refs (inconsistent)
-ok 61 - push --porcelain
-ok 62 - push --porcelain bad url
-ok 63 - push --porcelain rejected
-ok 64 - push --porcelain --dry-run rejected
-# passed all 64 test(s)
-1..64
+ok 35 - push with remote.pushdefault
+ok 36 - push with config remote.*.pushurl
+ok 37 - push with config branch.*.pushremote
+ok 38 - branch.*.pushremote config order is irrelevant
+ok 39 - push with dry-run
+ok 40 - push updates local refs
+ok 41 - push updates up-to-date local refs
+ok 42 - push preserves up-to-date packed refs
+ok 43 - push does not update local refs on failure
+ok 44 - allow deleting an invalid remote ref
+ok 45 - pushing valid refs triggers post-receive and post-update hooks
+ok 46 - deleting dangling ref triggers hooks with correct args
+ok 47 - deletion of a non-existent ref is not fed to post-receive and post-update hooks
+ok 48 - deletion of a non-existent ref alone does trigger post-receive and post-update hooks
+ok 49 - mixed ref updates, deletes, invalid deletes trigger hooks with correct input
+ok 50 - allow deleting a ref using --delete
+ok 51 - allow deleting a tag using --delete
+ok 52 - push --delete without args aborts
+ok 53 - push --delete refuses src:dest refspecs
+ok 54 - warn on push to HEAD of non-bare repository
+ok 55 - deny push to HEAD of non-bare repository
+ok 56 - allow push to HEAD of bare repository (bare)
+ok 57 - allow push to HEAD of non-bare repository (config)
+ok 58 - fetch with branches
+ok 59 - fetch with branches containing #
+ok 60 - push with branches
+ok 61 - push with branches containing #
+ok 62 - push into aliased refs (consistent)
+ok 63 - push into aliased refs (inconsistent)
+ok 64 - push requires --force to update lightweight tag
+ok 65 - push --porcelain
+ok 66 - push --porcelain bad url
+ok 67 - push --porcelain rejected
+ok 68 - push --porcelain --dry-run rejected
+ok 69 - push --prune
+ok 70 - push --prune refspec
+ok 71 - push to update a ref hidden by transfer.hiderefs
+ok 72 - push to update a ref hidden by receive.hiderefs
+ok 73 - fetch exact SHA1
+ok 74 - shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=true
+ok 75 - deny fetch unreachable SHA1, allowtipsha1inwant=true
+ok 76 - shallow fetch reachable SHA1 (but not a ref), allowtipsha1inwant=false
+ok 77 - deny fetch unreachable SHA1, allowtipsha1inwant=false
+ok 78 - fetch follows tags by default
+ok 79 - pushing a specific ref applies remote.$name.push as refmap
+ok 80 - with no remote.$name.push, it is not used as refmap
+ok 81 - with no remote.$name.push, upstream mapping is used
+ok 82 - push does not follow tags by default
+ok 83 - push --follow-tag only pushes relevant tags
+ok 84 - push --no-thin must produce non-thin pack
+ok 85 - pushing a tag pushes the tagged object
+ok 86 - push into bare respects core.logallrefupdates
+ok 87 - fetch into bare respects core.logallrefupdates
+ok 88 - receive.denyCurrentBranch = updateInstead
+ok 89 - updateInstead with push-to-checkout hook
+# passed all 89 test(s)
+1..89
 *** t5517-push-mirror.sh ***
 ok 1 - push mirror creates new branches
 ok 2 - push mirror updates existing branches
@@ -6080,38 +9649,69 @@
 *** t5520-pull.sh ***
 ok 1 - setup
 ok 2 - pulling into void
-ok 3 - checking the results
-ok 4 - pulling into void using master:master
-ok 5 - pulling into void does not overwrite untracked files
-ok 6 - test . as a remote
-ok 7 - the default remote . should not break explicit pull
-ok 8 - --rebase
-ok 9 - pull.rebase
-ok 10 - branch.to-rebase.rebase
-ok 11 - branch.to-rebase.rebase should override pull.rebase
-ok 12 - --rebase with rebased upstream
-ok 13 - --rebase with rebased default upstream
-ok 14 - rebased upstream + fetch + pull --rebase
-ok 15 - pull --rebase dies early with dirty working directory
-ok 16 - pull --rebase works on branch yet to be born
-ok 17 - setup for detecting upstreamed changes
-ok 18 - git pull --rebase detects upstreamed changes
-ok 19 - setup for avoiding reapplying old patches
-ok 20 - git pull --rebase does not reapply old patches
-ok 21 - git pull --rebase against local branch
-# passed all 21 test(s)
-1..21
+ok 3 - pulling into void using master:master
+ok 4 - pulling into void does not overwrite untracked files
+ok 5 - pulling into void does not overwrite staged files
+ok 6 - pulling into void does not remove new staged files
+ok 7 - pulling into void must not create an octopus
+ok 8 - test . as a remote
+ok 9 - the default remote . should not break explicit pull
+ok 10 - fail if wildcard spec does not match any refs
+ok 11 - fail if no branches specified with non-default remote
+ok 12 - fail if not on a branch
+ok 13 - fail if no configuration for current branch
+ok 14 - pull --all: fail if no configuration for current branch
+ok 15 - fail if upstream branch does not exist
+ok 16 - fail if the index has unresolved entries
+ok 17 - fast-forwards working tree if branch head is updated
+ok 18 - fast-forward fails with conflicting work tree
+ok 19 - --rebase
+ok 20 - --rebase fails with multiple branches
+ok 21 - pull --rebase succeeds with dirty working directory and rebase.autostash set
+ok 22 - pull.rebase
+ok 23 - branch.to-rebase.rebase
+ok 24 - branch.to-rebase.rebase should override pull.rebase
+ok 25 - preserve merge setup
+ok 26 - pull.rebase=false create a new merge commit
+ok 27 - pull.rebase=true flattens keep-merge
+ok 28 - pull.rebase=1 is treated as true and flattens keep-merge
+ok 29 - pull.rebase=preserve rebases and merges keep-merge
+ok 30 - pull.rebase=invalid fails
+ok 31 - --rebase=false create a new merge commit
+ok 32 - --rebase=true rebases and flattens keep-merge
+ok 33 - --rebase=preserve rebases and merges keep-merge
+ok 34 - --rebase=invalid fails
+ok 35 - --rebase overrides pull.rebase=preserve and flattens keep-merge
+ok 36 - --rebase with rebased upstream
+ok 37 - --rebase -f with rebased upstream
+ok 38 - --rebase with rebased default upstream
+ok 39 - rebased upstream + fetch + pull --rebase
+ok 40 - pull --rebase dies early with dirty working directory
+ok 41 - pull --rebase works on branch yet to be born
+ok 42 - pull --rebase fails on unborn branch with staged changes
+ok 43 - setup for detecting upstreamed changes
+ok 44 - git pull --rebase detects upstreamed changes
+ok 45 - setup for avoiding reapplying old patches
+ok 46 - git pull --rebase does not reapply old patches
+ok 47 - git pull --rebase against local branch
+# passed all 47 test(s)
+1..47
 *** t5521-pull-options.sh ***
 ok 1 - setup
 ok 2 - git pull -q
-ok 3 - git pull
-ok 4 - git pull -v
-ok 5 - git pull -v -q
-ok 6 - git pull -q -v
-ok 7 - git pull --force
-ok 8 - git pull --all
-# passed all 8 test(s)
-1..8
+ok 3 - git pull -q --rebase
+ok 4 - git pull
+ok 5 - git pull --rebase
+ok 6 - git pull -v
+ok 7 - git pull -v --rebase
+ok 8 - git pull -v -q
+ok 9 - git pull -q -v
+ok 10 - git pull --force
+ok 11 - git pull --all
+ok 12 - git pull --dry-run
+ok 13 - git pull --all --dry-run
+# passed all 13 test(s)
+1..13
 *** t5522-pull-symlink.sh ***
 ok 1 - setup
 ok 2 - pulling from real subdir
@@ -6120,30 +9720,30 @@
 # passed all 4 test(s)
 1..4
 *** t5523-push-upstream.sh ***
-ok 1 - set up terminal for tests
-ok 2 - setup bare parent
-ok 3 - setup local commit
-ok 4 - push -u master:master
-ok 5 - push -u master:other
-ok 6 - push -u --dry-run master:otherX
-ok 7 - push -u master2:master2
-ok 8 - push -u master2:other2
-ok 9 - push -u :master2
-ok 10 - push -u --all
-ok 11 - push -u HEAD
-ok 12 # skip progress messages go to tty (missing TTY)
-ok 13 - progress messages do not go to non-tty
-ok 14 - progress messages go to non-tty (forced)
-ok 15 # skip push -q suppresses progress (missing TTY)
-ok 16 # skip push --no-progress suppresses progress (missing TTY)
-ok 17 # skip quiet push (missing TTY)
-# passed all 17 test(s)
-1..17
+ok 1 - setup bare parent
+ok 2 - setup local commit
+ok 3 - push -u master:master
+ok 4 - push -u master:other
+ok 5 - push -u --dry-run master:otherX
+ok 6 - push -u master2:master2
+ok 7 - push -u master2:other2
+ok 8 - push -u :master2
+ok 9 - push -u --all
+ok 10 - push -u HEAD
+ok 11 # skip progress messages go to tty (missing TTY)
+ok 12 - progress messages do not go to non-tty
+ok 13 - progress messages go to non-tty (forced)
+ok 14 # skip push -q suppresses progress (missing TTY)
+ok 15 # skip push --no-progress suppresses progress (missing TTY)
+ok 16 # skip quiet push (missing TTY)
+# passed all 16 test(s)
+1..16
 *** t5524-pull-msg.sh ***
 ok 1 - setup
 ok 2 - pull
-# passed all 2 test(s)
-1..2
+ok 3 - --log=1 limits shortlog length
+# passed all 3 test(s)
+1..3
 *** t5525-fetch-tagopt.sh ***
 ok 1 - setup
 ok 2 - fetch with tagopt=--no-tags does not get tag
@@ -6183,8 +9783,44 @@
 *** t5527-fetch-odd-refs.sh ***
 ok 1 - setup repo with odd suffix ref
 ok 2 - suffix ref is ignored during fetch
-# passed all 2 test(s)
-1..2
+ok 3 - try to create repo with absurdly long refname
+ok 4 # skip fetch handles extremely long refname (missing LONG_REF)
+ok 5 # skip push handles extremely long refname (missing LONG_REF)
+# passed all 5 test(s)
+1..5
+*** t5528-push-default.sh ***
+ok 1 - setup bare remotes
+ok 2 - "upstream" pushes to configured upstream
+ok 3 - "upstream" does not push on unconfigured remote
+ok 4 - "upstream" does not push on unconfigured branch
+ok 5 - "upstream" does not push when remotes do not match
+ok 6 - push from/to new branch with upstream, matching and simple
+ok 7 - push from/to new branch with current creates remote branch
+ok 8 - push to existing branch, with no upstream configured
+ok 9 - push to existing branch, upstream configured with same name
+ok 10 - push to existing branch, upstream configured with different name
+ok 11 - push.default = current success in central workflows
+ok 12 - push.default = upstream success in central workflows
+ok 13 - push.default = simple failure in central workflows
+ok 14 - push.default = matching success in central workflows
+ok 15 - push.default = current success in triangular workflows
+ok 16 - push.default = upstream failure in triangular workflows
+ok 17 - push.default = simple success in triangular workflows
+ok 18 - push.default = matching success in triangular workflows
+ok 19 - default behavior allows "simple" push
+ok 20 - default behavior rejects non-simple push
+ok 21 - default triangular behavior acts like "current"
+# passed all 21 test(s)
+1..21
+*** t5529-push-errors.sh ***
+ok 1 - setup commits
+ok 2 - setup remote
+ok 3 - setup fake receive-pack
+ok 4 - detect missing branches early
+ok 5 - detect missing sha1 expressions early
+ok 6 - detect ambiguous refs early
+# passed all 6 test(s)
+1..6
 *** t5530-upload-pack-error.sh ***
 ok 1 - setup and corrupt repository
 ok 2 - fsck fails
@@ -6206,26 +9842,107 @@
 ok 5 - push succeeds after commit was pushed to remote
 ok 6 - push fails when commit on multiple branches if one branch has no remote
 ok 7 - push succeeds if submodule has no remote and is on the first superproject commit
-# passed all 7 test(s)
-1..7
+ok 8 - push unpushed submodules when not needed
+ok 9 - push unpushed submodules when not needed 2
+ok 10 - push unpushed submodules recursively
+ok 11 - push unpushable submodule recursively fails
+# passed all 11 test(s)
+1..11
 *** t5532-fetch-proxy.sh ***
 ok 1 - setup remote repo
 ok 2 - setup local repo
 ok 3 - fetch through proxy works
 # passed all 3 test(s)
 1..3
-*** t5540-http-push.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Network testing disabled (define GIT_TEST_HTTPD to enable)
-*** t5541-http-push.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Network testing disabled (define GIT_TEST_HTTPD to enable)
-*** t5550-http-fetch.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Network testing disabled (define GIT_TEST_HTTPD to enable)
-*** t5551-http-fetch.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Network testing disabled (define GIT_TEST_HTTPD to enable)
+*** t5533-push-cas.sh ***
+ok 1 - setup
+ok 2 - push to update (protected)
+ok 3 - push to update (protected, forced)
+ok 4 - push to update (protected, tracking)
+ok 5 - push to update (protected, tracking, forced)
+ok 6 - push to update (allowed)
+ok 7 - push to update (allowed, tracking)
+ok 8 - push to update (allowed even though no-ff)
+ok 9 - push to delete (protected)
+ok 10 - push to delete (protected, forced)
+ok 11 - push to delete (allowed)
+ok 12 - cover everything with default force-with-lease (protected)
+ok 13 - cover everything with default force-with-lease (allowed)
+# passed all 13 test(s)
+1..13
+*** t5534-push-signed.sh ***
+You do not seem to have gpg installed
+ok 1 - setup
+ok 2 - unsigned push does not send push certificate
+ok 3 - talking with a receiver without push certificate support
+ok 4 - push --signed fails with a receiver without push certificate support
+ok 5 # skip no certificate for a signed push with no update (missing GPG)
+ok 6 # skip signed push sends push certificate (missing GPG)
+ok 7 # skip fail without key and heed user.signingkey (missing GPG)
+# passed all 7 test(s)
+1..7
+*** t5535-fetch-push-symref.sh ***
+ok 1 - setup
+ok 2 - push
+ok 3 - fetch
+# passed all 3 test(s)
+1..3
+*** t5536-fetch-conflicts.sh ***
+ok 1 - setup
+ok 2 - fetch with no conflict
+ok 3 - fetch conflict: config vs. config
+ok 4 - fetch duplicate: config vs. config
+ok 5 - fetch conflict: arg overrides config
+ok 6 - fetch conflict: arg vs. arg
+ok 7 - fetch conflict: criss-cross args
+# passed all 7 test(s)
+1..7
+*** t5537-fetch-shallow.sh ***
+ok 1 - setup
+ok 2 - setup shallow clone
+ok 3 - clone from shallow clone
+ok 4 - fetch from shallow clone
+ok 5 - fetch --depth from shallow clone
+ok 6 - fetch --unshallow from shallow clone
+ok 7 - fetch something upstream has but hidden by clients shallow boundaries
+ok 8 - fetch that requires changes in .git/shallow is filtered
+ok 9 - fetch --update-shallow
+ok 10 - shallow fetch from a read-only repo
+# passed all 10 test(s)
+1..10
+*** t5538-push-shallow.sh ***
+ok 1 - setup
+ok 2 - push from shallow clone
+ok 3 - push from shallow clone, with grafted roots
+ok 4 - add new shallow root with receive.updateshallow on
+ok 5 - push from shallow to shallow
+ok 6 - push from full to shallow
+# passed all 6 test(s)
+1..6
+*** t5539-fetch-http-shallow.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5540-http-push-webdav.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5541-http-push-smart.sh ***
+You do not seem to have gpg installed
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5542-push-http-shallow.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5543-atomic-push.sh ***
+ok 1 - atomic push works for a single branch
+ok 2 - atomic push works for two branches
+ok 3 - atomic push works in combination with --mirror
+ok 4 - atomic push works in combination with --force
+ok 5 - atomic push fails if one branch fails
+ok 6 - atomic push fails if one tag fails remotely
+ok 7 - atomic push obeys update hook preventing a branch to be pushed
+ok 8 - atomic push is not advertised if configured
+# passed all 8 test(s)
+1..8
+*** t5550-http-fetch-dumb.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5551-http-fetch-smart.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
 *** t5560-http-backend-noserver.sh ***
 ok 1 - setup repository
 ok 2 - direct refs/heads/master not found
@@ -6244,16 +9961,109 @@
 # passed all 14 test(s)
 1..14
 *** t5561-http-backend.sh ***
-# passed all 0 test(s)
-1..0 # SKIP Network testing disabled (define GIT_TEST_HTTPD to enable)
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5570-git-daemon.sh ***
+ok 1 - setup repository
+ok 2 - create git-accessible bare repository
+ok 3 - clone git repository
+ok 4 - fetch changes via git protocol
+ok 5 - remote detects correct HEAD
+ok 6 - prepare pack objects
+ok 7 - fetch notices corrupt pack
+ok 8 - fetch notices corrupt idx
+ok 9 - clone non-existent
+ok 10 - push disabled
+ok 11 - read access denied
+ok 12 - not exported
+ok 13 - clone non-existent
+ok 14 - push disabled
+ok 15 - read access denied
+ok 16 - not exported
+ok 17 - access repo via interpolated hostname
+ok 18 - hostname cannot break out of directory
+# passed all 18 test(s)
+1..18
+*** t5571-pre-push-hook.sh ***
+ok 1 - setup
+ok 2 - push with failing hook
+ok 3 - --no-verify bypasses hook
+ok 4 - push with hook
+ok 5 - add a branch
+ok 6 - push to default
+ok 7 - push non-branches
+ok 8 - push delete
+ok 9 - push to URL
+# passed all 9 test(s)
+1..9
+*** t5572-pull-submodule.sh ***
+ok 1 - git_pull: added submodule creates empty directory
+ok 2 - git_pull: added submodule leaves existing empty directory alone
+ok 3 - git_pull: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git_pull: replace tracked file with submodule creates empty directory
+ok 5 - git_pull: replace directory with submodule
+ok 6 - git_pull: removed submodule leaves submodule directory and its contents in place
+ok 7 - git_pull: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git_pull: replace submodule with a directory must fail
+ok 9 - git_pull: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git_pull: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git_pull: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git_pull: modified submodule does not update submodule work tree
+ok 13 - git_pull: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git_pull: modified submodule does not update submodule work tree from invalid commit
+ok 15 - git_pull_ff: added submodule creates empty directory
+ok 16 - git_pull_ff: added submodule leaves existing empty directory alone
+ok 17 - git_pull_ff: added submodule doesn't remove untracked unignored file with same name
+ok 18 - git_pull_ff: replace tracked file with submodule creates empty directory
+ok 19 - git_pull_ff: replace directory with submodule
+ok 20 - git_pull_ff: removed submodule leaves submodule directory and its contents in place
+ok 21 - git_pull_ff: removed submodule leaves submodule containing a .git directory alone
+ok 22 - git_pull_ff: replace submodule with a directory must fail
+ok 23 - git_pull_ff: replace submodule containing a .git directory with a directory must fail
+not ok 24 - git_pull_ff: replace submodule with a file must fail # TODO known breakage
+not ok 25 - git_pull_ff: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - git_pull_ff: modified submodule does not update submodule work tree
+ok 27 - git_pull_ff: modified submodule does not update submodule work tree to invalid commit
+ok 28 - git_pull_ff: modified submodule does not update submodule work tree from invalid commit
+ok 29 - git_pull_ff_only: added submodule creates empty directory
+ok 30 - git_pull_ff_only: added submodule leaves existing empty directory alone
+ok 31 - git_pull_ff_only: added submodule doesn't remove untracked unignored file with same name
+ok 32 - git_pull_ff_only: replace tracked file with submodule creates empty directory
+ok 33 - git_pull_ff_only: replace directory with submodule
+ok 34 - git_pull_ff_only: removed submodule leaves submodule directory and its contents in place
+ok 35 - git_pull_ff_only: removed submodule leaves submodule containing a .git directory alone
+ok 36 - git_pull_ff_only: replace submodule with a directory must fail
+ok 37 - git_pull_ff_only: replace submodule containing a .git directory with a directory must fail
+not ok 38 - git_pull_ff_only: replace submodule with a file must fail # TODO known breakage
+not ok 39 - git_pull_ff_only: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 40 - git_pull_ff_only: modified submodule does not update submodule work tree
+ok 41 - git_pull_ff_only: modified submodule does not update submodule work tree to invalid commit
+ok 42 - git_pull_ff_only: modified submodule does not update submodule work tree from invalid commit
+ok 43 - git_pull_noff: added submodule creates empty directory
+ok 44 - git_pull_noff: added submodule leaves existing empty directory alone
+ok 45 - git_pull_noff: added submodule doesn't remove untracked unignored file with same name
+ok 46 - git_pull_noff: replace tracked file with submodule creates empty directory
+not ok 47 - git_pull_noff: replace directory with submodule # TODO known breakage
+ok 48 - git_pull_noff: removed submodule leaves submodule directory and its contents in place
+ok 49 - git_pull_noff: removed submodule leaves submodule containing a .git directory alone
+not ok 50 - git_pull_noff: replace submodule with a directory must fail # TODO known breakage
+not ok 51 - git_pull_noff: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 52 - git_pull_noff: replace submodule with a file must fail # TODO known breakage
+not ok 53 - git_pull_noff: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 54 - git_pull_noff: modified submodule does not update submodule work tree
+ok 55 - git_pull_noff: modified submodule does not update submodule work tree to invalid commit
+ok 56 - git_pull_noff: modified submodule does not update submodule work tree from invalid commit
+# still have 11 known breakage(s)
+# passed all remaining 45 test(s)
+1..56
 *** t5600-clone-fail-cleanup.sh ***
 ok 1 - clone of non-existent source should fail
 ok 2 - failed clone should not leave a directory
 ok 3 - clone of non-existent (relative to $PWD) source should fail
 ok 4 - clone should work now that source exists
 ok 5 - successful clone must leave the directory
-# passed all 5 test(s)
-1..5
+ok 6 - failed clone --separate-git-dir should not leave any directories
+# passed all 6 test(s)
+1..6
 *** t5601-clone.sh ***
 ok 1 - setup
 ok 2 - clone with excess parameters (1)
@@ -6265,35 +10075,138 @@
 ok 8 - clone creates intermediate directories
 ok 9 - clone creates intermediate directories for bare repo
 ok 10 - clone --mirror
-ok 11 - clone --bare names the local repository <name>.git
-ok 12 - clone --mirror does not repeat tags
-ok 13 - clone to destination with trailing /
-ok 14 - clone to destination with extra trailing /
-ok 15 - clone to an existing empty directory
-ok 16 - clone to an existing non-empty directory
-ok 17 - clone to an existing path
-ok 18 - clone a void
-ok 19 - clone respects global branch.autosetuprebase
-ok 20 - respect url-encoding of file://
-ok 21 - do not query-string-decode + in URLs
-ok 22 - do not respect url-encoding of non-url path
-ok 23 - clone separate gitdir
-ok 24 - clone separate gitdir: output
-ok 25 - clone from .git file
-ok 26 - fetch from .git gitfile
-ok 27 - fetch from gitfile parent
-ok 28 - clone separate gitdir where target already exists
-ok 29 - clone --reference from original
-ok 30 - clone with more than one --reference
-ok 31 - clone from original with relative alternate
-# passed all 31 test(s)
-1..31
+ok 11 - clone --mirror with detached HEAD
+ok 12 - clone --bare with detached HEAD
+ok 13 - clone --bare names the local repository <name>.git
+ok 14 - clone --mirror does not repeat tags
+ok 15 - clone to destination with trailing /
+ok 16 - clone to destination with extra trailing /
+ok 17 - clone to an existing empty directory
+ok 18 - clone to an existing non-empty directory
+ok 19 - clone to an existing path
+ok 20 - clone a void
+ok 21 - clone respects global branch.autosetuprebase
+ok 22 - respect url-encoding of file://
+ok 23 - do not query-string-decode + in URLs
+ok 24 - do not respect url-encoding of non-url path
+ok 25 - clone separate gitdir
+ok 26 - clone separate gitdir: output
+ok 27 - clone from .git file
+ok 28 - fetch from .git gitfile
+ok 29 - fetch from gitfile parent
+ok 30 - clone separate gitdir where target already exists
+ok 31 - clone --reference from original
+ok 32 - clone with more than one --reference
+ok 33 - clone from original with relative alternate
+ok 34 - clone checking out a tag
+ok 35 - setup ssh wrapper
+ok 36 - clone myhost:src uses ssh
+ok 37 - clone local path foo:bar
+ok 38 - bracketed hostnames are still ssh
+ok 39 - uplink is not treated as putty
+ok 40 - plink is treated specially (as putty)
+ok 41 - plink.exe is treated specially (as putty)
+ok 42 - tortoiseplink is like putty, with extra arguments
+ok 43 - setup ssh wrapper
+ok 44 - clone c:temp is ssl
+ok 45 # skip clone c:temp is dos drive (missing MINGW)
+ok 46 - clone host:rep
+ok 47 - clone host:rep/home/project
+ok 48 - clone host:123
+ok 49 - clone [::1]:rep
+ok 50 - clone [::1]:rep/home/project
+ok 51 - clone [::1]:123
+ok 52 - clone host:/~repo
+ok 53 - clone [::1]:/~repo
+ok 54 - clone foo/bar:baz is not ssh
+ok 55 - clone [foo]bar/baz:qux is not ssh
+ok 56 - clone [foo/bar]:baz is not ssh
+ok 57 - clone ssh://host.xz/home/user/repo
+ok 58 - clone ssh://host.xz/~repo
+ok 59 - clone ssh://host.xz:/home/user/repo
+ok 60 - clone ssh://host.xz:/~repo
+ok 61 - clone ssh://host.xz:22/home/user/repo
+ok 62 - clone ssh://host.xz:22/~repo
+ok 63 - clone ssh://::1/home/user/repo
+ok 64 - clone ssh://[::1]/home/user/repo
+ok 65 - clone ssh://[::1]:/home/user/repo
+ok 66 - clone ssh://user@::1/home/user/repo
+ok 67 - clone ssh://user@[::1]/home/user/repo
+ok 68 - clone ssh://user@[::1]:/home/user/repo
+ok 69 - clone ssh://[user@::1]/home/user/repo
+ok 70 - clone ssh://[user@::1]:/home/user/repo
+ok 71 - clone ssh://::1/~repo
+ok 72 - clone ssh://[::1]/~repo
+ok 73 - clone ssh://user@::1/~repo
+ok 74 - clone ssh://user@[::1]/~repo
+ok 75 - clone ssh://[user@::1]/~repo
+ok 76 - clone ssh://[::1]:22/home/user/repo
+ok 77 - clone ssh://user@[::1]:22/home/user/repo
+ok 78 - clone ssh://[user@::1]:22/home/user/repo
+ok 79 - clone ssh://[::1]:22/~repo
+ok 80 - clone ssh://user@[::1]:22/~repo
+ok 81 - clone ssh://[user@::1]:22/~repo
+ok 82 - clone from a repository with two identical branches
+ok 83 - shallow clone locally
+ok 84 - GIT_TRACE_PACKFILE produces a usable pack
+# passed all 84 test(s)
+1..84
 *** t5602-clone-remote-exec.sh ***
 ok 1 - setup
 ok 2 - clone calls git upload-pack unqualified with no -u option
 ok 3 - clone calls specified git upload-pack with -u option
 # passed all 3 test(s)
 1..3
+*** t5603-clone-dirname.sh ***
+ok 1 - setup ssh wrapper
+ok 2 - clone of host:foo goes to foo (non-bare)
+ok 3 - clone of host:foo goes to foo.git (bare)
+ok 4 - clone of host:foo.git goes to foo (non-bare)
+ok 5 - clone of host:foo.git goes to foo.git (bare)
+ok 6 - clone of host:foo/.git goes to foo (non-bare)
+ok 7 - clone of host:foo/.git goes to foo.git (bare)
+ok 8 - clone of ssh://host/foo goes to foo (non-bare)
+ok 9 - clone of ssh://host/foo goes to foo.git (bare)
+ok 10 - clone of ssh://host/foo.git goes to foo (non-bare)
+ok 11 - clone of ssh://host/foo.git goes to foo.git (bare)
+ok 12 - clone of ssh://host/foo/.git goes to foo (non-bare)
+ok 13 - clone of ssh://host/foo/.git goes to foo.git (bare)
+ok 14 - clone of ssh://host/foo/ goes to foo (non-bare)
+ok 15 - clone of ssh://host/foo/// goes to foo (non-bare)
+ok 16 - clone of ssh://host/foo/.git/ goes to foo (non-bare)
+ok 17 - clone of ssh://host/foo.git/ goes to foo (non-bare)
+ok 18 - clone of ssh://host/foo.git/// goes to foo (non-bare)
+ok 19 - clone of ssh://host/foo///.git/ goes to foo (non-bare)
+ok 20 - clone of ssh://host/foo/.git/// goes to foo (non-bare)
+ok 21 - clone of host:foo/ goes to foo (non-bare)
+ok 22 - clone of host:foo/// goes to foo (non-bare)
+ok 23 - clone of host:foo.git/ goes to foo (non-bare)
+ok 24 - clone of host:foo/.git/ goes to foo (non-bare)
+ok 25 - clone of host:foo.git/// goes to foo (non-bare)
+ok 26 - clone of host:foo///.git/ goes to foo (non-bare)
+ok 27 - clone of host:foo/.git/// goes to foo (non-bare)
+ok 28 - clone of ssh://host/ goes to host (non-bare)
+ok 29 - clone of ssh://host:1234/ goes to host (non-bare)
+ok 30 - clone of ssh://user@host/ goes to host (non-bare)
+ok 31 - clone of host:/ goes to host (non-bare)
+ok 32 - clone of ssh://user:password@host/ goes to host (non-bare)
+ok 33 - clone of ssh://user:password@host:1234/ goes to host (non-bare)
+ok 34 - clone of ssh://user:passw@rd@host:1234/ goes to host (non-bare)
+ok 35 - clone of user@host:/ goes to host (non-bare)
+ok 36 - clone of user:password@host:/ goes to host (non-bare)
+ok 37 - clone of user:passw@rd@host:/ goes to host (non-bare)
+ok 38 - clone of ssh://host/foo@bar goes to foo@bar (non-bare)
+ok 39 - clone of ssh://host/[email protected] goes to foo@bar (non-bare)
+ok 40 - clone of ssh://user:password@host/foo@bar goes to foo@bar (non-bare)
+ok 41 - clone of ssh://user:passw@rd@host/[email protected] goes to foo@bar (non-bare)
+ok 42 - clone of host:/foo@bar goes to foo@bar (non-bare)
+ok 43 - clone of host:/[email protected] goes to foo@bar (non-bare)
+ok 44 - clone of user:password@host:/foo@bar goes to foo@bar (non-bare)
+ok 45 - clone of user:passw@rd@host:/[email protected] goes to foo@bar (non-bare)
+ok 46 - clone of ssh://user:password@host/test:1234 goes to 1234 (non-bare)
+ok 47 - clone of ssh://user:password@host/test:1234.git goes to 1234 (non-bare)
+# passed all 47 test(s)
+1..47
 *** t5700-clone-reference.sh ***
 ok 1 - preparing first repository
 ok 2 - preparing second repository
@@ -6315,9 +10228,15 @@
 ok 18 - cloning alternate repo #2 and adding changes to repo #1
 ok 19 - cloning alternate repo #1, using #2 as reference
 ok 20 - cloning with reference being subset of source (-l -s)
-ok 21 - clone with reference from a tagged repository
-# passed all 21 test(s)
-1..21
+ok 21 - cloning with multiple references drops duplicates
+ok 22 - clone with reference from a tagged repository
+ok 23 - prepare branched repository
+ok 24 - fetch with incomplete alternates
+ok 25 - clone using repo with gitfile as a reference
+ok 26 - clone using repo pointed at by gitfile as reference
+ok 27 - clone and dissociate from reference
+# passed all 27 test(s)
+1..27
 *** t5701-clone-local.sh ***
 ok 1 - preparing origin repository
 ok 2 - local clone without .git suffix
@@ -6336,25 +10255,30 @@
 ok 15 - clone empty repository, and then push should not segfault.
 ok 16 - cloning non-existent directory fails
 ok 17 - cloning non-git directory fails
-# passed all 17 test(s)
-1..17
+ok 18 - cloning file:// does not hardlink
+ok 19 - cloning a local path with --no-local does not hardlink
+ok 20 - cloning locally respects "-u" for fetching refs
+# passed all 20 test(s)
+1..20
 *** t5702-clone-options.sh ***
 ok 1 - setup
 ok 2 - clone -o
-ok 3 - redirected clone
-ok 4 - redirected clone -v
+ok 3 - redirected clone does not show progress
+ok 4 - redirected clone -v does show progress
 # passed all 4 test(s)
 1..4
 *** t5704-bundle.sh ***
 ok 1 - setup
-ok 2 - tags can be excluded by rev-list options
+ok 2 - annotated tags can be excluded by rev-list options
 ok 3 - die if bundle file cannot be created
 not ok 4 - bundle --stdin # TODO known breakage
 not ok 5 - bundle --stdin <rev-list options> # TODO known breakage
 ok 6 - empty bundle file is rejected
+ok 7 - ridiculously long subject in boundary
+ok 8 - prerequisites with an empty commit message
 # still have 2 known breakage(s)
-# passed all remaining 4 test(s)
-1..6
+# passed all remaining 6 test(s)
+1..8
 *** t5705-clone-2gb.sh ***
 Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t
 ok 1 # skip setup (missing CLONE_2GB)
@@ -6368,9 +10292,10 @@
 ok 3 - clone -b chooses specified branch
 ok 4 - clone -b sets up tracking
 ok 5 - clone -b does not munge remotes/origin/HEAD
-ok 6 - clone -b with bogus branch chooses HEAD
-# passed all 6 test(s)
-1..6
+ok 6 - clone -b with bogus branch
+ok 7 - clone -b not allowed with empty repos
+# passed all 7 test(s)
+1..7
 *** t5707-clone-detached.sh ***
 ok 1 - setup
 ok 2 - clone repo (detached HEAD points to branch)
@@ -6395,6 +10320,19 @@
 ok 4 - clone -c config is available during clone
 # passed all 4 test(s)
 1..4
+*** t5709-clone-refspec.sh ***
+ok 1 - setup
+ok 2 - by default all branches will be kept updated
+ok 3 - by default no tags will be kept updated
+ok 4 - --single-branch while HEAD pointing at master
+ok 5 - --single-branch while HEAD pointing at side
+ok 6 - --single-branch with explicit --branch side
+ok 7 - --single-branch with explicit --branch with tag fetches updated tag
+ok 8 - --single-branch with --mirror
+ok 9 - --single-branch with explicit --branch and --mirror
+ok 10 - --single-branch with detached
+# passed all 10 test(s)
+1..10
 *** t5710-info-alternate.sh ***
 ok 1 - preparing first repository
 ok 2 - preparing second repository
@@ -6409,24 +10347,122 @@
 ok 11 - that relative alternate is only possible for current dir
 # passed all 11 test(s)
 1..11
-*** t5800-remote-helpers.sh ***
+*** t5801-remote-helpers.sh ***
+You do not seem to have gpg installed
 ok 1 - setup repository
 ok 2 - cloning from local repo
-ok 3 - cloning from remote repo
-ok 4 - create new commit on remote
-ok 5 - pulling from local repo
-ok 6 - pulling from remote remote
-ok 7 - pushing to local repo
-ok 8 - synch with changes from localclone
-ok 9 - pushing remote local repo
-ok 10 - fetch new branch
-ok 11 - fetch multiple branches
-ok 12 - push when remote has extra refs
-ok 13 - push new branch by name
-not ok 14 - push new branch with old:new refspec # TODO known breakage
+ok 3 - create new commit on remote
+ok 4 - pulling from local repo
+ok 5 - pushing to local repo
+ok 6 - fetch new branch
+ok 7 - fetch multiple branches
+ok 8 - push when remote has extra refs
+ok 9 - push new branch by name
+ok 10 - push new branch with old:new refspec
+ok 11 - push new branch with HEAD:new refspec
+ok 12 - push delete branch
+ok 13 - forced push
+ok 14 - cloning without refspec
+ok 15 - pulling without refspecs
+ok 16 - pushing without refspecs
+ok 17 - pulling without marks
+not ok 18 - pushing without marks # TODO known breakage
+ok 19 - push all with existing object
+ok 20 - push ref with existing object
+ok 21 # skip push signed tag (missing GPG)
+ok 22 # skip push signed tag with signed-tags capability (missing GPG)
+ok 23 - push update refs
+ok 24 - push update refs disabled by no-private-update
+ok 25 - push update refs failure
+ok 26 - proper failure checks for fetching
+ok 27 - proper failure checks for pushing
+ok 28 - push messages
+ok 29 - fetch HEAD
+ok 30 - fetch url
 # still have 1 known breakage(s)
-# passed all remaining 13 test(s)
-1..14
+# passed all remaining 29 test(s)
+1..30
+*** t5802-connect-helper.sh ***
+ok 1 - setup
+ok 2 - clone
+ok 3 - update following tag
+ok 4 - update backfilled tag
+ok 5 - update backfilled tag without primary transfer
+# passed all 5 test(s)
+1..5
+*** t5810-proto-disable-local.sh ***
+ok 1 - setup repository to clone
+ok 2 - clone file:// (enabled)
+ok 3 - fetch file:// (enabled)
+ok 4 - push file:// (enabled)
+ok 5 - push file:// (disabled)
+ok 6 - fetch file:// (disabled)
+ok 7 - clone file:// (disabled)
+ok 8 - clone path (enabled)
+ok 9 - fetch path (enabled)
+ok 10 - push path (enabled)
+ok 11 - push path (disabled)
+ok 12 - fetch path (disabled)
+ok 13 - clone path (disabled)
+# passed all 13 test(s)
+1..13
+*** t5811-proto-disable-git.sh ***
+ok 1 - create git-accessible repo
+ok 2 - clone git:// (enabled)
+ok 3 - fetch git:// (enabled)
+ok 4 - push git:// (enabled)
+ok 5 - push git:// (disabled)
+ok 6 - fetch git:// (disabled)
+ok 7 - clone git:// (disabled)
+# passed all 7 test(s)
+1..7
+*** t5812-proto-disable-http.sh ***
+1..0 # SKIP no web server found at '/usr/sbin/apache2'
+*** t5813-proto-disable-ssh.sh ***
+ok 1 - setup ssh wrapper
+ok 2 - setup repository to clone
+ok 3 - clone host:path (enabled)
+ok 4 - fetch host:path (enabled)
+ok 5 - push host:path (enabled)
+ok 6 - push host:path (disabled)
+ok 7 - fetch host:path (disabled)
+ok 8 - clone host:path (disabled)
+ok 9 - clone ssh:// (enabled)
+ok 10 - fetch ssh:// (enabled)
+ok 11 - push ssh:// (enabled)
+ok 12 - push ssh:// (disabled)
+ok 13 - fetch ssh:// (disabled)
+ok 14 - clone ssh:// (disabled)
+ok 15 - clone git+ssh:// (enabled)
+ok 16 - fetch git+ssh:// (enabled)
+ok 17 - push git+ssh:// (enabled)
+ok 18 - push git+ssh:// (disabled)
+ok 19 - fetch git+ssh:// (disabled)
+ok 20 - clone git+ssh:// (disabled)
+# passed all 20 test(s)
+1..20
+*** t5814-proto-disable-ext.sh ***
+ok 1 - setup ext wrapper
+ok 2 - setup repository to clone
+ok 3 - clone remote-helper (enabled)
+ok 4 - fetch remote-helper (enabled)
+ok 5 - push remote-helper (enabled)
+ok 6 - push remote-helper (disabled)
+ok 7 - fetch remote-helper (disabled)
+ok 8 - clone remote-helper (disabled)
+# passed all 8 test(s)
+1..8
+*** t5815-submodule-protos.sh ***
+ok 1 - setup ext wrapper
+ok 2 - setup ssh wrapper
+ok 3 - setup repository with submodules
+ok 4 - clone with recurse-submodules fails
+ok 5 - setup individual updates
+ok 6 - update of ssh allowed
+ok 7 - update of ext not allowed
+ok 8 - user can override whitelist
+# passed all 8 test(s)
+1..8
 *** t5900-repo-selection.sh ***
 ok 1 - find .git dir in worktree
 ok 2 - automagically add .git suffix
@@ -6443,8 +10479,13 @@
 ok 2 - rev-list --objects heeds pathspecs
 ok 3 - rev-list --objects with pathspecs and deeper paths
 ok 4 - rev-list --objects with pathspecs and copied files
-# passed all 4 test(s)
-1..4
+ok 5 - rev-list A..B and rev-list ^A B are the same
+ok 6 - propagate uninteresting flag down correctly
+ok 7 - symleft flag bit is propagated down from tag
+ok 8 - rev-list can show index objects
+ok 9 - --bisect and --first-parent can not be combined
+# passed all 9 test(s)
+1..9
 *** t6001-rev-list-graft.sh ***
 ok 1 - setup
 ok 2 - without grafts
@@ -6512,39 +10553,41 @@
 *** t6003-rev-list-topo-order.sh ***
 ok 1 - rev-list has correct number of entries
 ok 2 - simple topo order
-ok 3 - two diamonds topo order (g6)
-ok 4 - multiple heads
-ok 5 - multiple heads, prune at a1
-ok 6 - multiple heads, prune at l1
-ok 7 - cross-epoch, head at l5, prune at l1
-ok 8 - duplicated head arguments
-ok 9 - prune near topo
-ok 10 - head has no parent
-ok 11 - two nodes - one head, one base
-ok 12 - three nodes one head, one internal, one base
-ok 13 - linear prune l2 ^root
-ok 14 - linear prune l2 ^l0
-ok 15 - linear prune l2 ^l1
-ok 16 - linear prune l5 ^a4
-ok 17 - linear prune l5 ^l3
-ok 18 - linear prune l5 ^l4
-ok 19 - max-count 10 - topo order
-ok 20 - max-count 10 - non topo order
-ok 21 - --max-age=c3, no --topo-order
-ok 22 - one specified head reachable from another a4, c3, --topo-order
-ok 23 - one specified head reachable from another c3, a4, --topo-order
-ok 24 - one specified head reachable from another a4, c3, no --topo-order
-ok 25 - one specified head reachable from another c3, a4, no --topo-order
-ok 26 - graph with c3 and a4 parents of head
-ok 27 - graph with a4 and c3 parents of head
-ok 28 - head ^head --topo-order
-ok 29 - head ^head no --topo-order
-ok 30 - simple topo order (l5r1)
-ok 31 - simple topo order (r1l5)
-ok 32 - don't print things unreachable from one branch
-ok 33 - --topo-order a4 l3
-# passed all 33 test(s)
-1..33
+ok 3 - simple date order
+ok 4 - simple author-date order
+ok 5 - two diamonds topo order (g6)
+ok 6 - multiple heads
+ok 7 - multiple heads, prune at a1
+ok 8 - multiple heads, prune at l1
+ok 9 - cross-epoch, head at l5, prune at l1
+ok 10 - duplicated head arguments
+ok 11 - prune near topo
+ok 12 - head has no parent
+ok 13 - two nodes - one head, one base
+ok 14 - three nodes one head, one internal, one base
+ok 15 - linear prune l2 ^root
+ok 16 - linear prune l2 ^l0
+ok 17 - linear prune l2 ^l1
+ok 18 - linear prune l5 ^a4
+ok 19 - linear prune l5 ^l3
+ok 20 - linear prune l5 ^l4
+ok 21 - max-count 10 - topo order
+ok 22 - max-count 10 - non topo order
+ok 23 - --max-age=c3, no --topo-order
+ok 24 - one specified head reachable from another a4, c3, --topo-order
+ok 25 - one specified head reachable from another c3, a4, --topo-order
+ok 26 - one specified head reachable from another a4, c3, no --topo-order
+ok 27 - one specified head reachable from another c3, a4, no --topo-order
+ok 28 - graph with c3 and a4 parents of head
+ok 29 - graph with a4 and c3 parents of head
+ok 30 - head ^head --topo-order
+ok 31 - head ^head no --topo-order
+ok 32 - simple topo order (l5r1)
+ok 33 - simple topo order (r1l5)
+ok 34 - don't print things unreachable from one branch
+ok 35 - --topo-order a4 l3
+# passed all 35 test(s)
+1..35
 *** t6004-rev-list-path-optim.sh ***
 ok 1 - setup
 ok 2 - path-optimization
@@ -6574,34 +10617,53 @@
 ok 7 - format committer
 ok 8 - format encoding
 ok 9 - format subject
-ok 10 - format body
-ok 11 - format raw-body
-ok 12 - format colors
-ok 13 - format advanced-colors
-ok 14 - setup complex body
-ok 15 - format complex-encoding
-ok 16 - format complex-subject
-ok 17 - format complex-body
-ok 18 - %x00 shows NUL
-ok 19 - %ad respects --date=
-ok 20 - empty email
-ok 21 - del LF before empty (1)
-ok 22 - del LF before empty (2)
-ok 23 - add LF before non-empty (1)
-ok 24 - add LF before non-empty (2)
-ok 25 - add SP before non-empty (1)
-ok 26 - add SP before non-empty (2)
-ok 27 - --abbrev
-ok 28 - %H is not affected by --abbrev-commit
-ok 29 - %h is not affected by --abbrev-commit
-ok 30 - "%h %gD: %gs" is same as git-reflog
-ok 31 - "%h %gD: %gs" is same as git-reflog (with date)
-ok 32 - "%h %gD: %gs" is same as git-reflog (with --abbrev)
-ok 33 - %gd shortens ref name
-ok 34 - reflog identity
-ok 35 - oneline with empty message
-# passed all 35 test(s)
-1..35
+ok 10 - format subject-truncated
+ok 11 - format body
+ok 12 - format raw-body
+ok 13 - format colors
+ok 14 - format advanced-colors
+ok 15 - %C(auto) does not enable color by default
+ok 16 - %C(auto) enables colors for color.diff
+ok 17 - %C(auto) enables colors for color.ui
+ok 18 - %C(auto) respects --color
+ok 19 - %C(auto) respects --no-color
+ok 20 # skip %C(auto) respects --color=auto (stdout is tty) (missing TTY)
+ok 21 - %C(auto) respects --color=auto (stdout not tty)
+ok 22 - setup complex body
+ok 23 - format complex-encoding
+ok 24 - format complex-subject
+ok 25 - format complex-subject-trunc
+ok 26 - format complex-subject-mtrunc
+ok 27 - format complex-subject-ltrunc
+ok 28 - prepare expected messages (for test %b)
+ok 29 - format complex-body
+ok 30 - format complex-subject-commitencoding-unset
+ok 31 - format complex-subject-commitencoding-unset-trunc
+ok 32 - format complex-subject-commitencoding-unset-mtrunc
+ok 33 - format complex-subject-commitencoding-unset-ltrunc
+ok 34 - format complex-body-commitencoding-unset
+ok 35 - %x00 shows NUL
+ok 36 - %ad respects --date=
+ok 37 - empty email
+ok 38 - del LF before empty (1)
+ok 39 - del LF before empty (2)
+ok 40 - add LF before non-empty (1)
+ok 41 - add LF before non-empty (2)
+ok 42 - add SP before non-empty (1)
+ok 43 - add SP before non-empty (2)
+ok 44 - --abbrev
+ok 45 - %H is not affected by --abbrev-commit
+ok 46 - %h is not affected by --abbrev-commit
+ok 47 - "%h %gD: %gs" is same as git-reflog
+ok 48 - "%h %gD: %gs" is same as git-reflog (with date)
+ok 49 - "%h %gD: %gs" is same as git-reflog (with --abbrev)
+ok 50 - %gd shortens ref name
+ok 51 - reflog identity
+ok 52 - oneline with empty message
+ok 53 - single-character name is parsed correctly
+ok 54 - unused %G placeholders are passed through
+# passed all 54 test(s)
+1..54
 *** t6007-rev-list-cherry-pick-file.sh ***
 ok 1 - setup
 ok 2 - --left-right
@@ -6641,8 +10703,9 @@
 ok 11 - rev-list --merges --no-merges yields empty set
 ok 12 - rev-list override and infinities
 ok 13 - dodecapus
-# passed all 13 test(s)
-1..13
+ok 14 - ancestors with the same commit time
+# passed all 14 test(s)
+1..14
 *** t6010-merge-base.sh ***
 ok 1 - setup
 ok 2 - set up G and H
@@ -6653,8 +10716,10 @@
 ok 7 - merge-base for octopus-step (setup)
 ok 8 - merge-base A B C
 ok 9 - criss-cross merge-base for octopus-step
-# passed all 9 test(s)
-1..9
+ok 10 - using reflog to find the fork point
+ok 11 - merge-base --octopus --all for complex tree
+# passed all 11 test(s)
+1..11
 *** t6011-rev-list-with-bad-commit.sh ***
 ok 1 - setup
 ok 2 - verify number of revisions
@@ -6674,8 +10739,11 @@
 ok 7 - log -- file
 ok 8 - log --topo-order -- file
 ok 9 - log --first-parent -- another-file
-# passed all 9 test(s)
-1..9
+ok 10 - log --full-history E -- lost
+ok 11 - full history simplification without parent
+ok 12 - --full-diff is not affected by --parents
+# passed all 12 test(s)
+1..12
 *** t6013-rev-list-reverse-parents.sh ***
 ok 1 - set up --reverse example
 ok 2 - --reverse --parents --full-history combines correctly
@@ -6686,8 +10754,9 @@
 ok 1 - setup
 ok 2 - rev-list --all lists detached HEAD
 ok 3 - repack does not lose detached HEAD
-# passed all 3 test(s)
-1..3
+ok 4 - rev-list --graph --no-walk is forbidden
+# passed all 4 test(s)
+1..4
 *** t6015-rev-list-show-all-parents.sh ***
 ok 1 - set up --show-all --parents test
 ok 2 - --parents rewrites TREESAME parents correctly
@@ -6747,40 +10816,54 @@
 ok 14 - rev-parse --glob=heads/*
 ok 15 - rev-parse --tags=foo
 ok 16 - rev-parse --remotes=foo
-ok 17 - rev-list --glob=refs/heads/subspace/*
-ok 18 - rev-list --glob refs/heads/subspace/*
-ok 19 - rev-list not confused by option-like --glob arg
-ok 20 - rev-list --glob=heads/subspace/*
-ok 21 - rev-list --glob=refs/heads/subspace/
-ok 22 - rev-list --glob=heads/subspace/
-ok 23 - rev-list --glob=heads/subspace
-ok 24 - rev-list --branches=subspace/*
-ok 25 - rev-list --branches=subspace/
-ok 26 - rev-list --branches=subspace
-ok 27 - rev-list --branches
-ok 28 - rev-list --glob=heads/someref/* master
-ok 29 - rev-list --glob=heads/subspace/* --glob=heads/other/*
-ok 30 - rev-list --glob=heads/*
-ok 31 - rev-list --tags=foo
-ok 32 - rev-list --tags
-ok 33 - rev-list --remotes=foo
-ok 34 - shortlog accepts --glob/--tags/--remotes
-not ok 35 - shortlog accepts --glob as detached option # TODO known breakage
-not ok 36 - shortlog --glob is not confused by option-like argument # TODO known breakage
-# still have 4 known breakage(s)
-# passed all remaining 32 test(s)
-1..36
+ok 17 - rev-parse --exclude with --branches
+ok 18 - rev-parse --exclude with --all
+ok 19 - rev-parse accumulates multiple --exclude
+ok 20 - rev-list --glob=refs/heads/subspace/*
+ok 21 - rev-list --glob refs/heads/subspace/*
+ok 22 - rev-list not confused by option-like --glob arg
+ok 23 - rev-list --glob=heads/subspace/*
+ok 24 - rev-list --glob=refs/heads/subspace/
+ok 25 - rev-list --glob=heads/subspace/
+ok 26 - rev-list --glob=heads/subspace
+ok 27 - rev-list --branches=subspace/*
+ok 28 - rev-list --branches=subspace/
+ok 29 - rev-list --branches=subspace
+ok 30 - rev-list --branches
+ok 31 - rev-list --glob=heads/someref/* master
+ok 32 - rev-list --glob=heads/subspace/* --glob=heads/other/*
+ok 33 - rev-list --glob=heads/*
+ok 34 - rev-list --tags=foo
+ok 35 - rev-list --tags
+ok 36 - rev-list --remotes=foo
+ok 37 - rev-list --exclude with --branches
+ok 38 - rev-list --exclude with --all
+ok 39 - rev-list accumulates multiple --exclude
+not ok 40 - rev-list may want to succeed with empty output on no input (1) # TODO known breakage
+not ok 41 - rev-list may want to succeed with empty output on no input (2) # TODO known breakage
+not ok 42 - rev-list may want to succeed with empty output on no input (3) # TODO known breakage
+ok 43 - shortlog accepts --glob/--tags/--remotes
+not ok 44 - shortlog accepts --glob as detached option # TODO known breakage
+not ok 45 - shortlog --glob is not confused by option-like argument # TODO known breakage
+# still have 7 known breakage(s)
+# passed all remaining 38 test(s)
+1..45
 *** t6019-rev-list-ancestry-path.sh ***
 ok 1 - setup
 ok 2 - rev-list D..M
 ok 3 - rev-list --ancestry-path D..M
 ok 4 - rev-list D..M -- M.t
-ok 5 - rev-list --ancestry-patch D..M -- M.t
-ok 6 - setup criss-cross
-ok 7 - criss-cross: rev-list --ancestry-path cb..bc
-ok 8 - criss-cross: rev-list --ancestry-path --all ^cb
-# passed all 8 test(s)
-1..8
+ok 5 - rev-list --ancestry-path D..M -- M.t
+ok 6 - rev-list F...I
+ok 7 - rev-list --ancestry-path F...I
+ok 8 - rev-list G..M -- G.t
+ok 9 - rev-list --ancestry-path G..M -- G.t
+ok 10 - rev-list --ancestry-path --simplify-merges G^..M -- G.t
+ok 11 - setup criss-cross
+ok 12 - criss-cross: rev-list --ancestry-path cb..bc
+ok 13 - criss-cross: rev-list --ancestry-path --all ^cb
+# passed all 13 test(s)
+1..13
 *** t6020-merge-df.sh ***
 ok 1 - prepare repository
 ok 2 - Merge with d/f conflicts
@@ -6843,29 +10926,39 @@
 ok 43 - merge rename into master has correct extended markers
 ok 44 - setup spurious "refusing to lose untracked" message
 ok 45 - no spurious "refusing to lose untracked" message
-# passed all 45 test(s)
-1..45
+ok 46 - do not follow renames for empty files
+# passed all 46 test(s)
+1..46
 *** t6023-merge-file.sh ***
 ok 1 - merge with no changes
 ok 2 - merge without conflict
 ok 3 - works in subdirectory
 ok 4 - merge without conflict (--quiet)
-ok 5 - merge without conflict (missing LF at EOF)
-ok 6 - merge result added missing LF
-ok 7 - merge with conflicts
-ok 8 - expected conflict markers
-ok 9 - merge with conflicts, using -L
-ok 10 - expected conflict markers, with -L
-ok 11 - conflict in removed tail
-ok 12 - expected conflict markers
-ok 13 - binary files cannot be merged
-ok 14 - MERGE_ZEALOUS simplifies non-conflicts
-ok 15 - ZEALOUS_ALNUM
-ok 16 - "diff3 -m" style output (1)
-ok 17 - "diff3 -m" style output (2)
-ok 18 - marker size
-# passed all 18 test(s)
-1..18
+not ok 5 - merge without conflict (missing LF at EOF) # TODO known breakage
+not ok 6 - merge result added missing LF # TODO known breakage
+ok 7 - merge without conflict (missing LF at EOF, away from change in the other file)
+ok 8 - merge does not add LF away of change
+ok 9 - merge with conflicts
+ok 10 - expected conflict markers
+ok 11 - merge conflicting with --ours
+ok 12 - merge conflicting with --theirs
+ok 13 - merge conflicting with --union
+ok 14 - merge with conflicts, using -L
+ok 15 - expected conflict markers, with -L
+ok 16 - conflict in removed tail
+ok 17 - expected conflict markers
+ok 18 - binary files cannot be merged
+ok 19 - MERGE_ZEALOUS simplifies non-conflicts
+ok 20 - ZEALOUS_ALNUM
+ok 21 - "diff3 -m" style output (1)
+ok 22 - "diff3 -m" style output (2)
+ok 23 - marker size
+ok 24 - conflict at EOF without LF resolved by --ours
+ok 25 - conflict at EOF without LF resolved by --theirs
+ok 26 - conflict at EOF without LF resolved by --union
+# still have 2 known breakage(s)
+# passed all remaining 24 test(s)
+1..26
 *** t6024-recursive-merge.sh ***
 ok 1 - setup tests
 ok 2 - combined merge conflicts
@@ -6909,8 +11002,9 @@
 ok 4 - merge -s ours up-to-date
 ok 5 - merge -s ours fast-forward
 ok 6 - merge -s subtree up-to-date
-# passed all 6 test(s)
-1..6
+ok 7 - merge fast-forward octopus
+# passed all 7 test(s)
+1..7
 *** t6029-merge-subtree.sh ***
 ok 1 - setup
 ok 2 - subtree available and works like recursive
@@ -6938,7 +11032,7 @@
 ok 13 - bisect start: existing ".git/BISECT_START" not modified if junk rev
 ok 14 - bisect start: no ".git/BISECT_START" if mistaken rev
 ok 15 - bisect start: no ".git/BISECT_START" if checkout error
-ok 16 - bisect skip: successfull result
+ok 16 - bisect skip: successful result
 ok 17 - bisect skip: cannot tell between 3 commits
 ok 18 - bisect skip: cannot tell between 2 commits
 ok 19 - bisect skip: with commit both bad and skipped
@@ -6976,8 +11070,11 @@
 ok 51 - bisect: --no-checkout - target in breakage
 ok 52 - bisect: --no-checkout - target after breakage
 ok 53 - bisect: demonstrate identification of damage boundary
-# passed all 53 test(s)
-1..53
+ok 54 - bisect log: successfull result
+ok 55 - bisect log: only skip commits left
+ok 56 - "git bisect bad HEAD" behaves as "git bisect bad"
+# passed all 56 test(s)
+1..56
 *** t6031-merge-recursive.sh ***
 ok 1 - mode change in one branch: keep changed version
 ok 2 - verify executable bit on file
@@ -7018,20 +11115,27 @@
 ok 4 - checkout should not have deleted a/b-2/c/d
 ok 5 - setup for merge test
 ok 6 - Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)
-ok 7 - Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)
-ok 8 - Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)
-ok 9 - Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)
-not ok 10 - do not lose untracked in merge (resolve) # TODO known breakage
-ok 11 - do not lose untracked in merge (recursive)
-ok 12 - do not lose modifications in merge (resolve)
-ok 13 - do not lose modifications in merge (recursive)
-ok 14 - setup a merge where dir a/b-2 changed to symlink
-ok 15 - merge should not have D/F conflicts (resolve)
-ok 16 - merge should not have D/F conflicts (recursive)
-ok 17 - merge should not have F/D conflicts (recursive)
+ok 7 - a/b was resolved as symlink
+ok 8 - Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)
+ok 9 - a/b was resolved as symlink
+ok 10 - Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)
+ok 11 - a/b was resolved as symlink
+ok 12 - Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)
+ok 13 - a/b was resolved as symlink
+not ok 14 - do not lose untracked in merge (resolve) # TODO known breakage
+ok 15 - do not lose untracked in merge (recursive)
+ok 16 - do not lose modifications in merge (resolve)
+ok 17 - do not lose modifications in merge (recursive)
+ok 18 - setup a merge where dir a/b-2 changed to symlink
+ok 19 - merge should not have D/F conflicts (resolve)
+ok 20 - a/b-2 was resolved as symlink
+ok 21 - merge should not have D/F conflicts (recursive)
+ok 22 - a/b-2 was resolved as symlink
+ok 23 - merge should not have F/D conflicts (recursive)
+ok 24 - a/b-2 was resolved as symlink
 # still have 1 known breakage(s)
-# passed all remaining 16 test(s)
-1..17
+# passed all remaining 23 test(s)
+1..24
 *** t6036-recursive-corner-cases.sh ***
 ok 1 - setup basic criss-cross + rename with no modifications
 ok 2 - merge simple rename+criss-cross with no modifications
@@ -7063,9 +11167,10 @@
 ok 2 - plain recursive - should conflict
 ok 3 - recursive favouring theirs
 ok 4 - recursive favouring ours
-ok 5 - pull with -X
-# passed all 5 test(s)
-1..5
+ok 5 - binary file with -Xours/-Xtheirs
+ok 6 - pull passes -X to underlying merge
+# passed all 6 test(s)
+1..6
 *** t6038-merge-text-auto.sh ***
 ok 1 - setup
 ok 2 - set up fuzz_conflict() helper
@@ -7080,20 +11185,47 @@
 # still have 3 known breakage(s)
 # passed all remaining 7 test(s)
 1..10
+*** t6039-merge-ignorecase.sh ***
+1..0 # SKIP skipping case insensitive tests - case sensitive file system
 *** t6040-tracking-info.sh ***
 ok 1 - setup
 ok 2 - branch -v
 ok 3 - branch -vv
-ok 4 - checkout
+ok 4 - checkout (diverged from upstream)
 ok 5 - checkout with local tracked branch
-ok 6 - status
-ok 7 - fail to track lightweight tags
-ok 8 - fail to track annotated tags
-ok 9 - setup tracking with branch --set-upstream on existing branch
-ok 10 - --set-upstream does not change branch
-ok 11 - --set-upstream @{-1}
-# passed all 11 test(s)
-1..11
+ok 6 - checkout (upstream is gone)
+ok 7 - checkout (up-to-date with upstream)
+ok 8 - status (diverged from upstream)
+ok 9 - status (upstream is gone)
+ok 10 - status (up-to-date with upstream)
+ok 11 - status -s -b (diverged from upstream)
+ok 12 - status -s -b (upstream is gone)
+ok 13 - status -s -b (up-to-date with upstream)
+ok 14 - fail to track lightweight tags
+ok 15 - fail to track annotated tags
+ok 16 - setup tracking with branch --set-upstream on existing branch
+ok 17 - --set-upstream does not change branch
+ok 18 - --set-upstream @{-1}
+# passed all 18 test(s)
+1..18
+*** t6041-bisect-submodule.sh ***
+ok 1 - git_bisect: added submodule creates empty directory
+ok 2 - git_bisect: added submodule leaves existing empty directory alone
+ok 3 - git_bisect: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git_bisect: replace tracked file with submodule creates empty directory
+ok 5 - git_bisect: replace directory with submodule
+ok 6 - git_bisect: removed submodule leaves submodule directory and its contents in place
+ok 7 - git_bisect: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git_bisect: replace submodule with a directory must fail
+ok 9 - git_bisect: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git_bisect: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git_bisect: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git_bisect: modified submodule does not update submodule work tree
+ok 13 - git_bisect: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git_bisect: modified submodule does not update submodule work tree from invalid commit
+# still have 2 known breakage(s)
+# passed all remaining 12 test(s)
+1..14
 *** t6042-merge-rename-corner-cases.sh ***
 ok 1 - setup rename/delete + untracked file
 ok 2 - Does git preserve Gollum's precious artifact?
@@ -7125,6 +11257,7 @@
 # passed all remaining 19 test(s)
 1..26
 *** t6050-replace.sh ***
+You do not seem to have gpg installed
 ok 1 - set up buggy branch
 ok 2 - replace the author
 ok 3 - test --no-replace-objects option
@@ -7134,15 +11267,32 @@
 ok 7 - repack, clone and fetch work
 ok 8 - "git replace" listing and deleting
 ok 9 - "git replace" replacing
-ok 10 - create parallel branch without the bug
-ok 11 - push to cloned repo
-ok 12 - push branch with replacement
-ok 13 - fetch branch with replacement
-ok 14 - bisect and replacements
-ok 15 - index-pack and replacements
-ok 16 - not just commits
-# passed all 16 test(s)
-1..16
+ok 10 - "git replace" resolves sha1
+ok 11 - create parallel branch without the bug
+ok 12 - push to cloned repo
+ok 13 - push branch with replacement
+ok 14 - fetch branch with replacement
+ok 15 - bisect and replacements
+ok 16 - index-pack and replacements
+ok 17 - not just commits
+ok 18 - replaced and replacement objects must be of the same type
+ok 19 - -f option bypasses the type check
+ok 20 - git cat-file --batch works on replace objects
+ok 21 - test --format bogus
+ok 22 - test --format short
+ok 23 - test --format medium
+ok 24 - test --format long
+ok 25 - setup a fake editor
+ok 26 - --edit with and without already replaced object
+ok 27 - --edit and change nothing or command failed
+ok 28 - replace ref cleanup
+ok 29 - --graft with and without already replaced object
+ok 30 # skip set up a signed commit (missing GPG)
+ok 31 # skip --graft with a signed commit (missing GPG)
+ok 32 # skip set up a merge commit with a mergetag (missing GPG)
+ok 33 # skip --graft on a commit with a mergetag (missing GPG)
+# passed all 33 test(s)
+1..33
 *** t6060-merge-index.sh ***
 ok 1 - setup diverging branches
 ok 2 - read-tree does not resolve content merge
@@ -7154,28 +11304,98 @@
 # passed all 7 test(s)
 1..7
 *** t6101-rev-parse-parents.sh ***
-ok 1 - start is valid
-ok 2 - start^0
-ok 3 - start^1 not valid
-ok 4 - second^1 = second^
-ok 5 - final^1^1^1
-ok 6 - final^1^1^1 = final^^^
-ok 7 - final^1^2
-ok 8 - final^1^2 != final^1^1
-ok 9 - final^1^3 not valid
-ok 10 - --verify start2^1
-ok 11 - --verify start2^0
-ok 12 - final^1^@ = final^1^1 final^1^2
-ok 13 - final^1^! = final^1 ^final^1^1 ^final^1^2
-ok 14 - repack for next test
-ok 15 - short SHA-1 works
-# passed all 15 test(s)
-1..15
+ok 1 - setup
+ok 2 - start is valid
+ok 3 - start^0
+ok 4 - start^1 not valid
+ok 5 - second^1 = second^
+ok 6 - final^1^1^1
+ok 7 - final^1^1^1 = final^^^
+ok 8 - final^1^2
+ok 9 - final^1^2 != final^1^1
+ok 10 - final^1^3 not valid
+ok 11 - --verify start2^1
+ok 12 - --verify start2^0
+ok 13 - final^1^@ = final^1^1 final^1^2
+ok 14 - final^1^! = final^1 ^final^1^1 ^final^1^2
+ok 15 - large graft octopus
+ok 16 - repack for next test
+ok 17 - short SHA-1 works
+# passed all 17 test(s)
+1..17
 *** t6110-rev-list-sparse.sh ***
 ok 1 - setup
 ok 2 - rev-list --first-parent --boundary
 # passed all 2 test(s)
 1..2
+*** t6111-rev-list-treesame.sh ***
+ok 1 - setup
+ok 2 - log 
+ok 3 - log 
+ok 4 - log --topo-order
+ok 5 - log -- file
+ok 6 - log --parents -- file
+ok 7 - log --full-history -- file
+ok 8 - log --full-history --parents -- file
+ok 9 - log --simplify-merges -- file
+ok 10 - log --first-parent
+ok 11 - log --first-parent -- file
+ok 12 - log F..M
+ok 13 - log F..M --topo-order
+ok 14 - log F..M -- file
+ok 15 - log --parents F..M -- file
+ok 16 - log F..M --full-history -- file
+ok 17 - log F..M --full-history --parents -- file
+ok 18 - log F..M --simplify-merges -- file
+ok 19 - log F..M --ancestry-path
+ok 20 - log F..M --ancestry-path -- file
+ok 21 - log F..M --ancestry-path --parents -- file
+ok 22 - log F..M --ancestry-path --simplify-merges -- file
+ok 23 - log F..M --first-parent
+ok 24 - log F..M --first-parent -- file
+ok 25 - log E..M --ancestry-path
+ok 26 - log E..M --ancestry-path -- file
+ok 27 - log E..M --ancestry-path --parents -- file
+ok 28 - log E..M --ancestry-path --simplify-merges -- file
+ok 29 - log G..M
+ok 30 - log G..M --topo-order
+ok 31 - log G..M -- file
+ok 32 - log G..M --parents -- file
+ok 33 - log G..M --full-history -- file
+ok 34 - log G..M --full-history --parents -- file
+ok 35 - log G..M --simplify-merges -- file
+ok 36 - log G..M --ancestry-path
+ok 37 - log G..M --ancestry-path -- file
+ok 38 - log G..M --ancestry-path --parents -- file
+ok 39 - log G..M --ancestry-path --simplify-merges -- file
+ok 40 - log B..F
+ok 41 - log B..F -- file
+ok 42 - log B..F --parents -- file
+ok 43 - log B..F --full-history -- file
+ok 44 - log B..F --full-history --parents -- file
+ok 45 - log B..F --simplify-merges -- file
+ok 46 - log B..F --ancestry-path
+ok 47 - log B..F --ancestry-path -- file
+ok 48 - log B..F --ancestry-path --parents -- file
+ok 49 - log B..F --ancestry-path --simplify-merges -- file
+ok 50 - log B..F --first-parent
+ok 51 - log B..F --first-parent -- file
+ok 52 - log E F ^B -- file
+ok 53 - log E...F -- file
+ok 54 - log C..F
+ok 55 - log C..F -- file
+ok 56 - log C..F --parents -- file
+ok 57 - log C..F --full-history -- file
+ok 58 - log C..F --full-history --parents -- file
+ok 59 - log C..F --simplify-merges -- file
+ok 60 - log C..F --ancestry-path
+ok 61 - log C..F --ancestry-path -- file
+ok 62 - log C..F --ancestry-path --parents -- file
+ok 63 - log C..F --ancestry-path --simplify-merges -- file
+ok 64 - log C..F --first-parent
+ok 65 - log C..F --first-parent -- file
+# passed all 65 test(s)
+1..65
 *** t6120-describe.sh ***
 ok 1 - setup
 ok 2 - describe HEAD
@@ -7195,35 +11415,95 @@
 ok 16 - describe --all HEAD^^^
 ok 17 - describe --long HEAD^^2^
 ok 18 - describe --long HEAD^^2
-ok 19 - describe --all A^0
-ok 20 - no warning was displayed for A
-ok 21 - rename tag A to Q locally
-ok 22 - describe HEAD
-ok 23 - warning was displayed for Q
-ok 24 - rename tag Q back to A
-ok 25 - pack tag refs
-ok 26 - describe HEAD
-ok 27 - describe --dirty
-ok 28 - set-up dirty work tree
-ok 29 - describe --dirty
-ok 30 - describe --dirty=.mod
-ok 31 - describe --dirty HEAD
-ok 32 - set-up matching pattern tests
-ok 33 - describe --match=test-*
-ok 34 - describe --tags --match=test1-*
-ok 35 - describe --tags --match=test2-*
-ok 36 - describe --long --tags --match=test2-* HEAD^
-# passed all 36 test(s)
-1..36
+ok 19 - describe --tags
+ok 20 - describe --first-parent --tags
+ok 21 - describe --contains defaults to HEAD without commit-ish
+ok 22 - describe --all A^0
+ok 23 - no warning was displayed for A
+ok 24 - rename tag A to Q locally
+ok 25 - describe HEAD
+ok 26 - warning was displayed for Q
+ok 27 - rename tag Q back to A
+ok 28 - pack tag refs
+ok 29 - describe HEAD
+ok 30 - describe --dirty
+ok 31 - set-up dirty work tree
+ok 32 - describe --dirty
+ok 33 - describe --dirty=.mod
+ok 34 - describe --dirty HEAD
+ok 35 - set-up matching pattern tests
+ok 36 - describe --match=test-*
+ok 37 - describe --tags --match=test1-*
+ok 38 - describe --tags --match=test2-*
+ok 39 - describe --long --tags --match=test2-* HEAD^
+ok 40 - name-rev with exact tags
+ok 41 - describe --contains with the exact tags
+# passed all 41 test(s)
+1..41
+*** t6130-pathspec-noglob.sh ***
+ok 1 - create commits with glob characters
+ok 2 - vanilla pathspec matches literally
+ok 3 - star pathspec globs
+ok 4 - star pathspec globs
+ok 5 - bracket pathspec globs and matches literal brackets
+ok 6 - bracket pathspec globs and matches literal brackets
+ok 7 - no-glob option matches literally (vanilla)
+ok 8 - no-glob option matches literally (vanilla)
+ok 9 - no-glob option matches literally (star)
+ok 10 - no-glob option matches literally (star)
+ok 11 - no-glob option matches literally (bracket)
+ok 12 - no-glob option matches literally (bracket)
+ok 13 - no-glob option disables :(literal)
+ok 14 - no-glob environment variable works
+ok 15 - blame takes global pathspec flags
+ok 16 - setup xxx/bar
+ok 17 - **/ works with :(glob)
+ok 18 - **/ does not work with --noglob-pathspecs
+ok 19 - **/ works with :(glob) and --noglob-pathspecs
+ok 20 - **/ works with --glob-pathspecs
+ok 21 - **/ does not work with :(literal) and --glob-pathspecs
+# passed all 21 test(s)
+1..21
+*** t6131-pathspec-icase.sh ***
+ok 1 - create commits with glob characters
+ok 2 - tree_entry_interesting matches bar
+ok 3 - tree_entry_interesting matches :(icase)bar
+ok 4 - tree_entry_interesting matches :(icase)bar with prefix
+ok 5 - tree_entry_interesting matches :(icase)bar with empty prefix
+ok 6 - match_pathspec matches :(icase)bar
+ok 7 - match_pathspec matches :(icase)bar with prefix
+ok 8 - match_pathspec matches :(icase)bar with empty prefix
+ok 9 - "git diff" can take magic :(icase) pathspec
+# passed all 9 test(s)
+1..9
+*** t6132-pathspec-exclude.sh ***
+ok 1 - setup
+ok 2 - exclude only should error out
+ok 3 - t_e_i() exclude sub
+ok 4 - t_e_i() exclude sub/sub/file
+ok 5 - t_e_i() exclude sub using mnemonic
+ok 6 - t_e_i() exclude :(icase)SUB
+ok 7 - t_e_i() exclude sub2 from sub
+ok 8 - t_e_i() exclude sub/*file
+ok 9 - t_e_i() exclude :(glob)sub/*/file
+ok 10 - m_p_d() exclude sub
+ok 11 - m_p_d() exclude sub/sub/file
+ok 12 - m_p_d() exclude sub using mnemonic
+ok 13 - m_p_d() exclude :(icase)SUB
+ok 14 - m_p_d() exclude sub2 from sub
+ok 15 - m_p_d() exclude sub/*file
+ok 16 - m_p_d() exclude :(glob)sub/*/file
+# passed all 16 test(s)
+1..16
 *** t6200-fmt-merge-msg.sh ***
 ok 1 - setup
 ok 2 - message for merging local branch
 ok 3 - message for merging external branch
 ok 4 - [merge] summary/log configuration
-ok 5 - setup: clear [merge] configuration
-ok 6 - setup FETCH_HEAD
-ok 7 - merge.log=3 limits shortlog length
-ok 8 - merge.log=5 shows all 5 commits
+ok 5 - setup FETCH_HEAD
+ok 6 - merge.log=3 limits shortlog length
+ok 7 - merge.log=5 shows all 5 commits
+ok 8 - --log=5 with custom comment character
 ok 9 - merge.log=0 disables shortlog
 ok 10 - --log=3 limits shortlog length
 ok 11 - --log=5 shows all 5 commits
@@ -7239,14 +11519,15 @@
 ok 21 - merge-msg two tags
 ok 22 - merge-msg tag and branch
 ok 23 - merge-msg lots of commits
-# passed all 23 test(s)
-1..23
+ok 24 - merge-msg with "merging" an annotated tag
+# passed all 24 test(s)
+1..24
 *** t6300-for-each-ref.sh ***
 You do not seem to have gpg installed
-ok 1 - Create sample commit with known timestamp
-ok 2 - Create upstream config
-ok 3 - basic atom: head refname
-ok 4 - basic atom: head upstream
+ok 1 - setup
+ok 2 - basic atom: head refname
+ok 3 - basic atom: head upstream
+ok 4 - basic atom: head push
 ok 5 - basic atom: head objecttype
 ok 6 - basic atom: head objectsize
 ok 7 - basic atom: head objectname
@@ -7255,125 +11536,180 @@
 ok 10 - basic atom: head numparent
 ok 11 - basic atom: head object
 ok 12 - basic atom: head type
-ok 13 - basic atom: head author
-ok 14 - basic atom: head authorname
-ok 15 - basic atom: head authoremail
-ok 16 - basic atom: head authordate
-ok 17 - basic atom: head committer
-ok 18 - basic atom: head committername
-ok 19 - basic atom: head committeremail
-ok 20 - basic atom: head committerdate
-ok 21 - basic atom: head tag
-ok 22 - basic atom: head tagger
-ok 23 - basic atom: head taggername
-ok 24 - basic atom: head taggeremail
-ok 25 - basic atom: head taggerdate
-ok 26 - basic atom: head creator
-ok 27 - basic atom: head creatordate
-ok 28 - basic atom: head subject
-ok 29 - basic atom: head contents:subject
-ok 30 - basic atom: head body
-ok 31 - basic atom: head contents:body
-ok 32 - basic atom: head contents:signature
-ok 33 - basic atom: head contents
-ok 34 - basic atom: tag refname
-ok 35 - basic atom: tag upstream
-ok 36 - basic atom: tag objecttype
-ok 37 - basic atom: tag objectsize
-ok 38 - basic atom: tag objectname
-ok 39 - basic atom: tag tree
-ok 40 - basic atom: tag parent
-ok 41 - basic atom: tag numparent
-ok 42 - basic atom: tag object
-ok 43 - basic atom: tag type
-ok 44 - basic atom: tag author
-ok 45 - basic atom: tag authorname
-ok 46 - basic atom: tag authoremail
-ok 47 - basic atom: tag authordate
-ok 48 - basic atom: tag committer
-ok 49 - basic atom: tag committername
-ok 50 - basic atom: tag committeremail
-ok 51 - basic atom: tag committerdate
-ok 52 - basic atom: tag tag
-ok 53 - basic atom: tag tagger
-ok 54 - basic atom: tag taggername
-ok 55 - basic atom: tag taggeremail
-ok 56 - basic atom: tag taggerdate
-ok 57 - basic atom: tag creator
-ok 58 - basic atom: tag creatordate
-ok 59 - basic atom: tag subject
-ok 60 - basic atom: tag contents:subject
-ok 61 - basic atom: tag body
-ok 62 - basic atom: tag contents:body
-ok 63 - basic atom: tag contents:signature
-ok 64 - basic atom: tag contents
-ok 65 - Check invalid atoms names are errors
-ok 66 - Check format specifiers are ignored in naming date atoms
-ok 67 - Check valid format specifiers for date fields
-ok 68 - Check invalid format specifiers are errors
-ok 69 - Check unformatted date fields output
-ok 70 - Check format "default" formatted date fields output
-ok 71 - Check format "relative" date fields output
-ok 72 - Check format "short" date fields output
-ok 73 - Check format "local" date fields output
-ok 74 - Check format "iso8601" date fields output
-ok 75 - Check format "rfc2822" date fields output
-ok 76 - Verify ascending sort
-ok 77 - Verify descending sort
-ok 78 - Quoting style: shell
-ok 79 - Quoting style: perl
-ok 80 - Quoting style: python
-ok 81 - Quoting style: tcl
-ok 82 - more than one quoting style: --perl --shell
-ok 83 - more than one quoting style: -s --python
-ok 84 - more than one quoting style: --python --tcl
-ok 85 - more than one quoting style: --tcl --perl
-ok 86 - Check short refname format
-ok 87 - Check short upstream format
-ok 88 - Check short objectname format
-ok 89 - Check for invalid refname format
-ok 90 - Check ambiguous head and tag refs (strict)
-ok 91 - Check ambiguous head and tag refs (loose)
-ok 92 - Check ambiguous head and tag refs II (loose)
-ok 93 - an unusual tag with an incomplete line
-ok 94 - create tag with subject and body content
-ok 95 - basic atom: refs/tags/subject-body subject
-ok 96 - basic atom: refs/tags/subject-body body
-ok 97 - basic atom: refs/tags/subject-body contents
-ok 98 - create tag with multiline subject
-ok 99 - basic atom: refs/tags/multiline subject
-ok 100 - basic atom: refs/tags/multiline contents:subject
-ok 101 - basic atom: refs/tags/multiline body
-ok 102 - basic atom: refs/tags/multiline contents:body
-ok 103 - basic atom: refs/tags/multiline contents:signature
-ok 104 - basic atom: refs/tags/multiline contents
-ok 105 # skip create signed tags (missing GPG)
-ok 106 # skip basic atom: refs/tags/signed-empty subject (missing GPG)
-ok 107 # skip basic atom: refs/tags/signed-empty contents:subject (missing GPG)
-ok 108 # skip basic atom: refs/tags/signed-empty body (missing GPG)
-ok 109 # skip basic atom: refs/tags/signed-empty contents:body (missing GPG)
-ok 110 # skip basic atom: refs/tags/signed-empty contents:signature (missing GPG)
-ok 111 # skip basic atom: refs/tags/signed-empty contents (missing GPG)
-ok 112 # skip basic atom: refs/tags/signed-short subject (missing GPG)
-ok 113 # skip basic atom: refs/tags/signed-short contents:subject (missing GPG)
-ok 114 # skip basic atom: refs/tags/signed-short body (missing GPG)
-ok 115 # skip basic atom: refs/tags/signed-short contents:body (missing GPG)
-ok 116 # skip basic atom: refs/tags/signed-short contents:signature (missing GPG)
-ok 117 # skip basic atom: refs/tags/signed-short contents (missing GPG)
-ok 118 # skip basic atom: refs/tags/signed-long subject (missing GPG)
-ok 119 # skip basic atom: refs/tags/signed-long contents:subject (missing GPG)
-ok 120 # skip basic atom: refs/tags/signed-long body (missing GPG)
-ok 121 # skip basic atom: refs/tags/signed-long contents:body (missing GPG)
-ok 122 # skip basic atom: refs/tags/signed-long contents:signature (missing GPG)
-ok 123 # skip basic atom: refs/tags/signed-long contents (missing GPG)
-# passed all 123 test(s)
-1..123
+ok 13 - basic atom: head *objectname
+ok 14 - basic atom: head *objecttype
+ok 15 - basic atom: head author
+ok 16 - basic atom: head authorname
+ok 17 - basic atom: head authoremail
+ok 18 - basic atom: head authordate
+ok 19 - basic atom: head committer
+ok 20 - basic atom: head committername
+ok 21 - basic atom: head committeremail
+ok 22 - basic atom: head committerdate
+ok 23 - basic atom: head tag
+ok 24 - basic atom: head tagger
+ok 25 - basic atom: head taggername
+ok 26 - basic atom: head taggeremail
+ok 27 - basic atom: head taggerdate
+ok 28 - basic atom: head creator
+ok 29 - basic atom: head creatordate
+ok 30 - basic atom: head subject
+ok 31 - basic atom: head contents:subject
+ok 32 - basic atom: head body
+ok 33 - basic atom: head contents:body
+ok 34 - basic atom: head contents:signature
+ok 35 - basic atom: head contents
+ok 36 - basic atom: head HEAD
+ok 37 - basic atom: tag refname
+ok 38 - basic atom: tag upstream
+ok 39 - basic atom: tag push
+ok 40 - basic atom: tag objecttype
+ok 41 - basic atom: tag objectsize
+ok 42 - basic atom: tag objectname
+ok 43 - basic atom: tag tree
+ok 44 - basic atom: tag parent
+ok 45 - basic atom: tag numparent
+ok 46 - basic atom: tag object
+ok 47 - basic atom: tag type
+ok 48 - basic atom: tag *objectname
+ok 49 - basic atom: tag *objecttype
+ok 50 - basic atom: tag author
+ok 51 - basic atom: tag authorname
+ok 52 - basic atom: tag authoremail
+ok 53 - basic atom: tag authordate
+ok 54 - basic atom: tag committer
+ok 55 - basic atom: tag committername
+ok 56 - basic atom: tag committeremail
+ok 57 - basic atom: tag committerdate
+ok 58 - basic atom: tag tag
+ok 59 - basic atom: tag tagger
+ok 60 - basic atom: tag taggername
+ok 61 - basic atom: tag taggeremail
+ok 62 - basic atom: tag taggerdate
+ok 63 - basic atom: tag creator
+ok 64 - basic atom: tag creatordate
+ok 65 - basic atom: tag subject
+ok 66 - basic atom: tag contents:subject
+ok 67 - basic atom: tag body
+ok 68 - basic atom: tag contents:body
+ok 69 - basic atom: tag contents:signature
+ok 70 - basic atom: tag contents
+ok 71 - basic atom: tag HEAD
+ok 72 - Check invalid atoms names are errors
+ok 73 - Check format specifiers are ignored in naming date atoms
+ok 74 - Check valid format specifiers for date fields
+ok 75 - Check invalid format specifiers are errors
+ok 76 - Check unformatted date fields output
+ok 77 - Check format "default" formatted date fields output
+ok 78 - Check format "relative" date fields output
+ok 79 - Check format "short" date fields output
+ok 80 - Check format "local" date fields output
+ok 81 - Check format "iso8601" date fields output
+ok 82 - Check format "rfc2822" date fields output
+ok 83 - Check format of strftime date fields
+ok 84 - exercise strftime with odd fields
+ok 85 - Verify ascending sort
+ok 86 - Verify descending sort
+ok 87 - Quoting style: shell
+ok 88 - Quoting style: perl
+ok 89 - Quoting style: python
+ok 90 - Quoting style: tcl
+ok 91 - more than one quoting style: --perl --shell
+ok 92 - more than one quoting style: -s --python
+ok 93 - more than one quoting style: --python --tcl
+ok 94 - more than one quoting style: --tcl --perl
+ok 95 - Check short refname format
+ok 96 - Check short upstream format
+ok 97 - setup for upstream:track[short]
+ok 98 - Check upstream:track format
+ok 99 - Check upstream:trackshort format
+ok 100 - Check that :track[short] cannot be used with other atoms
+ok 101 - Check that :track[short] works when upstream is invalid
+ok 102 - %(push) supports tracking specifiers, too
+ok 103 - Check short objectname format
+ok 104 - Check for invalid refname format
+ok 105 - Check %(color:...) 
+ok 106 - Check ambiguous head and tag refs (strict)
+ok 107 - Check ambiguous head and tag refs (loose)
+ok 108 - Check ambiguous head and tag refs II (loose)
+ok 109 - an unusual tag with an incomplete line
+ok 110 - create tag with subject and body content
+ok 111 - basic atom: refs/tags/subject-body subject
+ok 112 - basic atom: refs/tags/subject-body body
+ok 113 - basic atom: refs/tags/subject-body contents
+ok 114 - create tag with multiline subject
+ok 115 - basic atom: refs/tags/multiline subject
+ok 116 - basic atom: refs/tags/multiline contents:subject
+ok 117 - basic atom: refs/tags/multiline body
+ok 118 - basic atom: refs/tags/multiline contents:body
+ok 119 - basic atom: refs/tags/multiline contents:signature
+ok 120 - basic atom: refs/tags/multiline contents
+ok 121 # skip create signed tags (missing GPG)
+ok 122 # skip basic atom: refs/tags/signed-empty subject (missing GPG)
+ok 123 # skip basic atom: refs/tags/signed-empty contents:subject (missing GPG)
+ok 124 # skip basic atom: refs/tags/signed-empty body (missing GPG)
+ok 125 # skip basic atom: refs/tags/signed-empty contents:body (missing GPG)
+ok 126 # skip basic atom: refs/tags/signed-empty contents:signature (missing GPG)
+ok 127 # skip basic atom: refs/tags/signed-empty contents (missing GPG)
+ok 128 # skip basic atom: refs/tags/signed-short subject (missing GPG)
+ok 129 # skip basic atom: refs/tags/signed-short contents:subject (missing GPG)
+ok 130 # skip basic atom: refs/tags/signed-short body (missing GPG)
+ok 131 # skip basic atom: refs/tags/signed-short contents:body (missing GPG)
+ok 132 # skip basic atom: refs/tags/signed-short contents:signature (missing GPG)
+ok 133 # skip basic atom: refs/tags/signed-short contents (missing GPG)
+ok 134 # skip basic atom: refs/tags/signed-long subject (missing GPG)
+ok 135 # skip basic atom: refs/tags/signed-long contents:subject (missing GPG)
+ok 136 # skip basic atom: refs/tags/signed-long body (missing GPG)
+ok 137 # skip basic atom: refs/tags/signed-long contents:body (missing GPG)
+ok 138 # skip basic atom: refs/tags/signed-long contents:signature (missing GPG)
+ok 139 # skip basic atom: refs/tags/signed-long contents (missing GPG)
+ok 140 - Verify sort with multiple keys
+# passed all 140 test(s)
+1..140
+*** t6301-for-each-ref-errors.sh ***
+ok 1 - setup
+ok 2 - Broken refs are reported correctly
+ok 3 - NULL_SHA1 refs are reported correctly
+ok 4 - Missing objects are reported correctly
+# passed all 4 test(s)
+1..4
 *** t6500-gc.sh ***
 ok 1 - gc empty repository
-ok 2 - gc --gobbledegook
-ok 3 - gc -h with invalid configuration
-# passed all 3 test(s)
-1..3
+ok 2 - gc does not leave behind pid file
+ok 3 - gc --gobbledegook
+ok 4 - gc -h with invalid configuration
+# passed all 4 test(s)
+1..4
+*** t6501-freshen-objects.sh ***
+ok 1 - make repo completely empty (loose)
+ok 2 - disable reflogs (loose)
+ok 3 - setup basic history (loose)
+ok 4 - create and abandon some objects (loose)
+ok 5 - simulate time passing (loose)
+ok 6 - start writing new commit with old blob (loose)
+ok 7 - simultaneous gc (loose)
+ok 8 - finish writing out commit (loose)
+ok 9 - repository passes fsck (loose)
+ok 10 - abandon objects again (loose)
+ok 11 - start writing new commit with same tree (loose)
+ok 12 - simultaneous gc (loose)
+ok 13 - finish writing out commit (loose)
+ok 14 - make repo completely empty (repack)
+ok 15 - disable reflogs (repack)
+ok 16 - setup basic history (repack)
+ok 17 - create and abandon some objects (repack)
+ok 18 - simulate time passing (repack)
+ok 19 - start writing new commit with old blob (repack)
+ok 20 - simultaneous gc (repack)
+ok 21 - finish writing out commit (repack)
+ok 22 - repository passes fsck (repack)
+ok 23 - abandon objects again (repack)
+ok 24 - start writing new commit with same tree (repack)
+ok 25 - simultaneous gc (repack)
+ok 26 - finish writing out commit (repack)
+ok 27 - do not complain about existing broken links
+# passed all 27 test(s)
+1..27
 *** t7001-mv.sh ***
 ok 1 - prepare reference tree
 ok 2 - moving the file out of subdirectory
@@ -7386,26 +11722,43 @@
 ok 9 - checking -k on untracked file
 ok 10 - checking -k on multiple untracked files
 ok 11 - checking -f on untracked file with existing target
-ok 12 - adding another file
-ok 13 - moving whole subdirectory
-ok 14 - commiting the change
-ok 15 - checking the commit
-ok 16 - succeed when source is a prefix of destination
-ok 17 - moving whole subdirectory into subdirectory
-ok 18 - commiting the change
-ok 19 - checking the commit
-ok 20 - do not move directory over existing directory
-ok 21 - move into "."
-ok 22 - Michael Cassar's test case
-ok 23 - Sergey Vlasov's test case
-ok 24 - absolute pathname
-ok 25 - absolute pathname outside should fail
-ok 26 - git mv to move multiple sources into a directory
-ok 27 - git mv should not change sha1 of moved cache entry
-ok 28 - git mv should overwrite symlink to a file
-ok 29 - git mv should overwrite file with a symlink
-# passed all 29 test(s)
-1..29
+ok 12 - moving to absent target with trailing slash
+ok 13 - clean up
+ok 14 - moving to existing untracked target with trailing slash
+ok 15 - moving to existing tracked target with trailing slash
+ok 16 - clean up
+ok 17 - adding another file
+ok 18 - moving whole subdirectory
+ok 19 - commiting the change
+ok 20 - checking the commit
+ok 21 - succeed when source is a prefix of destination
+ok 22 - moving whole subdirectory into subdirectory
+ok 23 - commiting the change
+ok 24 - checking the commit
+ok 25 - do not move directory over existing directory
+ok 26 - move into "."
+ok 27 - Michael Cassar's test case
+ok 28 - Sergey Vlasov's test case
+ok 29 - absolute pathname
+ok 30 - absolute pathname outside should fail
+ok 31 - git mv to move multiple sources into a directory
+ok 32 - git mv should not change sha1 of moved cache entry
+ok 33 - git mv should overwrite symlink to a file
+ok 34 - git mv should overwrite file with a symlink
+ok 35 - check moved symlink
+ok 36 - setup submodule
+ok 37 - git mv cannot move a submodule in a file
+ok 38 - git mv moves a submodule with a .git directory and no .gitmodules
+ok 39 - git mv moves a submodule with a .git directory and .gitmodules
+ok 40 - git mv moves a submodule with gitfile
+ok 41 - mv does not complain when no .gitmodules file is found
+ok 42 - mv will error out on a modified .gitmodules file unless staged
+ok 43 - mv issues a warning when section is not found in .gitmodules
+ok 44 - mv --dry-run does not touch the submodule or .gitmodules
+ok 45 - checking out a commit before submodule moved needs manual updates
+ok 46 - mv -k does not accidentally destroy submodules
+# passed all 46 test(s)
+1..46
 *** t7003-filter-branch.sh ***
 ok 1 - setup
 ok 2 - rewrite identically
@@ -7413,35 +11766,38 @@
 ok 4 - rewrite bare repository identically
 ok 5 - result is really identical
 ok 6 - correct GIT_DIR while using -d
-ok 7 - Fail if commit filter fails
-ok 8 - rewrite, renaming a specific file
-ok 9 - test that the file was renamed
-ok 10 - rewrite, renaming a specific directory
-ok 11 - test that the directory was renamed
-ok 12 - rewrite one branch, keeping a side branch
-ok 13 - common ancestor is still common (unchanged)
-ok 14 - filter subdirectory only
-ok 15 - subdirectory filter result looks okay
-ok 16 - more setup
-ok 17 - use index-filter to move into a subdirectory
-ok 18 - stops when msg filter fails
-ok 19 - author information is preserved
-ok 20 - remove a certain author's commits
-ok 21 - barf on invalid name
-ok 22 - "map" works in commit filter
-ok 23 - Name needing quotes
-ok 24 - Subdirectory filter with disappearing trees
-ok 25 - Tag name filtering retains tag message
-ok 26 - Tag name filtering strips gpg signature
-ok 27 - Tag name filtering allows slashes in tag names
-ok 28 - Prune empty commits
-ok 29 - --remap-to-ancestor with filename filters
-ok 30 - automatic remapping to ancestor with filename filters
-ok 31 - setup submodule
-ok 32 - rewrite submodule with another content
-ok 33 - replace submodule revision
-# passed all 33 test(s)
-1..33
+ok 7 - tree-filter works with -d
+ok 8 - Fail if commit filter fails
+ok 9 - rewrite, renaming a specific file
+ok 10 - test that the file was renamed
+ok 11 - rewrite, renaming a specific directory
+ok 12 - test that the directory was renamed
+ok 13 - rewrite one branch, keeping a side branch
+ok 14 - common ancestor is still common (unchanged)
+ok 15 - filter subdirectory only
+ok 16 - subdirectory filter result looks okay
+ok 17 - more setup
+ok 18 - use index-filter to move into a subdirectory
+ok 19 - stops when msg filter fails
+ok 20 - author information is preserved
+ok 21 - remove a certain author's commits
+ok 22 - barf on invalid name
+ok 23 - "map" works in commit filter
+ok 24 - Name needing quotes
+ok 25 - Subdirectory filter with disappearing trees
+ok 26 - Tag name filtering retains tag message
+ok 27 - Tag name filtering strips gpg signature
+ok 28 - Tag name filtering allows slashes in tag names
+ok 29 - Prune empty commits
+ok 30 - prune empty collapsed merges
+ok 31 - --remap-to-ancestor with filename filters
+ok 32 - automatic remapping to ancestor with filename filters
+ok 33 - setup submodule
+ok 34 - rewrite submodule with another content
+ok 35 - replace submodule revision
+ok 36 - filter commit message without trailing newline
+# passed all 36 test(s)
+1..36
 *** t7004-tag.sh ***
 You do not seem to have gpg installed
 ok 1 - listing all tags in an empty tree should succeed
@@ -7451,118 +11807,143 @@
 ok 5 - creating a tag for HEAD in an empty tree should fail
 ok 6 - creating a tag for an unknown revision should fail
 ok 7 - creating a tag using default HEAD should succeed
-ok 8 - listing all tags if one exists should succeed
-ok 9 - listing all tags if one exists should output that tag
-ok 10 - listing a tag using a matching pattern should succeed
-ok 11 - listing a tag using a matching pattern should output that tag
-ok 12 - listing tags using a non-matching pattern should suceed
-ok 13 - listing tags using a non-matching pattern should output nothing
-ok 14 - trying to create a tag with the name of one existing should fail
-ok 15 - trying to create a tag with a non-valid name should fail
-ok 16 - creating a tag using HEAD directly should succeed
-ok 17 - trying to delete an unknown tag should fail
-ok 18 - trying to delete tags without params should succeed and do nothing
-ok 19 - deleting two existing tags in one command should succeed
-ok 20 - creating a tag with the name of another deleted one should succeed
-ok 21 - trying to delete two tags, existing and not, should fail in the 2nd
-ok 22 - trying to delete an already deleted tag should fail
-ok 23 - listing all tags should print them ordered
-ok 24 - listing tags with substring as pattern must print those matching
-ok 25 - listing tags with a suffix as pattern must print those matching
-ok 26 - listing tags with a prefix as pattern must print those matching
-ok 27 - listing tags using a name as pattern must print that one matching
-ok 28 - listing tags using a name as pattern must print that one matching
-ok 29 - listing tags with ? in the pattern should print those matching
-ok 30 - listing tags using v.* should print nothing because none have v.
-ok 31 - listing tags using v* should print only those having v
-ok 32 - tag -l can accept multiple patterns
-ok 33 - a non-annotated tag created without parameters should point to HEAD
-ok 34 - trying to verify an unknown tag should fail
-ok 35 - trying to verify a non-annotated and non-signed tag should fail
-ok 36 - trying to verify many non-annotated or unknown tags, should fail
-ok 37 - creating an annotated tag with -m message should succeed
-ok 38 - creating an annotated tag with -F messagefile should succeed
-ok 39 - creating an annotated tag with -F - should succeed
-ok 40 - trying to create a tag with a non-existing -F file should fail
-ok 41 - trying to create tags giving both -m or -F options should fail
-ok 42 - creating a tag with an empty -m message should succeed
-ok 43 - creating a tag with an empty -F messagefile should succeed
-ok 44 - extra blanks in the message for an annotated tag should be removed
-ok 45 - creating a tag with blank -m message with spaces should succeed
-ok 46 - creating a tag with blank -F messagefile with spaces should succeed
-ok 47 - creating a tag with -F file of spaces and no newline should succeed
-ok 48 - creating a tag using a -F messagefile with #comments should succeed
-ok 49 - creating a tag with a #comment in the -m message should succeed
-ok 50 - creating a tag with #comments in the -F messagefile should succeed
-ok 51 - creating a tag with a file of #comment and no newline should succeed
-ok 52 - listing the one-line message of a non-signed tag should succeed
-ok 53 - listing the zero-lines message of a non-signed tag should succeed
-ok 54 - listing many message lines of a non-signed tag should succeed
-ok 55 - annotations for blobs are empty
-ok 56 # skip trying to verify an annotated non-signed tag should fail (missing GPG)
-ok 57 # skip trying to verify a file-annotated non-signed tag should fail (missing GPG)
-ok 58 # skip trying to verify two annotated non-signed tags should fail (missing GPG)
-ok 59 # skip creating a signed tag with -m message should succeed (missing GPG)
-ok 60 # skip sign with a given key id (missing GPG)
-ok 61 # skip sign with an unknown id (1) (missing GPG)
-ok 62 # skip sign with an unknown id (2) (missing GPG)
-ok 63 # skip -u implies signed tag (missing GPG)
-ok 64 # skip creating a signed tag with -F messagefile should succeed (missing GPG)
-ok 65 # skip creating a signed tag with -F - should succeed (missing GPG)
-ok 66 # skip -s implies annotated tag (missing GPG)
-ok 67 # skip trying to create a signed tag with non-existing -F file should fail (missing GPG)
-ok 68 # skip verifying a signed tag should succeed (missing GPG)
-ok 69 # skip verifying two signed tags in one command should succeed (missing GPG)
-ok 70 # skip verifying many signed and non-signed tags should fail (missing GPG)
-ok 71 # skip verifying a forged tag should fail (missing GPG)
-ok 72 # skip creating a signed tag with an empty -m message should succeed (missing GPG)
-ok 73 # skip creating a signed tag with an empty -F messagefile should succeed (missing GPG)
-ok 74 # skip extra blanks in the message for a signed tag should be removed (missing GPG)
-ok 75 # skip creating a signed tag with a blank -m message should succeed (missing GPG)
-ok 76 # skip creating a signed tag with blank -F file with spaces should succeed (missing GPG)
-ok 77 # skip creating a signed tag with spaces and no newline should succeed (missing GPG)
-ok 78 # skip creating a signed tag with a -F file with #comments should succeed (missing GPG)
-ok 79 # skip creating a signed tag with #commented -m message should succeed (missing GPG)
-ok 80 # skip creating a signed tag with #commented -F messagefile should succeed (missing GPG)
-ok 81 # skip creating a signed tag with a #comment and no newline should succeed (missing GPG)
-ok 82 # skip listing the one-line message of a signed tag should succeed (missing GPG)
-ok 83 # skip listing the zero-lines message of a signed tag should succeed (missing GPG)
-ok 84 # skip listing many message lines of a signed tag should succeed (missing GPG)
-ok 85 # skip creating a signed tag pointing to a tree should succeed (missing GPG)
-ok 86 # skip creating a signed tag pointing to a blob should succeed (missing GPG)
-ok 87 # skip creating a signed tag pointing to another tag should succeed (missing GPG)
-t7004-tag.sh: line 1025: gpghome/gpg.conf: No such file or directory
-ok 88 # skip creating a signed tag with rfc1991 (missing GPG)
-ok 89 # skip reediting a signed tag body omits signature (missing GPG)
-ok 90 # skip verifying rfc1991 signature (missing GPG)
-ok 91 # skip list tag with rfc1991 signature (missing GPG)
-ok 92 # skip verifying rfc1991 signature without --rfc1991 (missing GPG)
-ok 93 # skip list tag with rfc1991 signature without --rfc1991 (missing GPG)
-ok 94 # skip reediting a signed tag body omits signature (missing GPG)
-ok 95 # skip git tag -s fails if gpg is misconfigured (missing GPG)
-ok 96 # skip verify signed tag fails when public key is not present (missing GPG)
-ok 97 - git tag -a fails if tag annotation is empty
-ok 98 - message in editor has initial comment
-ok 99 - message in editor has initial comment: first line
-ok 100 - message in editor has initial comment: remainder
-ok 101 - overwriting an annoted tag should use its previous body
-ok 102 - filename for the message is relative to cwd
-ok 103 - filename for the message is relative to cwd
-ok 104 - creating second commit and tag
-ok 105 - creating third commit without tag
-ok 106 - checking that first commit is in all tags (hash)
-ok 107 - checking that first commit is in all tags (tag)
-ok 108 - checking that first commit is in all tags (relative)
-ok 109 - checking that second commit only has one tag
-ok 110 - checking that third commit has no tags
-ok 111 - creating simple branch
-ok 112 - checking that branch head only has one tag
-ok 113 - merging original branch into this branch
-ok 114 - checking that original branch head has one tag now
-ok 115 - checking that initial commit is in all tags
-ok 116 - mixing incompatibles modes and options is forbidden
-# passed all 116 test(s)
-1..116
+ok 8 - creating a tag with --create-reflog should create reflog
+ok 9 - --create-reflog does not create reflog on failure
+ok 10 - listing all tags if one exists should succeed
+ok 11 - listing all tags if one exists should output that tag
+ok 12 - listing a tag using a matching pattern should succeed
+ok 13 - listing a tag using a matching pattern should output that tag
+ok 14 - listing tags using a non-matching pattern should suceed
+ok 15 - listing tags using a non-matching pattern should output nothing
+ok 16 - trying to create a tag with the name of one existing should fail
+ok 17 - trying to create a tag with a non-valid name should fail
+ok 18 - creating a tag using HEAD directly should succeed
+ok 19 - --force can create a tag with the name of one existing
+ok 20 - --force is moot with a non-existing tag name
+Deleted tag 'newtag' (was 86e17e4)
+Deleted tag 'forcetag' (was 86e17e4)
+ok 21 - trying to delete an unknown tag should fail
+ok 22 - trying to delete tags without params should succeed and do nothing
+ok 23 - deleting two existing tags in one command should succeed
+ok 24 - creating a tag with the name of another deleted one should succeed
+ok 25 - trying to delete two tags, existing and not, should fail in the 2nd
+ok 26 - trying to delete an already deleted tag should fail
+ok 27 - listing all tags should print them ordered
+ok 28 - listing tags with substring as pattern must print those matching
+ok 29 - listing tags with a suffix as pattern must print those matching
+ok 30 - listing tags with a prefix as pattern must print those matching
+ok 31 - listing tags using a name as pattern must print that one matching
+ok 32 - listing tags using a name as pattern must print that one matching
+ok 33 - listing tags with ? in the pattern should print those matching
+ok 34 - listing tags using v.* should print nothing because none have v.
+ok 35 - listing tags using v* should print only those having v
+ok 36 - tag -l can accept multiple patterns
+ok 37 - listing tags in column
+ok 38 - listing tags in column with column.*
+ok 39 - listing tag with -n --column should fail
+ok 40 - listing tags -n in column with column.ui ignored
+ok 41 - a non-annotated tag created without parameters should point to HEAD
+ok 42 - trying to verify an unknown tag should fail
+ok 43 - trying to verify a non-annotated and non-signed tag should fail
+ok 44 - trying to verify many non-annotated or unknown tags, should fail
+ok 45 - creating an annotated tag with -m message should succeed
+ok 46 - creating an annotated tag with -F messagefile should succeed
+ok 47 - creating an annotated tag with -F - should succeed
+ok 48 - trying to create a tag with a non-existing -F file should fail
+ok 49 - trying to create tags giving both -m or -F options should fail
+ok 50 - creating a tag with an empty -m message should succeed
+ok 51 - creating a tag with an empty -F messagefile should succeed
+ok 52 - extra blanks in the message for an annotated tag should be removed
+ok 53 - creating a tag with blank -m message with spaces should succeed
+ok 54 - creating a tag with blank -F messagefile with spaces should succeed
+ok 55 - creating a tag with -F file of spaces and no newline should succeed
+ok 56 - creating a tag using a -F messagefile with #comments should succeed
+ok 57 - creating a tag with a #comment in the -m message should succeed
+ok 58 - creating a tag with #comments in the -F messagefile should succeed
+ok 59 - creating a tag with a file of #comment and no newline should succeed
+ok 60 - listing the one-line message of a non-signed tag should succeed
+ok 61 - listing the zero-lines message of a non-signed tag should succeed
+ok 62 - listing many message lines of a non-signed tag should succeed
+ok 63 - annotations for blobs are empty
+ok 64 # skip trying to verify an annotated non-signed tag should fail (missing GPG)
+ok 65 # skip trying to verify a file-annotated non-signed tag should fail (missing GPG)
+ok 66 # skip trying to verify two annotated non-signed tags should fail (missing GPG)
+ok 67 # skip creating a signed tag with -m message should succeed (missing GPG)
+ok 68 # skip sign with a given key id (missing GPG)
+ok 69 # skip sign with an unknown id (1) (missing GPG)
+ok 70 # skip sign with an unknown id (2) (missing GPG)
+ok 71 # skip -u implies signed tag (missing GPG)
+ok 72 # skip creating a signed tag with -F messagefile should succeed (missing GPG)
+ok 73 # skip creating a signed tag with -F - should succeed (missing GPG)
+ok 74 # skip -s implies annotated tag (missing GPG)
+ok 75 # skip trying to create a signed tag with non-existing -F file should fail (missing GPG)
+ok 76 # skip verifying a signed tag should succeed (missing GPG)
+ok 77 # skip verifying two signed tags in one command should succeed (missing GPG)
+ok 78 # skip verifying many signed and non-signed tags should fail (missing GPG)
+ok 79 # skip verifying a forged tag should fail (missing GPG)
+ok 80 # skip creating a signed tag with an empty -m message should succeed (missing GPG)
+ok 81 # skip creating a signed tag with an empty -F messagefile should succeed (missing GPG)
+ok 82 # skip extra blanks in the message for a signed tag should be removed (missing GPG)
+ok 83 # skip creating a signed tag with a blank -m message should succeed (missing GPG)
+ok 84 # skip creating a signed tag with blank -F file with spaces should succeed (missing GPG)
+ok 85 # skip creating a signed tag with spaces and no newline should succeed (missing GPG)
+ok 86 # skip creating a signed tag with a -F file with #comments should succeed (missing GPG)
+ok 87 # skip creating a signed tag with #commented -m message should succeed (missing GPG)
+ok 88 # skip creating a signed tag with #commented -F messagefile should succeed (missing GPG)
+ok 89 # skip creating a signed tag with a #comment and no newline should succeed (missing GPG)
+ok 90 # skip listing the one-line message of a signed tag should succeed (missing GPG)
+ok 91 # skip listing the zero-lines message of a signed tag should succeed (missing GPG)
+ok 92 # skip listing many message lines of a signed tag should succeed (missing GPG)
+ok 93 # skip creating a signed tag pointing to a tree should succeed (missing GPG)
+ok 94 # skip creating a signed tag pointing to a blob should succeed (missing GPG)
+ok 95 # skip creating a signed tag pointing to another tag should succeed (missing GPG)
+ok 96 # skip creating a signed tag with rfc1991 (missing RFC1991,GPG of GPG,RFC1991)
+ok 97 # skip reediting a signed tag body omits signature (missing RFC1991,GPG of GPG,RFC1991)
+ok 98 # skip verifying rfc1991 signature (missing RFC1991,GPG of GPG,RFC1991)
+ok 99 # skip list tag with rfc1991 signature (missing RFC1991,GPG of GPG,RFC1991)
+ok 100 # skip verifying rfc1991 signature without --rfc1991 (missing RFC1991,GPG of GPG,RFC1991)
+ok 101 # skip list tag with rfc1991 signature without --rfc1991 (missing RFC1991,GPG of GPG,RFC1991)
+ok 102 # skip reediting a signed tag body omits signature (missing RFC1991,GPG of GPG,RFC1991)
+ok 103 # skip git tag -s fails if gpg is misconfigured (missing GPG)
+ok 104 # skip verify signed tag fails when public key is not present (missing GPG)
+ok 105 - git tag -a fails if tag annotation is empty
+ok 106 - message in editor has initial comment
+ok 107 - message in editor has initial comment: first line
+ok 108 - message in editor has initial comment: remainder
+ok 109 - overwriting an annoted tag should use its previous body
+ok 110 - filename for the message is relative to cwd
+ok 111 - filename for the message is relative to cwd
+ok 112 - creating second commit and tag
+ok 113 - creating third commit without tag
+ok 114 - checking that first commit is in all tags (hash)
+ok 115 - checking that first commit is in all tags (tag)
+ok 116 - checking that first commit is in all tags (relative)
+ok 117 - checking that second commit only has one tag
+ok 118 - checking that third commit has no tags
+ok 119 - creating simple branch
+ok 120 - checking that branch head only has one tag
+ok 121 - merging original branch into this branch
+ok 122 - checking that original branch head has one tag now
+ok 123 - checking that initial commit is in all tags
+ok 124 - mixing incompatibles modes and options is forbidden
+ok 125 - --points-at cannot be used in non-list mode
+ok 126 - --points-at finds lightweight tags
+ok 127 - --points-at finds annotated tags of commits
+ok 128 - --points-at finds annotated tags of tags
+ok 129 - multiple --points-at are OR-ed together
+ok 130 - lexical sort
+ok 131 - version sort
+ok 132 - reverse version sort
+ok 133 - reverse lexical sort
+ok 134 - configured lexical sort
+ok 135 - option override configured sort
+ok 136 - invalid sort parameter on command line
+ok 137 - invalid sort parameter in configuratoin
+ok 138 - version sort with prerelease reordering
+ok 139 - reverse version sort with prerelease reordering
+ok 140 - --contains works in a deep repo
+# passed all 140 test(s)
+1..140
 *** t7005-editor.sh ***
 ok 1 - determine default editor
 ok 2 - setup
@@ -7584,10 +11965,10 @@
 1..16
 *** t7006-pager.sh ***
 ok 1 - determine default pager
-ok 2 - set up terminal for tests
-ok 3 - setup
-ok 4 # skip some commands use a pager (missing TTY)
-ok 5 # skip pager runs from subdir (missing TTY)
+ok 2 - setup
+ok 3 # skip some commands use a pager (missing TTY)
+ok 4 # skip pager runs from subdir (missing TTY)
+ok 5 # skip LESS and LV envvars are set for pagination (missing TTY)
 ok 6 # skip some commands do not use a pager (missing TTY)
 ok 7 - no pager when stdout is a pipe
 ok 8 - no pager when stdout is a regular file
@@ -7658,13 +12039,26 @@
 ok 73 # skip command-specific pager works for external commands (missing TTY)
 ok 74 # skip sub-commands of externals use their own pager (missing TTY)
 ok 75 # skip external command pagers override sub-commands (missing TTY)
-# passed all 75 test(s)
-1..75
+ok 76 - command with underscores does not complain
+# passed all 76 test(s)
+1..76
 *** t7007-show.sh ***
 ok 1 - setup
 ok 2 - showing a tag that point at a missing object
-# passed all 2 test(s)
-1..2
+ok 3 - set up a bit of history
+ok 4 - showing two commits
+ok 5 - showing a range walks (linear)
+ok 6 - showing a range walks (Y shape, ^ first)
+ok 7 - showing a range walks (Y shape, ^ last)
+ok 8 - showing with -N walks
+ok 9 - showing annotated tag
+ok 10 - showing annotated tag plus commit
+ok 11 - showing range
+ok 12 - -s suppresses diff
+ok 13 - --quiet suppresses diff
+ok 14 - show --graph is forbidden
+# passed all 14 test(s)
+1..14
 *** t7008-grep-binary.sh ***
 ok 1 - setup
 ok 2 - git grep ina a
@@ -7685,10 +12079,26 @@
 ok 17 - git grep y<NUL>f a
 ok 18 - git grep y<NUL>x a
 ok 19 - grep respects binary diff attribute
-ok 20 - grep respects not-binary diff attribute
+ok 20 - grep --cached respects binary diff attribute
+ok 21 - grep --cached respects binary diff attribute (2)
+ok 22 - grep revision respects binary diff attribute
+ok 23 - grep respects not-binary diff attribute
+ok 24 - setup textconv filters
+ok 25 - grep does not honor textconv
+ok 26 - grep --textconv honors textconv
+ok 27 - grep --no-textconv does not honor textconv
+ok 28 - grep --textconv blob honors textconv
 # still have 1 known breakage(s)
-# passed all remaining 19 test(s)
-1..20
+# passed all remaining 27 test(s)
+1..28
+*** t7009-filter-branch-null-sha1.sh ***
+ok 1 - setup: base commits
+ok 2 - setup: a commit with a bogus null sha1 in the tree
+ok 3 - setup: bring HEAD and index in sync
+ok 4 - filter commands are still checked
+ok 5 - removing the broken entry works
+# passed all 5 test(s)
+1..5
 *** t7010-setup.sh ***
 ok 1 - setup
 ok 2 - git add (absolute)
@@ -7714,8 +12124,8 @@
 ok 3 - update-index
 ok 4 - update-index --remove
 ok 5 - update-index --remove
-ok 6 - ls-files --delete
-ok 7 - ls-files --delete
+ok 6 - ls-files --deleted
+ok 7 - ls-files --deleted
 ok 8 - ls-files --modified
 ok 9 - ls-files --modified
 ok 10 - grep with skip-worktree file
@@ -7742,6 +12152,14 @@
 ok 11 - git-clean, dirty case
 # passed all 11 test(s)
 1..11
+*** t7030-verify-tag.sh ***
+You do not seem to have gpg installed
+ok 1 # skip create signed tags (missing GPG)
+ok 2 # skip verify and show signatures (missing GPG)
+ok 3 # skip detect fudged signature (missing GPG)
+ok 4 # skip verify signatures with --raw (missing GPG)
+# passed all 4 test(s)
+1..4
 *** t7060-wtstatus.sh ***
 ok 1 - setup
 ok 2 - A/A conflict
@@ -7753,9 +12171,76 @@
 ok 8 - git diff-index --cached shows 2 added + 1 unmerged
 ok 9 - git diff-index --cached -M shows 2 added + 1 unmerged
 ok 10 - git diff-index --cached -C shows 2 copies + 1 unmerged
-# passed all 10 test(s)
-1..10
-*** t7101-reset.sh ***
+ok 11 - status when conflicts with add and rm advice (deleted by them)
+ok 12 - prepare for conflicts
+ok 13 - status when conflicts with add and rm advice (both deleted)
+ok 14 - status when conflicts with only rm advice (both deleted)
+# passed all 14 test(s)
+1..14
+*** t7061-wtstatus-ignore.sh ***
+ok 1 - status untracked directory with --ignored
+ok 2 - same with gitignore starting with BOM
+ok 3 - status untracked directory with --ignored -u
+ok 4 - status prefixed untracked directory with --ignored
+ok 5 - status prefixed untracked sub-directory with --ignored -u
+ok 6 - status ignored directory with --ignore
+ok 7 - status ignored directory with --ignore -u
+ok 8 - status empty untracked directory with --ignore
+ok 9 - status empty untracked directory with --ignore -u
+ok 10 - status untracked directory with ignored files with --ignore
+ok 11 - status untracked directory with ignored files with --ignore -u
+ok 12 - status ignored tracked directory with --ignore
+ok 13 - status ignored tracked directory with --ignore -u
+ok 14 - status ignored tracked directory and ignored file with --ignore
+ok 15 - status ignored tracked directory and ignored file with --ignore -u
+ok 16 - status ignored tracked directory and uncommitted file with --ignore
+ok 17 - status ignored tracked directory and uncommitted file with --ignore -u
+ok 18 - status ignored tracked directory with uncommitted file in untracked subdir with --ignore
+ok 19 - status ignored tracked directory with uncommitted file in untracked subdir with --ignore -u
+ok 20 - status ignored tracked directory with uncommitted file in tracked subdir with --ignore
+ok 21 - status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u
+# passed all 21 test(s)
+1..21
+*** t7062-wtstatus-ignorecase.sh ***
+ok 1 - status with hash collisions
+# passed all 1 test(s)
+1..1
+*** t7063-status-untracked-cache.sh ***
+ok 1 - setup
+ok 2 - untracked cache is empty
+ok 3 - status first time (empty cache)
+ok 4 - untracked cache after first status
+ok 5 - status second time (fully populated cache)
+ok 6 - untracked cache after second status
+ok 7 - modify in root directory, one dir invalidation
+ok 8 - verify untracked cache dump
+ok 9 - new .gitignore invalidates recursively
+ok 10 - verify untracked cache dump
+ok 11 - new info/exclude invalidates everything
+ok 12 - verify untracked cache dump
+ok 13 - move two from tracked to untracked
+ok 14 - status after the move
+ok 15 - verify untracked cache dump
+ok 16 - move two from untracked to tracked
+ok 17 - status after the move
+ok 18 - verify untracked cache dump
+ok 19 - set up for sparse checkout testing
+ok 20 - status after commit
+ok 21 - untracked cache correct after commit
+ok 22 - set up sparse checkout
+ok 23 - create/modify files, some of which are gitignored
+ok 24 - test sparse status with untracked cache
+ok 25 - untracked cache correct after status
+ok 26 - test sparse status again with untracked cache
+ok 27 - set up for test of subdir and sparse checkouts
+ok 28 - test sparse status with untracked cache and subdir
+ok 29 - verify untracked cache dump (sparse/subdirs)
+ok 30 - test sparse status again with untracked cache and subdir
+ok 31 - move entry in subdir from untracked to cached
+ok 32 - move entry in subdir from cached to untracked
+# passed all 32 test(s)
+1..32
+*** t7101-reset-empty-subdirs.sh ***
 ok 1 - creating initial files
 ok 2 - creating second files
 ok 3 - resetting tree HEAD^
@@ -7770,32 +12255,37 @@
 1..10
 *** t7102-reset.sh ***
 ok 1 - creating initial files and commits
-ok 2 - giving a non existing revision should fail
-ok 3 - reset --soft with unmerged index should fail
-ok 4 - giving paths with options different than --mixed should fail
-ok 5 - giving unrecognized options should fail
-ok 6 - trying to do reset --soft with pending merge should fail
-ok 7 - trying to do reset --soft with pending checkout merge should fail
-ok 8 - resetting to HEAD with no changes should succeed and do nothing
-ok 9 - --soft reset only should show changes in diff --cached
-ok 10 - changing files and redo the last commit should succeed
-ok 11 - --hard reset should change the files and undo commits permanently
-ok 12 - redoing changes adding them without commit them should succeed
-ok 13 - --mixed reset to HEAD should unadd the files
-ok 14 - redoing the last two commits should succeed
-ok 15 - --hard reset to HEAD should clear a failed merge
-ok 16 - --hard reset to ORIG_HEAD should clear a fast-forward merge
-ok 17 - test --mixed <paths>
-ok 18 - test resetting the index at give paths
-ok 19 - resetting an unmodified path is a no-op
-ok 20 - --mixed refreshes the index
-ok 21 - resetting specific path that is unmerged
-ok 22 - disambiguation (1)
-ok 23 - disambiguation (2)
-ok 24 - disambiguation (3)
-ok 25 - disambiguation (4)
-# passed all 25 test(s)
-1..25
+ok 2 - reset --hard message
+ok 3 - reset --hard message (ISO8859-1 logoutputencoding)
+ok 4 - giving a non existing revision should fail
+ok 5 - reset --soft with unmerged index should fail
+ok 6 - giving paths with options different than --mixed should fail
+ok 7 - giving unrecognized options should fail
+ok 8 - trying to do reset --soft with pending merge should fail
+ok 9 - trying to do reset --soft with pending checkout merge should fail
+ok 10 - resetting to HEAD with no changes should succeed and do nothing
+ok 11 - --soft reset only should show changes in diff --cached
+ok 12 - changing files and redo the last commit should succeed
+ok 13 - --hard reset should change the files and undo commits permanently
+ok 14 - redoing changes adding them without commit them should succeed
+ok 15 - --mixed reset to HEAD should unadd the files
+ok 16 - redoing the last two commits should succeed
+ok 17 - --hard reset to HEAD should clear a failed merge
+ok 18 - --hard reset to ORIG_HEAD should clear a fast-forward merge
+ok 19 - test --mixed <paths>
+ok 20 - test resetting the index at give paths
+ok 21 - resetting an unmodified path is a no-op
+ok 22 - --mixed refreshes the index
+ok 23 - resetting specific path that is unmerged
+ok 24 - disambiguation (1)
+ok 25 - disambiguation (2)
+ok 26 - disambiguation (3)
+ok 27 - disambiguation (4)
+ok 28 - reset with paths accepts tree
+ok 29 - reset -N keeps removed files as intent-to-add
+ok 30 - reset --mixed sets up work tree
+# passed all 30 test(s)
+1..30
 *** t7103-reset-bare.sh ***
 ok 1 - setup non-bare
 ok 2 - "hard" reset requires a worktree
@@ -7812,10 +12302,10 @@
 ok 13 - "soft" reset is allowed in bare
 # passed all 13 test(s)
 1..13
-*** t7104-reset.sh ***
+*** t7104-reset-hard.sh ***
 ok 1 - setup
 ok 2 - reset --hard should restore unmerged ones
-ok 3 - reset --hard did not corrupt index nor cached-tree
+ok 3 - reset --hard did not corrupt index or cached-tree
 # passed all 3 test(s)
 1..3
 *** t7105-reset-patch.sh ***
@@ -7829,6 +12319,16 @@
 ok 8 - none of this moved HEAD
 # passed all 8 test(s)
 1..8
+*** t7106-reset-unborn-branch.sh ***
+ok 1 - setup
+ok 2 - reset
+ok 3 - reset HEAD
+ok 4 - reset $file
+ok 5 - reset -p
+ok 6 - reset --soft is a no-op
+ok 7 - reset --hard
+# passed all 7 test(s)
+1..7
 *** t7110-reset-merge.sh ***
 ok 1 - setup
 ok 2 - reset --merge is ok with changes in file it does not touch
@@ -7898,6 +12398,52 @@
 ok 42 - check: X U B B --keep XXXXX  
 # passed all 42 test(s)
 1..42
+*** t7112-reset-submodule.sh ***
+ok 1 - git reset --keep: added submodule creates empty directory
+ok 2 - git reset --keep: added submodule leaves existing empty directory alone
+ok 3 - git reset --keep: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git reset --keep: replace tracked file with submodule creates empty directory
+ok 5 - git reset --keep: replace directory with submodule
+ok 6 - git reset --keep: removed submodule leaves submodule directory and its contents in place
+ok 7 - git reset --keep: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git reset --keep: replace submodule with a directory must fail
+ok 9 - git reset --keep: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git reset --keep: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git reset --keep: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git reset --keep: modified submodule does not update submodule work tree
+ok 13 - git reset --keep: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git reset --keep: modified submodule does not update submodule work tree from invalid commit
+ok 15 - git reset --merge: added submodule creates empty directory
+ok 16 - git reset --merge: added submodule leaves existing empty directory alone
+ok 17 - git reset --merge: added submodule doesn't remove untracked unignored file with same name
+ok 18 - git reset --merge: replace tracked file with submodule creates empty directory
+ok 19 - git reset --merge: replace directory with submodule
+ok 20 - git reset --merge: removed submodule leaves submodule directory and its contents in place
+ok 21 - git reset --merge: removed submodule leaves submodule containing a .git directory alone
+ok 22 - git reset --merge: replace submodule with a directory must fail
+ok 23 - git reset --merge: replace submodule containing a .git directory with a directory must fail
+not ok 24 - git reset --merge: replace submodule with a file must fail # TODO known breakage
+not ok 25 - git reset --merge: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - git reset --merge: modified submodule does not update submodule work tree
+ok 27 - git reset --merge: modified submodule does not update submodule work tree to invalid commit
+ok 28 - git reset --merge: modified submodule does not update submodule work tree from invalid commit
+ok 29 - git reset --hard: added submodule creates empty directory
+ok 30 - git reset --hard: added submodule leaves existing empty directory alone
+ok 31 - git reset --hard: added submodule does remove untracked unignored file with same name when forced
+ok 32 - git reset --hard: replace tracked file with submodule creates empty directory
+ok 33 - git reset --hard: replace directory with submodule
+ok 34 - git reset --hard: removed submodule leaves submodule directory and its contents in place
+ok 35 - git reset --hard: removed submodule leaves submodule containing a .git directory alone
+not ok 36 - git reset --hard: replace submodule with a directory must fail # TODO known breakage
+not ok 37 - git reset --hard: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 38 - git reset --hard: replace submodule with a file must fail # TODO known breakage
+not ok 39 - git reset --hard: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 40 - git reset --hard: modified submodule does not update submodule work tree
+ok 41 - git reset --hard: modified submodule does not update submodule work tree to invalid commit
+ok 42 - git reset --hard: modified submodule does not update submodule work tree from invalid commit
+# still have 8 known breakage(s)
+# passed all remaining 34 test(s)
+1..42
 *** t7201-co.sh ***
 ok 1 - setup
 ok 2 - checkout from non-existing branch
@@ -7908,34 +12454,35 @@
 ok 7 - checkout -m with merge conflict
 ok 8 - format of merge conflict from checkout -m
 ok 9 - checkout --merge --conflict=diff3 <branch>
-ok 10 - checkout to detach HEAD (with advice declined)
-ok 11 - checkout to detach HEAD
-ok 12 - checkout to detach HEAD with branchname^
-ok 13 - checkout to detach HEAD with :/message
-ok 14 - checkout to detach HEAD with HEAD^0
-ok 15 - checkout with ambiguous tag/branch names
+ok 10 - switch to another branch while carrying a deletion
+ok 11 - checkout to detach HEAD (with advice declined)
+ok 12 - checkout to detach HEAD
+ok 13 - checkout to detach HEAD with branchname^
+ok 14 - checkout to detach HEAD with :/message
+ok 15 - checkout to detach HEAD with HEAD^0
 ok 16 - checkout with ambiguous tag/branch names
-ok 17 - switch branches while in subdirectory
-ok 18 - checkout specific path while in subdirectory
-ok 19 - checkout w/--track sets up tracking
-ok 20 - checkout w/autosetupmerge=always sets up tracking
-ok 21 - checkout w/--track from non-branch HEAD fails
-ok 22 - checkout w/--track from tag fails
-ok 23 - detach a symbolic link HEAD
-ok 24 - checkout with --track fakes a sensible -b <name>
-ok 25 - checkout with --track, but without -b, fails with too short tracked name
-ok 26 - checkout an unmerged path should fail
-ok 27 - checkout with an unmerged path can be ignored
-ok 28 - checkout unmerged stage
-ok 29 - checkout with --merge
-ok 30 - checkout with --merge, in diff3 -m style
-ok 31 - checkout --conflict=merge, overriding config
-ok 32 - checkout --conflict=diff3
-ok 33 - failing checkout -b should not break working tree
-ok 34 - switch out of non-branch
-ok 35 - custom merge driver with checkout -m
-# passed all 35 test(s)
-1..35
+ok 17 - checkout with ambiguous tag/branch names
+ok 18 - switch branches while in subdirectory
+ok 19 - checkout specific path while in subdirectory
+ok 20 - checkout w/--track sets up tracking
+ok 21 - checkout w/autosetupmerge=always sets up tracking
+ok 22 - checkout w/--track from non-branch HEAD fails
+ok 23 - checkout w/--track from tag fails
+ok 24 - detach a symbolic link HEAD
+ok 25 - checkout with --track fakes a sensible -b <name>
+ok 26 - checkout with --track, but without -b, fails with too short tracked name
+ok 27 - checkout an unmerged path should fail
+ok 28 - checkout with an unmerged path can be ignored
+ok 29 - checkout unmerged stage
+ok 30 - checkout with --merge
+ok 31 - checkout with --merge, in diff3 -m style
+ok 32 - checkout --conflict=merge, overriding config
+ok 33 - checkout --conflict=diff3
+ok 34 - failing checkout -b should not break working tree
+ok 35 - switch out of non-branch
+ok 36 - custom merge driver with checkout -m
+# passed all 36 test(s)
+1..36
 *** t7300-clean.sh ***
 ok 1 - setup
 ok 2 - git clean with skip-worktree .gitignore
@@ -7955,105 +12502,200 @@
 ok 16 - git clean -d src/ examples/
 ok 17 - git clean -x
 ok 18 - git clean -d -x
-ok 19 - git clean -X
-ok 20 - git clean -d -X
-ok 21 - clean.requireForce defaults to true
-ok 22 - clean.requireForce
-ok 23 - clean.requireForce and -n
-ok 24 - clean.requireForce and -f
-ok 25 - core.excludesfile
-ok 26 - removal failure
-ok 27 - nested git work tree
-ok 28 - force removal of nested git work tree
-ok 29 - git clean -e
-ok 30 - git clean -d with an unreadable empty directory
-# passed all 30 test(s)
-1..30
+ok 19 - git clean -d -x with ignored tracked directory
+ok 20 - git clean -X
+ok 21 - git clean -d -X
+ok 22 - git clean -d -X with ignored tracked directory
+ok 23 - clean.requireForce defaults to true
+ok 24 - clean.requireForce
+ok 25 - clean.requireForce and -n
+ok 26 - clean.requireForce and -f
+ok 27 - core.excludesfile
+ok 28 - removal failure
+ok 29 - nested git work tree
+ok 30 - should clean things that almost look like git but are not
+ok 31 - should not clean submodules
+ok 32 - should avoid cleaning possible submodules
+ok 33 - nested (empty) git should be kept
+ok 34 - nested bare repositories should be cleaned
+not ok 35 - nested (empty) bare repositories should be cleaned even when in .git # TODO known breakage
+not ok 36 - nested (non-empty) bare repositories should be cleaned even when in .git # TODO known breakage
+ok 37 - giving path in nested git work tree will remove it
+ok 38 - giving path to nested .git will not remove it
+ok 39 - giving path to nested .git/ will remove contents
+ok 40 - force removal of nested git work tree
+ok 41 - git clean -e
+ok 42 - git clean -d with an unreadable empty directory
+ok 43 - git clean -d respects pathspecs (dir is prefix of pathspec)
+ok 44 - git clean -d respects pathspecs (pathspec is prefix of dir)
+# still have 2 known breakage(s)
+# passed all remaining 42 test(s)
+1..44
+*** t7301-clean-interactive.sh ***
+ok 1 - setup
+ok 2 - git clean -i (c: clean hotkey)
+ok 3 - git clean -i (cl: clean prefix)
+ok 4 - git clean -i (quit)
+ok 5 - git clean -i (Ctrl+D)
+ok 6 - git clean -id (filter all)
+ok 7 - git clean -id (filter patterns)
+ok 8 - git clean -id (filter patterns 2)
+ok 9 - git clean -id (select - all)
+ok 10 - git clean -id (select - none)
+ok 11 - git clean -id (select - number)
+ok 12 - git clean -id (select - number 2)
+ok 13 - git clean -id (select - number 3)
+ok 14 - git clean -id (select - filenames)
+ok 15 - git clean -id (select - range)
+ok 16 - git clean -id (select - range 2)
+ok 17 - git clean -id (inverse select)
+ok 18 - git clean -id (ask)
+ok 19 - git clean -id (ask - Ctrl+D)
+ok 20 - git clean -id with prefix and path (filter)
+ok 21 - git clean -id with prefix and path (select by name)
+ok 22 - git clean -id with prefix and path (ask)
+# passed all 22 test(s)
+1..22
 *** t7400-submodule-basic.sh ***
 ok 1 - setup - initial commit
-ok 2 - setup - repository in init subdirectory
-ok 3 - setup - commit with gitlink
-ok 4 - setup - hide init subdirectory
-ok 5 - setup - repository to add submodules to
-ok 6 - submodule add
-ok 7 - submodule add to .gitignored path fails
-ok 8 - submodule add to .gitignored path with --force
-ok 9 - submodule add --branch
-ok 10 - submodule add with ./ in path
-ok 11 - submodule add with // in path
-ok 12 - submodule add with /.. in path
-ok 13 - submodule add with ./, /.. and // in path
-ok 14 - setup - add an example entry to .gitmodules
-ok 15 - status should fail for unmapped paths
-ok 16 - setup - map path in .gitmodules
-ok 17 - status should only print one line
-ok 18 - setup - fetch commit name from submodule
-ok 19 - status should initially be "missing"
-ok 20 - init should register submodule url in .git/config
-ok 21 - update should fail when path is used by a file
-ok 22 - update should fail when path is used by a nonempty directory
-ok 23 - update should work when path is an empty dir
-ok 24 - status should be "up-to-date" after update
-ok 25 - status should be "modified" after submodule commit
-ok 26 - the --cached sha1 should be rev1
-ok 27 - git diff should report the SHA1 of the new submodule commit
-ok 28 - update should checkout rev1
-ok 29 - status should be "up-to-date" after update
-ok 30 - checkout superproject with subproject already present
-ok 31 - apply submodule diff
-ok 32 - update --init
-ok 33 - do not add files from a submodule
-ok 34 - gracefully add submodule with a trailing slash
-ok 35 - ls-files gracefully handles trailing slash
-ok 36 - moving to a commit without submodule does not leave empty dir
-ok 37 - submodule <invalid-path> warns
-ok 38 - add submodules without specifying an explicit path
-ok 39 - add should fail when path is used by a file
-ok 40 - add should fail when path is used by an existing directory
-ok 41 - use superproject as upstream when path is relative and no url is set there
-ok 42 - set up for relative path tests
-ok 43 - relative path works with URL
-ok 44 - relative path works with user@host:path
-# passed all 44 test(s)
-1..44
+ok 2 - configuration parsing
+ok 3 - setup - repository in init subdirectory
+ok 4 - setup - commit with gitlink
+ok 5 - setup - hide init subdirectory
+ok 6 - setup - repository to add submodules to
+ok 7 - submodule add
+ok 8 - submodule add to .gitignored path fails
+ok 9 - submodule add to .gitignored path with --force
+ok 10 - submodule add --branch
+ok 11 - submodule add with ./ in path
+ok 12 - submodule add with /././ in path
+ok 13 - submodule add with // in path
+ok 14 - submodule add with /.. in path
+ok 15 - submodule add with ./, /.. and // in path
+ok 16 - submodule add in subdirectory
+ok 17 - submodule add in subdirectory with relative path should fail
+ok 18 - setup - add an example entry to .gitmodules
+ok 19 - status should fail for unmapped paths
+ok 20 - setup - map path in .gitmodules
+ok 21 - status should only print one line
+ok 22 - setup - fetch commit name from submodule
+ok 23 - status should initially be "missing"
+ok 24 - init should register submodule url in .git/config
+ok 25 - init should fail with unknown submodule
+ok 26 - update should fail with unknown submodule
+ok 27 - status should fail with unknown submodule
+ok 28 - sync should fail with unknown submodule
+ok 29 - update should fail when path is used by a file
+ok 30 - update should fail when path is used by a nonempty directory
+ok 31 - update should work when path is an empty dir
+ok 32 - status should be "up-to-date" after update
+ok 33 - status "up-to-date" from subdirectory
+ok 34 - status "up-to-date" from subdirectory with path
+ok 35 - status should be "modified" after submodule commit
+ok 36 - the --cached sha1 should be rev1
+ok 37 - git diff should report the SHA1 of the new submodule commit
+ok 38 - update should checkout rev1
+ok 39 - status should be "up-to-date" after update
+ok 40 - checkout superproject with subproject already present
+ok 41 - apply submodule diff
+ok 42 - update --init
+ok 43 - update --init from subdirectory
+ok 44 - do not add files from a submodule
+ok 45 - gracefully add/reset submodule with a trailing slash
+ok 46 - ls-files gracefully handles trailing slash
+ok 47 - moving to a commit without submodule does not leave empty dir
+ok 48 - submodule <invalid-subcommand> fails
+ok 49 - add submodules without specifying an explicit path
+ok 50 - add should fail when path is used by a file
+ok 51 - add should fail when path is used by an existing directory
+ok 52 - use superproject as upstream when path is relative and no url is set there
+ok 53 - set up for relative path tests
+ok 54 - ../subrepo works with URL - ssh://hostname/repo
+ok 55 - ../subrepo works with port-qualified URL - ssh://hostname:22/repo
+ok 56 - ../subrepo path works with local path - //somewhere else/repo
+ok 57 - ../subrepo works with file URL - file:///tmp/repo
+ok 58 - ../subrepo works with helper URL- helper:://hostname/repo
+ok 59 - ../subrepo works with scp-style URL - user@host:repo
+ok 60 - ../subrepo works with scp-style URL - user@host:path/to/repo
+ok 61 - ../subrepo works with relative local path - foo
+ok 62 - ../subrepo works with relative local path - foo/bar
+ok 63 - ../subrepo works with relative local path - ./foo
+ok 64 - ../subrepo works with relative local path - ./foo/bar
+ok 65 - ../subrepo works with relative local path - ../foo
+ok 66 - ../subrepo works with relative local path - ../foo/bar
+ok 67 - ../bar/a/b/c works with relative local path - ../foo/bar.git
+ok 68 - moving the superproject does not break submodules
+ok 69 - submodule add --name allows to replace a submodule with another at the same path
+ok 70 - submodule add with an existing name fails unless forced
+ok 71 - set up a second submodule
+ok 72 - submodule deinit should remove the whole submodule section from .git/config
+ok 73 - submodule deinit from subdirectory
+ok 74 - submodule deinit . deinits all initialized submodules
+ok 75 - submodule deinit deinits a submodule when its work tree is missing or empty
+ok 76 - submodule deinit fails when the submodule contains modifications unless forced
+ok 77 - submodule deinit fails when the submodule contains untracked files unless forced
+ok 78 - submodule deinit fails when the submodule HEAD does not match unless forced
+ok 79 - submodule deinit is silent when used on an uninitialized submodule
+ok 80 - submodule deinit fails when submodule has a .git directory even when forced
+ok 81 - submodule with UTF-8 name
+ok 82 - submodule add clone shallow submodule
+# passed all 82 test(s)
+1..82
 *** t7401-submodule-summary.sh ***
 ok 1 - added submodule
-ok 2 - modified submodule(forward)
-ok 3 - modified submodule(forward), --files
-ok 4 - modified submodule(backward)
-ok 5 - modified submodule(backward and forward)
-ok 6 - --summary-limit
-ok 7 - typechanged submodule(submodule->blob), --cached
-ok 8 - typechanged submodule(submodule->blob), --files
-ok 9 - typechanged submodule(submodule->blob)
-ok 10 - nonexistent commit
-ok 11 - typechanged submodule(blob->submodule)
-ok 12 - deleted submodule
-ok 13 - multiple submodules
-ok 14 - path filter
-ok 15 - given commit
-ok 16 - --for-status
-ok 17 - fail when using --files together with --cached
-ok 18 - should not fail in an empty repo
-# passed all 18 test(s)
-1..18
+ok 2 - added submodule (subdirectory)
+ok 3 - added submodule (subdirectory only)
+ok 4 - added submodule (subdirectory with explicit path)
+ok 5 - modified submodule(forward)
+ok 6 - modified submodule(forward), --files
+ok 7 - no ignore=all setting has any effect
+ok 8 - modified submodule(backward)
+ok 9 - modified submodule(backward and forward)
+ok 10 - --summary-limit
+ok 11 - typechanged submodule(submodule->blob), --cached
+ok 12 - typechanged submodule(submodule->blob), --files
+ok 13 - typechanged submodule(submodule->blob)
+ok 14 - nonexistent commit
+ok 15 - typechanged submodule(blob->submodule)
+ok 16 - deleted submodule
+ok 17 - multiple submodules
+ok 18 - path filter
+ok 19 - given commit
+ok 20 - --for-status
+ok 21 - fail when using --files together with --cached
+ok 22 - should not fail in an empty repo
+# passed all 22 test(s)
+1..22
 *** t7402-submodule-rebase.sh ***
 ok 1 - setup
 ok 2 - rebase with a dirty submodule
 ok 3 - interactive rebase with a dirty submodule
 ok 4 - rebase with dirty file and submodule fails
 ok 5 - stash with a dirty submodule
-# passed all 5 test(s)
-1..5
+ok 6 - rebasing submodule that should conflict
+# passed all 6 test(s)
+1..6
 *** t7403-submodule-sync.sh ***
 ok 1 - setup
 ok 2 - change submodule
 ok 3 - change submodule url
 ok 4 - "git submodule sync" should update submodule URLs
-ok 5 - "git submodule sync" should update known submodule URLs
-ok 6 - "git submodule sync" should not vivify uninteresting submodule
-# passed all 6 test(s)
-1..6
+ok 5 - "git submodule sync --recursive" should update all submodule URLs
+ok 6 - reset submodule URLs
+ok 7 - "git submodule sync" should update submodule URLs - subdirectory
+ok 8 - "git submodule sync --recursive" should update all submodule URLs - subdirectory
+ok 9 - "git submodule sync" should update known submodule URLs
+ok 10 - "git submodule sync" should not vivify uninteresting submodule
+ok 11 - "git submodule sync" handles origin URL of the form foo
+ok 12 - "git submodule sync" handles origin URL of the form foo/bar
+ok 13 - "git submodule sync --recursive" propagates changes in origin
+ok 14 - "git submodule sync" handles origin URL of the form ./foo
+ok 15 - "git submodule sync" handles origin URL of the form ./foo/bar
+ok 16 - "git submodule sync" handles origin URL of the form ../foo
+ok 17 - "git submodule sync" handles origin URL of the form ../foo/bar
+ok 18 - "git submodule sync" handles origin URL of the form ../foo/bar with deeply nested submodule
+# passed all 18 test(s)
+1..18
 *** t7405-submodule-merge.sh ***
 ok 1 - setup
 ok 2 - setup for merge search
@@ -8071,77 +12713,107 @@
 *** t7406-submodule-update.sh ***
 ok 1 - setup a submodule tree
 ok 2 - submodule update detaching the HEAD 
-ok 3 - submodule update does not fetch already present commits
-ok 4 - submodule update should fail due to local changes
-ok 5 - submodule update should throw away changes with --force 
-ok 6 - submodule update --rebase staying on master
-ok 7 - submodule update --merge staying on master
-ok 8 - submodule update - rebase in .git/config
-ok 9 - submodule update - checkout in .git/config but --rebase given
-ok 10 - submodule update - merge in .git/config
-ok 11 - submodule update - checkout in .git/config but --merge given
-ok 12 - submodule update - checkout in .git/config
-ok 13 - submodule init picks up rebase
-ok 14 - submodule init picks up merge
-ok 15 - submodule update --merge  - ignores --merge  for new submodules
-ok 16 - submodule update --rebase - ignores --rebase for new submodules
-ok 17 - submodule update ignores update=merge config for new submodules
-ok 18 - submodule update ignores update=rebase config for new submodules
-ok 19 - submodule init picks up update=none
-ok 20 - submodule update - update=none in .git/config
-ok 21 - submodule update - update=none in .git/config but --checkout given
-ok 22 - submodule update --init skips submodule with update=none
-ok 23 - submodule update continues after checkout error
-ok 24 - submodule update continues after recursive checkout error
-ok 25 - submodule update exit immediately in case of merge conflict
-ok 26 - submodule update exit immediately after recursive rebase error
-ok 27 - add different submodules to the same path
-ok 28 - submodule add places git-dir in superprojects git-dir
-ok 29 - submodule update places git-dir in superprojects git-dir
-ok 30 - submodule add places git-dir in superprojects git-dir recursive
-ok 31 - submodule update places git-dir in superprojects git-dir recursive
-not ok - 32 submodule add properly re-creates deeper level submodules
-#	
-#		(cd super &&
-#		 git reset --hard master &&
-#		 rm -rf deeper/ &&
-#		 git submodule add ../submodule deeper/submodule
-#		)
-#	
-# failed 1 among 32 test(s)
-1..32
-make[3]: [t7406-submodule-update.sh] Error 1 (ignored)
+ok 3 - submodule update from subdirectory
+ok 4 - submodule update does not fetch already present commits
+ok 5 - submodule update should fail due to local changes
+ok 6 - submodule update should throw away changes with --force 
+ok 7 - submodule update --force forcibly checks out submodules
+ok 8 - submodule update --remote should fetch upstream changes
+ok 9 - local config should override .gitmodules branch
+ok 10 - submodule update --rebase staying on master
+ok 11 - submodule update --merge staying on master
+ok 12 - submodule update - rebase in .git/config
+ok 13 - submodule update - checkout in .git/config but --rebase given
+ok 14 - submodule update - merge in .git/config
+ok 15 - submodule update - checkout in .git/config but --merge given
+ok 16 - submodule update - checkout in .git/config
+ok 17 - submodule update - command in .git/config
+ok 18 - submodule update - command in .git/config catches failure
+ok 19 - submodule init does not copy command into .git/config
+ok 20 - submodule init picks up rebase
+ok 21 - submodule init picks up merge
+ok 22 - submodule update --merge  - ignores --merge  for new submodules
+ok 23 - submodule update --rebase - ignores --rebase for new submodules
+ok 24 - submodule update ignores update=merge config for new submodules
+ok 25 - submodule update ignores update=rebase config for new submodules
+ok 26 - submodule init picks up update=none
+ok 27 - submodule update - update=none in .git/config
+ok 28 - submodule update - update=none in .git/config but --checkout given
+ok 29 - submodule update --init skips submodule with update=none
+ok 30 - submodule update continues after checkout error
+ok 31 - submodule update continues after recursive checkout error
+ok 32 - submodule update exit immediately in case of merge conflict
+ok 33 - submodule update exit immediately after recursive rebase error
+ok 34 - add different submodules to the same path
+ok 35 - submodule add places git-dir in superprojects git-dir
+ok 36 - submodule update places git-dir in superprojects git-dir
+ok 37 - submodule add places git-dir in superprojects git-dir recursive
+ok 38 - submodule update places git-dir in superprojects git-dir recursive
+ok 39 - submodule add properly re-creates deeper level submodules
+ok 40 - submodule update properly revives a moved submodule
+ok 41 - submodule update can handle symbolic links in pwd
+ok 42 - submodule update clone shallow submodule
+ok 43 - submodule update --recursive drops module name before recursing
+# passed all 43 test(s)
+1..43
 *** t7407-submodule-foreach.sh ***
 ok 1 - setup a submodule tree
 ok 2 - test basic "submodule foreach" usage
-ok 3 - setup nested submodules
-ok 4 - use "submodule foreach" to checkout 2nd level submodule
-ok 5 - use "foreach --recursive" to checkout all submodules
-ok 6 - test messages from "foreach --recursive"
-ok 7 - test "foreach --quiet --recursive"
-ok 8 - use "update --recursive" to checkout all submodules
-ok 9 - test "status --recursive"
-ok 10 - ensure "status --cached --recursive" preserves the --cached flag
-ok 11 - use "git clone --recursive" to checkout all submodules
-ok 12 - test "update --recursive" with a flag with spaces
-ok 13 - use "update --recursive nested1" to checkout all submodules rooted in nested1
-ok 14 - command passed to foreach retains notion of stdin
-ok 15 - command passed to foreach --recursive retains notion of stdin
-# passed all 15 test(s)
-1..15
+ok 3 - test "submodule foreach" from subdirectory
+ok 4 - setup nested submodules
+ok 5 - use "submodule foreach" to checkout 2nd level submodule
+ok 6 - use "foreach --recursive" to checkout all submodules
+ok 7 - test messages from "foreach --recursive"
+ok 8 - test "foreach --quiet --recursive"
+ok 9 - use "update --recursive" to checkout all submodules
+ok 10 - test "status --recursive"
+ok 11 - ensure "status --cached --recursive" preserves the --cached flag
+ok 12 - use "git clone --recursive" to checkout all submodules
+ok 13 - test "update --recursive" with a flag with spaces
+ok 14 - use "update --recursive nested1" to checkout all submodules rooted in nested1
+ok 15 - command passed to foreach retains notion of stdin
+ok 16 - command passed to foreach --recursive retains notion of stdin
+ok 17 - multi-argument command passed to foreach is not shell-evaluated twice
+# passed all 17 test(s)
+1..17
 *** t7408-submodule-reference.sh ***
 ok 1 - preparing first repository
 ok 2 - preparing second repository
-ok 3 - preparing supermodule
+ok 3 - preparing superproject
 ok 4 - submodule add --reference
 ok 5 - after add: existence of info/alternates
 ok 6 - that reference gets used with add
-ok 7 - cloning supermodule
+ok 7 - cloning superproject
 ok 8 - update with reference
 ok 9 - after update: existence of info/alternates
 ok 10 - that reference gets used with update
 # passed all 10 test(s)
 1..10
+*** t7409-submodule-detached-worktree.sh ***
+ok 1 - submodule on detached working tree
+ok 2 - submodule on detached working pointed by core.worktree
+# passed all 2 test(s)
+1..2
+*** t7410-submodule-checkout-to.sh ***
+ok 1 - setup: make origin
+ok 2 - setup: clone
+ok 3 - checkout main
+not ok 4 - can see submodule diffs just after checkout # TODO known breakage
+ok 5 - checkout main and initialize independed clones
+ok 6 - can see submodule diffs after independed cloning
+# still have 1 known breakage(s)
+# passed all remaining 5 test(s)
+1..6
+*** t7411-submodule-config.sh ***
+ok 1 - submodule config cache setup
+ok 2 - test parsing and lookup of submodule config by path
+ok 3 - test parsing and lookup of submodule config by name
+ok 4 - error in one submodule config lets continue
+ok 5 - reading of local configuration
+ok 6 - local error in fetchrecursesubmodule dies early
+ok 7 - error in history in fetchrecursesubmodule lets continue
+# passed all 7 test(s)
+1..7
 *** t7500-commit.sh ***
 ok 1 - a basic commit in an empty tree should succeed
 ok 2 - nonexistent template file should return error
@@ -8166,17 +12838,18 @@
 ok 21 - Commit without message is allowed with --allow-empty-message
 ok 22 - Commit without message is no-no without --allow-empty-message
 ok 23 - Commit a message with --allow-empty-message
-ok 24 - commit --fixup provides correct one-line commit message
-ok 25 - commit --squash works with -F
-ok 26 - commit --squash works with -m
-ok 27 - commit --squash works with -C
-ok 28 - commit --squash works with -c
-ok 29 - commit --squash works with -C for same commit
-ok 30 - commit --squash works with -c for same commit
-ok 31 - commit --squash works with editor
-ok 32 - invalid message options when using --fixup
-# passed all 32 test(s)
-1..32
+ok 24 - commit -C empty respects --allow-empty-message
+ok 25 - commit --fixup provides correct one-line commit message
+ok 26 - commit --squash works with -F
+ok 27 - commit --squash works with -m
+ok 28 - commit --squash works with -C
+ok 29 - commit --squash works with -c
+ok 30 - commit --squash works with -C for same commit
+ok 31 - commit --squash works with -c for same commit
+ok 32 - commit --squash works with editor
+ok 33 - invalid message options when using --fixup
+# passed all 33 test(s)
+1..33
 *** t7501-commit.sh ***
 ok 1 - initial status
 ok 2 - fail initial amend
@@ -8187,44 +12860,61 @@
 ok 7 - can use paths with --interactive
 ok 8 - using invalid commit with -C
 ok 9 - nothing to commit
-ok 10 - setup: non-initial commit
-ok 11 - commit message from non-existing file
-ok 12 - empty commit message
-ok 13 - setup: commit message from file
-ok 14 - amend commit
-ok 15 - set up editor
-ok 16 - amend without launching editor
-ok 17 - --amend --edit
-ok 18 - -m --edit
-ok 19 - -m and -F do not mix
-ok 20 - using message from other commit
-ok 21 - editing message from other commit
-ok 22 - message from stdin
-ok 23 - overriding author from command line
-ok 24 - interactive add
-ok 25 - commit --interactive doesn't change index if editor aborts
-ok 26 - editor not invoked if -F is given
-ok 27 - partial commit that involves removal (1)
-ok 28 - partial commit that involves removal (2)
-ok 29 - partial commit that involves removal (3)
-ok 30 - amend commit to fix author
-ok 31 - amend commit to fix date
-ok 32 - commit complains about bogus date
-ok 33 - sign off (1)
-ok 34 - sign off (2)
-ok 35 - signoff gap
-ok 36 - signoff gap 2
-ok 37 - multiple -m
-ok 38 - amend commit to fix author
-ok 39 - git commit <file> with dirty index
-ok 40 - same tree (single parent)
-ok 41 - same tree (single parent) --allow-empty
-ok 42 - same tree (merge and amend merge)
-ok 43 - amend using the message from another commit
-ok 44 - amend using the message from a commit named with tag
-ok 45 - amend can copy notes
-# passed all 45 test(s)
-1..45
+ok 10 - --dry-run fails with nothing to commit
+ok 11 - --short fails with nothing to commit
+ok 12 - --porcelain fails with nothing to commit
+ok 13 - --long fails with nothing to commit
+ok 14 - setup: non-initial commit
+ok 15 - --dry-run with stuff to commit returns ok
+not ok 16 - --short with stuff to commit returns ok # TODO known breakage
+not ok 17 - --porcelain with stuff to commit returns ok # TODO known breakage
+ok 18 - --long with stuff to commit returns ok
+ok 19 - commit message from non-existing file
+ok 20 - empty commit message
+ok 21 - template "emptyness" check does not kick in with -F
+ok 22 - template "emptyness" check
+ok 23 - setup: commit message from file
+ok 24 - amend commit
+ok 25 - amend --only ignores staged contents
+ok 26 - set up editor
+ok 27 - amend without launching editor
+ok 28 - --amend --edit
+ok 29 - --amend --edit of empty message
+ok 30 - -m --edit
+ok 31 - -m and -F do not mix
+ok 32 - using message from other commit
+ok 33 - editing message from other commit
+ok 34 - message from stdin
+ok 35 - overriding author from command line
+ok 36 - interactive add
+ok 37 - commit --interactive doesn't change index if editor aborts
+ok 38 - editor not invoked if -F is given
+ok 39 - partial commit that involves removal (1)
+ok 40 - partial commit that involves removal (2)
+ok 41 - partial commit that involves removal (3)
+ok 42 - amend commit to fix author
+ok 43 - amend commit to fix date
+ok 44 - commit mentions forced date in output
+ok 45 - commit complains about completely bogus dates
+ok 46 - commit --date allows approxidate
+ok 47 - sign off (1)
+ok 48 - sign off (2)
+ok 49 - signoff gap
+ok 50 - signoff gap 2
+ok 51 - multiple -m
+ok 52 - amend commit to fix author
+ok 53 - git commit <file> with dirty index
+ok 54 - same tree (single parent)
+ok 55 - same tree (single parent) --allow-empty
+ok 56 - same tree (merge and amend merge)
+ok 57 - amend using the message from another commit
+ok 58 - amend using the message from a commit named with tag
+ok 59 - amend can copy notes
+ok 60 - commit a file whose name is a dash
+ok 61 - --only works on to-be-born branch
+# still have 2 known breakage(s)
+# passed all remaining 59 test(s)
+1..61
 *** t7502-commit.sh ***
 ok 1 - output summary format
 ok 2 - output summary format: root-commit
@@ -8238,41 +12928,61 @@
 ok 10 - multiple -m
 ok 11 - verbose
 ok 12 - verbose respects diff config
-ok 13 - cleanup commit messages (verbatim,-t)
-ok 14 - cleanup commit messages (verbatim,-F)
-ok 15 - cleanup commit messages (verbatim,-m)
-ok 16 - cleanup commit messages (whitespace,-F)
-ok 17 - cleanup commit messages (strip,-F)
-ok 18 - cleanup commit messages (strip,-F,-e)
-ok 19 - cleanup commit messages (strip,-F,-e): output
-ok 20 - author different from committer
-ok 21 - committer is automatic
-ok 22 - do not fire editor in the presence of conflicts
-ok 23 - a SIGTERM should break locks
-ok 24 - Hand committing of a redundant merge removes dups
-ok 25 - A single-liner subject with a token plus colon is not a footer
-ok 26 - commit
-ok 27 - commit
-ok 28 - commit --status
-ok 29 - commit --no-status
-ok 30 - commit with commit.status = yes
-ok 31 - commit with commit.status = no
-ok 32 - commit --status with commit.status = yes
-ok 33 - commit --no-status with commit.status = yes
-ok 34 - commit --status with commit.status = no
-ok 35 - commit --no-status with commit.status = no
-ok 36 - commit
-ok 37 - commit
-ok 38 - commit --status
-ok 39 - commit --no-status
-ok 40 - commit with commit.status = yes
-ok 41 - commit with commit.status = no
-ok 42 - commit --status with commit.status = yes
-ok 43 - commit --no-status with commit.status = yes
-ok 44 - commit --status with commit.status = no
-ok 45 - commit --no-status with commit.status = no
-# passed all 45 test(s)
-1..45
+ok 13 - prepare file with comment line and trailing newlines
+ok 14 - cleanup commit messages (verbatim option,-t)
+ok 15 - cleanup commit messages (verbatim option,-F)
+ok 16 - cleanup commit messages (verbatim option,-m)
+ok 17 - cleanup commit messages (whitespace option,-F)
+ok 18 - cleanup commit messages (scissors option,-F,-e)
+ok 19 - cleanup commit messages (scissors option,-F,-e, scissors on first line)
+ok 20 - cleanup commit messages (strip option,-F)
+ok 21 - cleanup commit messages (strip option,-F,-e)
+ok 22 - cleanup commit messages (strip option,-F,-e): output
+ok 23 - cleanup commit message (fail on invalid cleanup mode option)
+ok 24 - cleanup commit message (fail on invalid cleanup mode configuration)
+ok 25 - cleanup commit message (no config and no option uses default)
+ok 26 - cleanup commit message (option overrides default)
+ok 27 - cleanup commit message (config overrides default)
+ok 28 - cleanup commit message (option overrides config)
+ok 29 - cleanup commit message (default, -m)
+ok 30 - cleanup commit message (whitespace option, -m)
+ok 31 - cleanup commit message (whitespace config, -m)
+ok 32 - message shows author when it is not equal to committer
+ok 33 - message shows date when it is explicitly set
+ok 34 # skip message shows committer when it is automatic (missing AUTOIDENT)
+ok 35 - do not fire editor when committer is bogus
+ok 36 - do not fire editor if -m <msg> was given
+ok 37 - do not fire editor if -m "" was given
+ok 38 - do not fire editor in the presence of conflicts
+ok 39 - a SIGTERM should break locks
+ok 40 - Hand committing of a redundant merge removes dups
+ok 41 - A single-liner subject with a token plus colon is not a footer
+ok 42 - commit -s places sob on third line after two empty lines
+ok 43 - commit
+ok 44 - commit
+ok 45 - commit --status
+ok 46 - commit --no-status
+ok 47 - commit with commit.status = yes
+ok 48 - commit with commit.status = no
+ok 49 - commit --status with commit.status = yes
+ok 50 - commit --no-status with commit.status = yes
+ok 51 - commit --status with commit.status = no
+ok 52 - commit --no-status with commit.status = no
+ok 53 - commit
+ok 54 - commit
+ok 55 - commit --status
+ok 56 - commit --no-status
+ok 57 - commit with commit.status = yes
+ok 58 - commit with commit.status = no
+ok 59 - commit --status with commit.status = yes
+ok 60 - commit --no-status with commit.status = yes
+ok 61 - commit --status with commit.status = no
+ok 62 - commit --no-status with commit.status = no
+ok 63 - commit --status with custom comment character
+ok 64 - switch core.commentchar
+ok 65 - switch core.commentchar but out of options
+# passed all 65 test(s)
+1..65
 *** t7503-pre-commit-hook.sh ***
 ok 1 - with no hook
 ok 2 - --no-verify with no hook
@@ -8284,8 +12994,9 @@
 ok 8 - --no-verify with non-executable hook
 ok 9 - with hook requiring GIT_PREFIX
 ok 10 - with failing hook requiring GIT_PREFIX
-# passed all 10 test(s)
-1..10
+ok 11 - check the author in hook
+# passed all 11 test(s)
+1..11
 *** t7504-commit-msg-hook.sh ***
 ok 1 - with no hook
 ok 2 - with no hook (editor)
@@ -8321,10 +13032,12 @@
 ok 9 - with hook (--amend)
 ok 10 - with hook (-c)
 ok 11 - with hook (merge)
-ok 12 - with failing hook
-ok 13 - with failing hook (--no-verify)
-# passed all 13 test(s)
-1..13
+ok 12 - with hook and editor (merge)
+ok 13 - with failing hook
+ok 14 - with failing hook (--no-verify)
+ok 15 - with failing hook (merge)
+# passed all 15 test(s)
+1..15
 *** t7506-status-submodule.sh ***
 ok 1 - setup
 ok 2 - status clean
@@ -8363,88 +13076,115 @@
 ok 4 - verbose diff is stripped out
 ok 5 - verbose diff is stripped out (mnemonicprefix)
 ok 6 - diff in message is retained without -v
-not ok 7 - diff in message is retained with -v # TODO known breakage
-# still have 1 known breakage(s)
-# passed all remaining 6 test(s)
-1..7
+ok 7 - diff in message is retained with -v
+ok 8 - submodule log is stripped out too with -v
+ok 9 - verbose diff is stripped out with set core.commentChar
+# passed all 9 test(s)
+1..9
 *** t7508-status.sh ***
 ok 1 - status -h in broken repository
 ok 2 - commit -h in broken repository
 ok 3 - setup
 ok 4 - status (1)
-ok 5 - status (2)
-ok 6 - status (advice.statusHints false)
-ok 7 - status -s
-ok 8 - status with gitignore
-ok 9 - status with gitignore (nothing untracked)
-ok 10 - status -s -b
-ok 11 - setup dir3
-ok 12 - status -uno
-ok 13 - status (status.showUntrackedFiles no)
-ok 14 - status -uno (advice.statusHints false)
-ok 15 - status -s -uno
-ok 16 - status -s (status.showUntrackedFiles no)
-ok 17 - status -unormal
-ok 18 - status (status.showUntrackedFiles normal)
-ok 19 - status -s -unormal
-ok 20 - status -s (status.showUntrackedFiles normal)
-ok 21 - status -uall
-ok 22 - status (status.showUntrackedFiles all)
-ok 23 - teardown dir3
-ok 24 - status -s -uall
-ok 25 - status -s (status.showUntrackedFiles all)
-ok 26 - status with relative paths
-ok 27 - status -s with relative paths
-ok 28 - status --porcelain ignores relative paths setting
-ok 29 - setup unique colors
-ok 30 - status with color.ui
-ok 31 - status with color.status
-ok 32 - status -s with color.ui
-ok 33 - status -s with color.status
-ok 34 - status -s -b with color.status
-ok 35 - status --porcelain ignores color.ui
-ok 36 - status --porcelain ignores color.status
-ok 37 - status --porcelain ignores -b
-ok 38 - status without relative paths
-ok 39 - status -s without relative paths
-ok 40 - dry-run of partial commit excluding new file in index
-ok 41 - status refreshes the index
-ok 42 - setup status submodule summary
-ok 43 - status submodule summary is disabled by default
-ok 44 - status --untracked-files=all does not show submodule
-ok 45 - status -s submodule summary is disabled by default
-ok 46 - status -s --untracked-files=all does not show submodule
-ok 47 - status submodule summary
-ok 48 - status -s submodule summary
-ok 49 - status submodule summary (clean submodule): commit
-ok 50 - status -s submodule summary (clean submodule)
-ok 51 - status -z implies porcelain
-ok 52 - commit --dry-run submodule summary (--amend)
-ok 53 - status succeeds in a read-only repository
-ok 54 - --ignore-submodules=untracked suppresses submodules with untracked content
-ok 55 - .gitmodules ignore=untracked suppresses submodules with untracked content
-ok 56 - .git/config ignore=untracked suppresses submodules with untracked content
-ok 57 - --ignore-submodules=dirty suppresses submodules with untracked content
-ok 58 - .gitmodules ignore=dirty suppresses submodules with untracked content
-ok 59 - .git/config ignore=dirty suppresses submodules with untracked content
-ok 60 - --ignore-submodules=dirty suppresses submodules with modified content
-ok 61 - .gitmodules ignore=dirty suppresses submodules with modified content
-ok 62 - .git/config ignore=dirty suppresses submodules with modified content
-ok 63 - --ignore-submodules=untracked doesn't suppress submodules with modified content
-ok 64 - .gitmodules ignore=untracked doesn't suppress submodules with modified content
-ok 65 - .git/config ignore=untracked doesn't suppress submodules with modified content
-ok 66 - --ignore-submodules=untracked doesn't suppress submodule summary
-ok 67 - .gitmodules ignore=untracked doesn't suppress submodule summary
-ok 68 - .git/config ignore=untracked doesn't suppress submodule summary
-ok 69 - --ignore-submodules=dirty doesn't suppress submodule summary
-ok 70 - .gitmodules ignore=dirty doesn't suppress submodule summary
-ok 71 - .git/config ignore=dirty doesn't suppress submodule summary
-ok 72 - --ignore-submodules=all suppresses submodule summary
-not ok 73 - .gitmodules ignore=all suppresses submodule summary # TODO known breakage
-not ok 74 - .git/config ignore=all suppresses submodule summary # TODO known breakage
-# still have 2 known breakage(s)
-# passed all remaining 72 test(s)
-1..74
+ok 5 - status --column
+ok 6 - status --column status.displayCommentPrefix=false
+ok 7 - status with status.displayCommentPrefix=true
+ok 8 - status with status.displayCommentPrefix=false
+ok 9 - status -v
+ok 10 - status -v -v
+ok 11 - setup fake editor
+ok 12 - commit ignores status.displayCommentPrefix=false in COMMIT_EDITMSG
+ok 13 - status (advice.statusHints false)
+ok 14 - status -s
+ok 15 - status with gitignore
+ok 16 - status with gitignore (nothing untracked)
+ok 17 - status -s -b
+ok 18 - status -s -z -b
+ok 19 - setup dir3
+ok 20 - status -uno
+ok 21 - status (status.showUntrackedFiles no)
+ok 22 - status -uno (advice.statusHints false)
+ok 23 - status -s -uno
+ok 24 - status -s (status.showUntrackedFiles no)
+ok 25 - status -unormal
+ok 26 - status (status.showUntrackedFiles normal)
+ok 27 - status -s -unormal
+ok 28 - status -s (status.showUntrackedFiles normal)
+ok 29 - status -uall
+ok 30 - status (status.showUntrackedFiles all)
+ok 31 - teardown dir3
+ok 32 - status -s -uall
+ok 33 - status -s (status.showUntrackedFiles all)
+ok 34 - status with relative paths
+ok 35 - status -s with relative paths
+ok 36 - status --porcelain ignores relative paths setting
+ok 37 - setup unique colors
+ok 38 - status with color.ui
+ok 39 - status with color.status
+ok 40 - status -s with color.ui
+ok 41 - status -s with color.status
+ok 42 - status -s -b with color.status
+ok 43 - status --porcelain ignores color.ui
+ok 44 - status --porcelain ignores color.status
+ok 45 - status --porcelain respects -b
+ok 46 - status without relative paths
+ok 47 - status -s without relative paths
+ok 48 - dry-run of partial commit excluding new file in index
+ok 49 - status refreshes the index
+ok 50 - setup status submodule summary
+ok 51 - status submodule summary is disabled by default
+ok 52 - status --untracked-files=all does not show submodule
+ok 53 - status -s submodule summary is disabled by default
+ok 54 - status -s --untracked-files=all does not show submodule
+ok 55 - status submodule summary
+ok 56 - status submodule summary with status.displayCommentPrefix=false
+ok 57 - commit with submodule summary ignores status.displayCommentPrefix
+ok 58 - status -s submodule summary
+ok 59 - status submodule summary (clean submodule): commit
+ok 60 - status -s submodule summary (clean submodule)
+ok 61 - status -z implies porcelain
+ok 62 - commit --dry-run submodule summary (--amend)
+ok 63 - status succeeds in a read-only repository
+ok 64 - --ignore-submodules=untracked suppresses submodules with untracked content
+ok 65 - .gitmodules ignore=untracked suppresses submodules with untracked content
+ok 66 - .git/config ignore=untracked suppresses submodules with untracked content
+ok 67 - --ignore-submodules=dirty suppresses submodules with untracked content
+ok 68 - .gitmodules ignore=dirty suppresses submodules with untracked content
+ok 69 - .git/config ignore=dirty suppresses submodules with untracked content
+ok 70 - --ignore-submodules=dirty suppresses submodules with modified content
+ok 71 - .gitmodules ignore=dirty suppresses submodules with modified content
+ok 72 - .git/config ignore=dirty suppresses submodules with modified content
+ok 73 - --ignore-submodules=untracked doesn't suppress submodules with modified content
+ok 74 - .gitmodules ignore=untracked doesn't suppress submodules with modified content
+ok 75 - .git/config ignore=untracked doesn't suppress submodules with modified content
+ok 76 - --ignore-submodules=untracked doesn't suppress submodule summary
+ok 77 - .gitmodules ignore=untracked doesn't suppress submodule summary
+ok 78 - .git/config ignore=untracked doesn't suppress submodule summary
+ok 79 - --ignore-submodules=dirty doesn't suppress submodule summary
+ok 80 - .gitmodules ignore=dirty doesn't suppress submodule summary
+ok 81 - .git/config ignore=dirty doesn't suppress submodule summary
+ok 82 - status (core.commentchar with submodule summary)
+ok 83 - status (core.commentchar with two chars with submodule summary)
+ok 84 - --ignore-submodules=all suppresses submodule summary
+ok 85 - .gitmodules ignore=all suppresses unstaged submodule summary
+ok 86 - .git/config ignore=all suppresses unstaged submodule summary
+ok 87 - setup of test environment
+ok 88 - "status.short=true" same as "-s"
+ok 89 - "status.short=true" weaker than "--no-short"
+ok 90 - "status.short=false" same as "--no-short"
+ok 91 - "status.short=false" weaker than "-s"
+ok 92 - "status.branch=true" same as "-b"
+ok 93 - "status.branch=true" different from "--no-branch"
+ok 94 - "status.branch=true" weaker than "--no-branch"
+ok 95 - "status.branch=true" weaker than "--porcelain"
+ok 96 - "status.branch=false" same as "--no-branch"
+ok 97 - "status.branch=false" weaker than "-b"
+ok 98 - Restore default test environment
+ok 99 - git commit will commit a staged but ignored submodule
+ok 100 - git commit --dry-run will show a staged but ignored submodule
+ok 101 - git commit -m will commit a staged but ignored submodule
+# passed all 101 test(s)
+1..101
 *** t7509-commit.sh ***
 ok 1 - -C option copies authorship and message
 ok 2 - -C option copies only the message with --reset-author
@@ -8463,12 +13203,19 @@
 *** t7510-signed-commit.sh ***
 You do not seem to have gpg installed
 ok 1 # skip create signed commits (missing GPG)
-ok 2 # skip show signatures (missing GPG)
-ok 3 # skip detect fudged signature (missing GPG)
-ok 4 # skip detect fudged signature with NUL (missing GPG)
-ok 5 # skip amending already signed commit (missing GPG)
-# passed all 5 test(s)
-1..5
+ok 2 # skip verify and show signatures (missing GPG)
+ok 3 # skip verify-commit exits success on untrusted signature (missing GPG)
+ok 4 # skip verify signatures with --raw (missing GPG)
+ok 5 # skip show signed commit with signature (missing GPG)
+ok 6 # skip detect fudged signature (missing GPG)
+ok 7 # skip detect fudged signature with NUL (missing GPG)
+ok 8 # skip amending already signed commit (missing GPG)
+ok 9 # skip show good signature with custom format (missing GPG)
+ok 10 # skip show bad signature with custom format (missing GPG)
+ok 11 # skip show unknown signature with custom format (missing GPG)
+ok 12 # skip show lack of signature with custom format (missing GPG)
+# passed all 12 test(s)
+1..12
 *** t7511-status-index.sh ***
 ok 1 - status, filename length 1
 ok 2 - status, filename length 2
@@ -8496,6 +13243,121 @@
 ok 24 - status, filename length 24
 # passed all 24 test(s)
 1..24
+*** t7512-status-help.sh ***
+ok 1 - prepare for conflicts
+ok 2 - status when conflicts unresolved
+ok 3 - status when conflicts resolved before commit
+ok 4 - prepare for rebase conflicts
+ok 5 - status when rebase in progress before resolving conflicts
+ok 6 - status when rebase in progress before rebase --continue
+ok 7 - prepare for rebase_i_conflicts
+ok 8 - status during rebase -i when conflicts unresolved
+ok 9 - status during rebase -i after resolving conflicts
+ok 10 - status when rebasing -i in edit mode
+ok 11 - status when splitting a commit
+ok 12 - status after editing the last commit with --amend during a rebase -i
+ok 13 - prepare for several edits
+ok 14 - status: (continue first edit) second edit
+ok 15 - status: (continue first edit) second edit and split
+ok 16 - status: (continue first edit) second edit and amend
+ok 17 - status: (amend first edit) second edit
+ok 18 - status: (amend first edit) second edit and split
+ok 19 - status: (amend first edit) second edit and amend
+ok 20 - status: (split first edit) second edit
+ok 21 - status: (split first edit) second edit and split
+ok 22 - status: (split first edit) second edit and amend
+ok 23 - prepare am_session
+ok 24 - status in an am session: file already exists
+ok 25 - status in an am session: file does not exist
+ok 26 - status in an am session: empty patch
+ok 27 - status when bisecting
+ok 28 - status when rebase conflicts with statushints disabled
+ok 29 - prepare for cherry-pick conflicts
+ok 30 - status when cherry-picking before resolving conflicts
+ok 31 - status when cherry-picking after resolving conflicts
+ok 32 - status showing detached at and from a tag
+ok 33 - status while reverting commit (conflicts)
+ok 34 - status while reverting commit (conflicts resolved)
+ok 35 - status after reverting commit
+ok 36 - prepare for different number of commits rebased
+ok 37 - status: one command done nothing remaining
+ok 38 - status: two commands done with some white lines in done file
+ok 39 - status: two remaining commands with some white lines in todo file
+# passed all 39 test(s)
+1..39
+*** t7513-interpret-trailers.sh ***
+ok 1 - setup
+ok 2 - without config
+ok 3 - without config in another order
+ok 4 - --trim-empty without config
+ok 5 - with config option on the command line
+ok 6 - with only a title in the message
+ok 7 - with multiline title in the message
+ok 8 - with config setup
+ok 9 - with config setup and ":=" as separators
+ok 10 - with config setup and "%" as separators
+ok 11 - with "%" as separators and a message with trailers
+ok 12 - with config setup and ":=#" as separators
+ok 13 - with commit basic message
+ok 14 - with basic patch
+ok 15 - with commit complex message as argument
+ok 16 - with 2 files arguments
+ok 17 - with message that has comments
+ok 18 - with message that has an old style conflict block
+ok 19 - with commit complex message and trailer args
+ok 20 - with complex patch, args and --trim-empty
+ok 21 - using "where = before"
+ok 22 - using "where = after"
+ok 23 - using "where = end"
+ok 24 - using "where = start"
+ok 25 - using "where = before" for a token in the middle of the message
+ok 26 - using "where = before" and --trim-empty
+ok 27 - the default is "ifExists = addIfDifferentNeighbor"
+ok 28 - default "ifExists" is now "addIfDifferent"
+ok 29 - using "ifExists = addIfDifferent" with "where = end"
+ok 30 - using "ifExists = addIfDifferent" with "where = before"
+ok 31 - using "ifExists = addIfDifferentNeighbor" with "where = end"
+ok 32 - using "ifExists = addIfDifferentNeighbor"  with "where = after"
+ok 33 - using "ifExists = addIfDifferentNeighbor" and --trim-empty
+ok 34 - using "ifExists = add" with "where = end"
+ok 35 - using "ifExists = add" with "where = after"
+ok 36 - using "ifExists = replace"
+ok 37 - using "ifExists = replace" with "where = after"
+ok 38 - using "ifExists = doNothing"
+ok 39 - the default is "ifMissing = add"
+ok 40 - when default "ifMissing" is "doNothing"
+ok 41 - using "ifMissing = add" with "where = end"
+ok 42 - using "ifMissing = add" with "where = before"
+ok 43 - using "ifMissing = doNothing"
+ok 44 - default "where" is now "after"
+ok 45 - with simple command
+ok 46 - with command using commiter information
+ok 47 - with command using author information
+ok 48 - setup a commit
+ok 49 - with command using $ARG
+ok 50 - with failing command using $ARG
+ok 51 - with empty tokens
+ok 52 - with command but no key
+ok 53 - with no command and no key
+# passed all 53 test(s)
+1..53
+*** t7514-commit-patch.sh ***
+ok 1 - setup (initial)
+ok 2 - edit hunk "commit -p -m message"
+ok 3 - edit hunk "commit --dry-run -p -m message"
+# passed all 3 test(s)
+1..3
+*** t7515-status-symlinks.sh ***
+ok 1 - setup
+ok 2 - symlink to a directory
+ok 3 - symlink replacing a directory
+# passed all 3 test(s)
+1..3
+*** t7516-commit-races.sh ***
+ok 1 - race to create orphan commit
+ok 2 - race to create non-orphan commit
+# passed all 2 test(s)
+1..2
 *** t7600-merge.sh ***
 You do not seem to have gpg installed
 ok 1 - setup
@@ -8515,7 +13377,7 @@
 ok 15 - merge c0 with c1 (squash)
 ok 16 - merge c0 with c1 (squash, ff-only)
 ok 17 - merge c1 with c2 (squash)
-ok 18 - unsuccesful merge of c1 with c2 (squash, ff-only)
+ok 18 - unsuccessful merge of c1 with c2 (squash, ff-only)
 ok 19 - merge c1 with c2 and c3 (squash)
 ok 20 - merge c1 with c2 (no-commit in config)
 ok 21 - merge c1 with c2 (log in config)
@@ -8531,55 +13393,65 @@
 ok 31 - combine branch.master.mergeoptions with merge.ff
 ok 32 - tolerate unknown values for merge.ff
 ok 33 - combining --squash and --no-ff is refused
-ok 34 - combining --ff-only and --no-ff is refused
-ok 35 - merge c0 with c1 (ff overrides no-ff)
-ok 36 - merge log message
-ok 37 - merge c1 with c0, c2, c0, and c1
+ok 34 - option --ff-only overwrites --no-ff
+ok 35 - option --no-ff overrides merge.ff=only config
+ok 36 - merge c0 with c1 (ff overrides no-ff)
+ok 37 - merge log message
 ok 38 - merge c1 with c0, c2, c0, and c1
-ok 39 - merge c1 with c1 and c2
-ok 40 - merge fast-forward in a dirty tree
-ok 41 - in-index merge
-ok 42 - refresh the index before merging
-ok 43 - merge early part of c2
-ok 44 - merge --no-ff --no-commit && commit
-ok 45 - amending no-ff merge commit
-ok 46 - merge --no-ff --edit
-ok 47 # skip merge --ff-only tag (missing GPG)
-ok 48 # skip merge --no-edit tag should skip editor (missing GPG)
-# passed all 48 test(s)
-1..48
+ok 39 - merge c1 with c0, c2, c0, and c1
+ok 40 - merge c1 with c1 and c2
+ok 41 - merge fast-forward in a dirty tree
+ok 42 - in-index merge
+ok 43 - refresh the index before merging
+ok 44 - merge early part of c2
+ok 45 - merge --no-ff --no-commit && commit
+ok 46 - amending no-ff merge commit
+ok 47 - merge --no-ff --edit
+ok 48 # skip merge --ff-only tag (missing GPG)
+ok 49 # skip merge --no-edit tag should skip editor (missing GPG)
+# passed all 49 test(s)
+1..49
 *** t7601-merge-pull-config.sh ***
 ok 1 - setup
 ok 2 - merge c1 with c2
-ok 3 - merge c1 with c2 (ours in pull.twohead)
-ok 4 - merge c1 with c2 and c3 (recursive in pull.octopus)
-ok 5 - merge c1 with c2 and c3 (recursive and octopus in pull.octopus)
-ok 6 - setup conflicted merge
-ok 7 - merge picks up the best result
-ok 8 - merge picks up the best result (from config)
-ok 9 - merge errors out on invalid strategy
-ok 10 - merge errors out on invalid strategy
-# passed all 10 test(s)
-1..10
+ok 3 - fast-forward pull succeeds with "true" in pull.ff
+ok 4 - pull.ff=true overrides merge.ff=false
+ok 5 - fast-forward pull creates merge with "false" in pull.ff
+ok 6 - pull prevents non-fast-forward with "only" in pull.ff
+ok 7 - merge c1 with c2 (ours in pull.twohead)
+ok 8 - merge c1 with c2 and c3 (recursive in pull.octopus)
+ok 9 - merge c1 with c2 and c3 (recursive and octopus in pull.octopus)
+ok 10 - setup conflicted merge
+ok 11 - merge picks up the best result
+ok 12 - merge picks up the best result (from config)
+ok 13 - merge errors out on invalid strategy
+ok 14 - merge errors out on invalid strategy
+# passed all 14 test(s)
+1..14
 *** t7602-merge-octopus-many.sh ***
 ok 1 - setup
 ok 2 - merge c1 with c2, c3, c4, ... c29
 ok 3 - merge output uses pretty names
-ok 4 - merge up-to-date output uses pretty names
+ok 4 - merge reduces irrelevant remote heads
 ok 5 - merge fast-forward output uses pretty names
 # passed all 5 test(s)
 1..5
 *** t7603-merge-reduce-heads.sh ***
 ok 1 - setup
 ok 2 - merge c1 with c2, c3, c4, c5
-ok 3 - setup
-ok 4 - merge E and I
-ok 5 - verify merge result
-ok 6 - add conflicts
-ok 7 - merge E2 and I2, causing a conflict and resolve it
-ok 8 - verify merge result
-# passed all 8 test(s)
-1..8
+ok 3 - pull c2, c3, c4, c5 into c1
+ok 4 - setup
+ok 5 - merge E and I
+ok 6 - verify merge result
+ok 7 - add conflicts
+ok 8 - merge E2 and I2, causing a conflict and resolve it
+ok 9 - verify merge result
+ok 10 - fast-forward to redundant refs
+ok 11 - verify merge result
+ok 12 - merge up-to-date redundant refs
+ok 13 - verify merge result
+# passed all 13 test(s)
+1..13
 *** t7604-merge-custom-message.sh ***
 ok 1 - setup
 ok 2 - merge c2 with a custom message
@@ -8608,17 +13480,19 @@
 ok 6 - will not overwrite removed file
 ok 7 - will not overwrite re-added file
 ok 8 - will not overwrite removed file with staged changes
-ok 9 - will not overwrite untracked subtree
-ok 10 - will not overwrite untracked file in leading path
-ok 11 - will not overwrite untracked symlink in leading path
-ok 12 - will not be confused by symlink in leading path
-ok 13 - will not overwrite untracked file on unborn branch
-ok 14 - will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.
-ok 15 - failed merge leaves unborn branch in the womb
-ok 16 - set up unborn branch and content
-ok 17 - will not clobber WT/index when merging into unborn
-# passed all 17 test(s)
-1..17
+not ok 9 - will not overwrite unstaged changes in renamed file # TODO known breakage
+ok 10 - will not overwrite untracked subtree
+ok 11 - will not overwrite untracked file in leading path
+ok 12 - will not overwrite untracked symlink in leading path
+ok 13 - will not be confused by symlink in leading path
+ok 14 - will not overwrite untracked file on unborn branch
+ok 15 - will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.
+ok 16 - failed merge leaves unborn branch in the womb
+ok 17 - set up unborn branch and content
+ok 18 - will not clobber WT/index when merging into unborn
+# still have 1 known breakage(s)
+# passed all remaining 17 test(s)
+1..18
 *** t7608-merge-messages.sh ***
 ok 1 - merge local branch
 ok 2 - merge octopus branches
@@ -8645,14 +13519,18 @@
 ok 6 - mergetool skips autoresolved
 ok 7 - mergetool merges all from subdir
 ok 8 - mergetool skips resolved paths when rerere is active
-ok 9 - mergetool takes partial path
-ok 10 - deleted vs modified submodule
-ok 11 - file vs modified submodule
-ok 12 - submodule in subdirectory
-ok 13 - directory vs modified submodule
-ok 14 - file with no base
-# passed all 14 test(s)
-1..14
+ok 9 - conflicted stash sets up rerere
+ok 10 - mergetool takes partial path
+ok 11 - deleted vs modified submodule
+ok 12 - file vs modified submodule
+ok 13 - submodule in subdirectory
+ok 14 - directory vs modified submodule
+ok 15 - file with no base
+ok 16 - custom commands override built-ins
+ok 17 - filenames seen by tools start with ./
+ok 18 - temporary filenames are used with mergetool.writeToTemp
+# passed all 18 test(s)
+1..18
 *** t7611-merge-abort.sh ***
 ok 1 - setup
 ok 2 - fails without MERGE_HEAD (unstarted merge)
@@ -8682,51 +13560,161 @@
 ok 26 - Abort merge with pre- and post-merge index changes
 # passed all 26 test(s)
 1..26
+*** t7612-merge-verify-signatures.sh ***
+You do not seem to have gpg installed
+ok 1 # skip create signed commits (missing GPG)
+ok 2 # skip merge unsigned commit with verification (missing GPG)
+ok 3 # skip merge commit with bad signature with verification (missing GPG)
+ok 4 # skip merge commit with untrusted signature with verification (missing GPG)
+ok 5 # skip merge signed commit with verification (missing GPG)
+ok 6 # skip merge commit with bad signature without verification (missing GPG)
+# passed all 6 test(s)
+1..6
+*** t7613-merge-submodule.sh ***
+ok 1 - git merge: added submodule creates empty directory
+ok 2 - git merge: added submodule leaves existing empty directory alone
+ok 3 - git merge: added submodule doesn't remove untracked unignored file with same name
+ok 4 - git merge: replace tracked file with submodule creates empty directory
+ok 5 - git merge: replace directory with submodule
+ok 6 - git merge: removed submodule leaves submodule directory and its contents in place
+ok 7 - git merge: removed submodule leaves submodule containing a .git directory alone
+ok 8 - git merge: replace submodule with a directory must fail
+ok 9 - git merge: replace submodule containing a .git directory with a directory must fail
+not ok 10 - git merge: replace submodule with a file must fail # TODO known breakage
+not ok 11 - git merge: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 12 - git merge: modified submodule does not update submodule work tree
+ok 13 - git merge: modified submodule does not update submodule work tree to invalid commit
+ok 14 - git merge: modified submodule does not update submodule work tree from invalid commit
+ok 15 - git merge --ff: added submodule creates empty directory
+ok 16 - git merge --ff: added submodule leaves existing empty directory alone
+ok 17 - git merge --ff: added submodule doesn't remove untracked unignored file with same name
+ok 18 - git merge --ff: replace tracked file with submodule creates empty directory
+ok 19 - git merge --ff: replace directory with submodule
+ok 20 - git merge --ff: removed submodule leaves submodule directory and its contents in place
+ok 21 - git merge --ff: removed submodule leaves submodule containing a .git directory alone
+ok 22 - git merge --ff: replace submodule with a directory must fail
+ok 23 - git merge --ff: replace submodule containing a .git directory with a directory must fail
+not ok 24 - git merge --ff: replace submodule with a file must fail # TODO known breakage
+not ok 25 - git merge --ff: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 26 - git merge --ff: modified submodule does not update submodule work tree
+ok 27 - git merge --ff: modified submodule does not update submodule work tree to invalid commit
+ok 28 - git merge --ff: modified submodule does not update submodule work tree from invalid commit
+ok 29 - git merge --ff-only: added submodule creates empty directory
+ok 30 - git merge --ff-only: added submodule leaves existing empty directory alone
+ok 31 - git merge --ff-only: added submodule doesn't remove untracked unignored file with same name
+ok 32 - git merge --ff-only: replace tracked file with submodule creates empty directory
+ok 33 - git merge --ff-only: replace directory with submodule
+ok 34 - git merge --ff-only: removed submodule leaves submodule directory and its contents in place
+ok 35 - git merge --ff-only: removed submodule leaves submodule containing a .git directory alone
+ok 36 - git merge --ff-only: replace submodule with a directory must fail
+ok 37 - git merge --ff-only: replace submodule containing a .git directory with a directory must fail
+not ok 38 - git merge --ff-only: replace submodule with a file must fail # TODO known breakage
+not ok 39 - git merge --ff-only: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 40 - git merge --ff-only: modified submodule does not update submodule work tree
+ok 41 - git merge --ff-only: modified submodule does not update submodule work tree to invalid commit
+ok 42 - git merge --ff-only: modified submodule does not update submodule work tree from invalid commit
+ok 43 - git merge --no-ff: added submodule creates empty directory
+ok 44 - git merge --no-ff: added submodule leaves existing empty directory alone
+ok 45 - git merge --no-ff: added submodule doesn't remove untracked unignored file with same name
+ok 46 - git merge --no-ff: replace tracked file with submodule creates empty directory
+not ok 47 - git merge --no-ff: replace directory with submodule # TODO known breakage
+ok 48 - git merge --no-ff: removed submodule leaves submodule directory and its contents in place
+ok 49 - git merge --no-ff: removed submodule leaves submodule containing a .git directory alone
+not ok 50 - git merge --no-ff: replace submodule with a directory must fail # TODO known breakage
+not ok 51 - git merge --no-ff: replace submodule containing a .git directory with a directory must fail # TODO known breakage
+not ok 52 - git merge --no-ff: replace submodule with a file must fail # TODO known breakage
+not ok 53 - git merge --no-ff: replace submodule containing a .git directory with a file must fail # TODO known breakage
+ok 54 - git merge --no-ff: modified submodule does not update submodule work tree
+ok 55 - git merge --no-ff: modified submodule does not update submodule work tree to invalid commit
+ok 56 - git merge --no-ff: modified submodule does not update submodule work tree from invalid commit
+# still have 11 known breakage(s)
+# passed all remaining 45 test(s)
+1..56
 *** t7700-repack.sh ***
 ok 1 - objects in packs marked .keep are not repacked
-ok 2 - loose objects in alternate ODB are not repacked
-ok 3 - packed obs in alt ODB are repacked even when local repo is packless
-ok 4 - packed obs in alt ODB are repacked when local repo has packs
-ok 5 - packed obs in alternate ODB kept pack are repacked
-ok 6 - packed unreachable obs in alternate ODB are not loosened
-ok 7 - local packed unreachable obs that exist in alternate ODB are not loosened
-ok 8 - objects made unreachable by grafts only are kept
-# passed all 8 test(s)
-1..8
+ok 2 - writing bitmaps via command-line can duplicate .keep objects
+ok 3 - writing bitmaps via config can duplicate .keep objects
+ok 4 - loose objects in alternate ODB are not repacked
+ok 5 - packed obs in alt ODB are repacked even when local repo is packless
+ok 6 - packed obs in alt ODB are repacked when local repo has packs
+ok 7 - packed obs in alternate ODB kept pack are repacked
+ok 8 - packed unreachable obs in alternate ODB are not loosened
+ok 9 - local packed unreachable obs that exist in alternate ODB are not loosened
+ok 10 - objects made unreachable by grafts only are kept
+# passed all 10 test(s)
+1..10
 *** t7701-repack-unpack-unreachable.sh ***
 ok 1 - -A with -d option leaves unreachable objects unpacked
 ok 2 - -A without -d option leaves unreachable objects packed
 ok 3 - unpacked objects receive timestamp of pack file
-# passed all 3 test(s)
-1..3
+ok 4 - do not bother loosening old objects
+ok 5 - keep packed objects found only in index
+# passed all 5 test(s)
+1..5
+*** t7702-repack-cyclic-alternate.sh ***
+ok 1 - setup
+ok 2 - re-packing repository with itsself as alternate
+# passed all 2 test(s)
+1..2
 *** t7800-difftool.sh ***
 ok 1 - setup
 ok 2 - custom commands
-ok 3 - difftool ignores bad --tool values
-ok 4 - difftool honors --gui
-ok 5 - difftool --gui works without configured diff.guitool
-ok 6 - GIT_DIFF_TOOL variable
-ok 7 - GIT_DIFF_TOOL overrides
-ok 8 - GIT_DIFFTOOL_NO_PROMPT variable
-ok 9 - GIT_DIFFTOOL_PROMPT variable
-ok 10 - difftool.prompt config variable is false
-ok 11 - difftool merge.prompt = false
-ok 12 - difftool.prompt can overridden with -y
-ok 13 - difftool.prompt can overridden with --prompt
-ok 14 - difftool last flag wins
-ok 15 - difftool + mergetool config variables
-ok 16 - difftool.<tool>.path
-ok 17 - difftool --extcmd=cat
-ok 18 - difftool --extcmd cat
-ok 19 - difftool -x cat
-ok 20 - difftool --extcmd echo arg1
-ok 21 - difftool --extcmd cat arg1
-ok 22 - difftool --extcmd cat arg2
-ok 23 - setup with 2 files different
-ok 24 - say no to the first file
-ok 25 - say no to the second file
-# passed all 25 test(s)
-1..25
+ok 3 - custom tool commands override built-ins
+ok 4 - difftool ignores bad --tool values
+ok 5 - difftool forwards arguments to diff
+ok 6 - difftool ignores exit code
+ok 7 - difftool forwards exit code with --trust-exit-code
+ok 8 - difftool forwards exit code with --trust-exit-code for built-ins
+ok 9 - difftool honors difftool.trustExitCode = true
+ok 10 - difftool honors difftool.trustExitCode = false
+ok 11 - difftool ignores exit code with --no-trust-exit-code
+ok 12 - difftool stops on error with --trust-exit-code
+ok 13 - difftool honors --gui
+ok 14 - difftool --gui last setting wins
+ok 15 - difftool --gui works without configured diff.guitool
+ok 16 - GIT_DIFF_TOOL variable
+ok 17 - GIT_DIFF_TOOL overrides
+ok 18 - GIT_DIFFTOOL_NO_PROMPT variable
+ok 19 - GIT_DIFFTOOL_PROMPT variable
+ok 20 - difftool.prompt config variable is false
+ok 21 - difftool merge.prompt = false
+ok 22 - difftool.prompt can overridden with -y
+ok 23 - difftool.prompt can overridden with --prompt
+ok 24 - difftool last flag wins
+ok 25 - difftool + mergetool config variables
+ok 26 - difftool.<tool>.path
+ok 27 - difftool --extcmd=cat
+ok 28 - difftool --extcmd cat
+ok 29 - difftool -x cat
+ok 30 - difftool --extcmd echo arg1
+ok 31 - difftool --extcmd cat arg1
+ok 32 - difftool --extcmd cat arg2
+ok 33 - setup with 2 files different
+ok 34 - say no to the first file
+ok 35 - say no to the second file
+ok 36 - ending prompt input with EOF
+ok 37 - difftool --tool-help
+ok 38 - setup change in subdirectory
+ok 39 - difftool -d --no-symlinks
+ok 40 - difftool -d --symlinks
+ok 41 - difftool --dir-diff --no-symlinks
+ok 42 - difftool --dir-diff --symlinks
+ok 43 - difftool --dir-diff ignores --prompt --no-symlinks
+ok 44 - difftool --dir-diff ignores --prompt --symlinks
+ok 45 - difftool --dir-diff from subdirectory --no-symlinks
+ok 46 - difftool --dir-diff from subdirectory --symlinks
+ok 47 - difftool --dir-diff when worktree file is missing --no-symlinks
+ok 48 - difftool --dir-diff when worktree file is missing --symlinks
+ok 49 - difftool --dir-diff --symlink without unstaged changes
+ok 50 - difftool --dir-diff syncs worktree with unstaged change --no-symlinks
+ok 51 - difftool --dir-diff syncs worktree with unstaged change --symlinks
+ok 52 - difftool --dir-diff syncs worktree without unstaged change --no-symlinks
+ok 53 - difftool --dir-diff syncs worktree without unstaged change --symlinks
+ok 54 - difftool --no-symlinks does not overwrite working tree file 
+ok 55 - difftool --no-symlinks detects conflict 
+ok 56 - difftool properly honors gitlink and core.worktree
+# passed all 56 test(s)
+1..56
 *** t7810-grep.sh ***
 ok 1 - setup
 ok 2 - grep should not segfault with a bad input
@@ -8751,91 +13739,145 @@
 ok 21 - grep --max-depth 0 -- t . HEAD
 ok 22 - grep HEAD with grep.extendedRegexp=false
 ok 23 - grep HEAD with grep.extendedRegexp=true
-ok 24 - grep -w in working tree
-ok 25 - grep -w in working tree
-ok 26 - grep -w in working tree
-ok 27 - grep -w in working tree (w)
-ok 28 - grep -w in working tree (x)
-ok 29 - grep -w in working tree (y-1)
-ok 30 - grep -w in working tree (y-2)
-ok 31 - grep -w in working tree (z)
-ok 32 - grep in working tree (t-1)
-ok 33 - grep in working tree (t-2)
-ok 34 - grep in working tree (t-3)
-ok 35 - grep -c in working tree (no /dev/null)
-ok 36 - grep --max-depth -1 in working tree
-ok 37 - grep --max-depth 0 in working tree
-ok 38 - grep --max-depth 0 -- '*' in working tree
-ok 39 - grep --max-depth 1 in working tree
-ok 40 - grep --max-depth 0 -- t in working tree
-ok 41 - grep --max-depth 0 -- . t in working tree
-ok 42 - grep --max-depth 0 -- t . in working tree
-ok 43 - grep in working tree with grep.extendedRegexp=false
-ok 44 - grep in working tree with grep.extendedRegexp=true
-ok 45 - grep -l -C
-ok 46 - grep -l -C
-ok 47 - grep -L -C
-ok 48 - grep -e A --and -e B
-ok 49 - grep ( -e A --or -e B ) --and -e B
-ok 50 - grep -e A --and --not -e B
-ok 51 - grep should ignore GREP_OPTIONS
-ok 52 - grep -f, non-existent file
-ok 53 - grep -f, one pattern
-ok 54 - grep -f, multiple patterns
-ok 55 - grep -f, ignore empty lines
-ok 56 - grep -f, ignore empty lines, read patterns from stdin
-ok 57 - grep -q, silently report matches
-ok 58 - grep -C1, hunk mark between files
-ok 59 - grep -C1 hunk mark between files
-ok 60 - log grep setup
-ok 61 - log grep (1)
-ok 62 - log grep (2)
-ok 63 - log grep (3)
-ok 64 - log grep (4)
-ok 65 - log grep (5)
-ok 66 - log grep (6)
-ok 67 - log --grep --author implicitly uses all-match
-ok 68 - log with multiple --author uses union
-ok 69 - log with --grep and multiple --author uses all-match
-ok 70 - log with --grep and multiple --author uses all-match
-ok 71 - grep with CE_VALID file
-ok 72 - grep -p with userdiff
-ok 73 - grep -p
-ok 74 - grep -p -B5
-ok 75 - grep -W
-ok 76 - grep -W with userdiff
-ok 77 - grep from a subdirectory to search wider area (1)
-ok 78 - grep from a subdirectory to search wider area (2)
-ok 79 - grep -Fi
-ok 80 - outside of git repository
-ok 81 - inside git repository but with --no-index
-ok 82 - setup double-dash tests
-ok 83 - grep -- pattern
-ok 84 - grep -- pattern -- pathspec
-ok 85 - grep -e pattern -- path
-ok 86 - grep -e -- -- path
-ok 87 # skip grep --perl-regexp pattern (missing LIBPCRE)
-ok 88 # skip grep -P pattern (missing LIBPCRE)
-ok 89 - grep pattern with grep.extendedRegexp=true
-ok 90 # skip grep -P pattern with grep.extendedRegexp=true (missing LIBPCRE)
-ok 91 # skip grep -P -v pattern (missing LIBPCRE)
-ok 92 # skip grep -P -i pattern (missing LIBPCRE)
-ok 93 # skip grep -P -w pattern (missing LIBPCRE)
-ok 94 - grep -G invalidpattern properly dies 
-ok 95 - grep -E invalidpattern properly dies 
-ok 96 # skip grep -P invalidpattern properly dies  (missing LIBPCRE)
-ok 97 - grep -G -E -F pattern
-ok 98 - grep -E -F -G pattern
-ok 99 - grep -F -G -E pattern
-ok 100 - grep -G -F -P -E pattern
-ok 101 # skip grep -G -F -E -P pattern (missing LIBPCRE)
-ok 102 - grep --color, separator
-ok 103 - grep --break
-ok 104 - grep --break with context
-ok 105 - grep --heading
-ok 106 - mimic ack-grep --group
-# passed all 106 test(s)
-1..106
+ok 24 - grep HEAD with grep.patterntype=basic
+ok 25 - grep HEAD with grep.patterntype=extended
+ok 26 - grep HEAD with grep.patterntype=fixed
+ok 27 - grep HEAD with grep.patterntype=perl
+ok 28 - grep HEAD with grep.patternType=default and grep.extendedRegexp=true
+ok 29 - grep HEAD with grep.extendedRegexp=true and grep.patternType=default
+ok 30 - grep HEAD with grep.patternType=extended and grep.extendedRegexp=false
+ok 31 - grep HEAD with grep.patternType=basic and grep.extendedRegexp=true
+ok 32 - grep HEAD with grep.extendedRegexp=false and grep.patternType=extended
+ok 33 - grep HEAD with grep.extendedRegexp=true and grep.patternType=basic
+ok 34 - grep --count HEAD
+ok 35 - grep --count -h HEAD
+ok 36 - grep -w in working tree
+ok 37 - grep -w in working tree
+ok 38 - grep -w in working tree
+ok 39 - grep -w in working tree (w)
+ok 40 - grep -w in working tree (x)
+ok 41 - grep -w in working tree (y-1)
+ok 42 - grep -w in working tree (y-2)
+ok 43 - grep -w in working tree (z)
+ok 44 - grep in working tree (t-1)
+ok 45 - grep in working tree (t-2)
+ok 46 - grep in working tree (t-3)
+ok 47 - grep -c in working tree (no /dev/null)
+ok 48 - grep --max-depth -1 in working tree
+ok 49 - grep --max-depth 0 in working tree
+ok 50 - grep --max-depth 0 -- '*' in working tree
+ok 51 - grep --max-depth 1 in working tree
+ok 52 - grep --max-depth 0 -- t in working tree
+ok 53 - grep --max-depth 0 -- . t in working tree
+ok 54 - grep --max-depth 0 -- t . in working tree
+ok 55 - grep in working tree with grep.extendedRegexp=false
+ok 56 - grep in working tree with grep.extendedRegexp=true
+ok 57 - grep in working tree with grep.patterntype=basic
+ok 58 - grep in working tree with grep.patterntype=extended
+ok 59 - grep in working tree with grep.patterntype=fixed
+ok 60 - grep in working tree with grep.patterntype=perl
+ok 61 - grep in working tree with grep.patternType=default and grep.extendedRegexp=true
+ok 62 - grep in working tree with grep.extendedRegexp=true and grep.patternType=default
+ok 63 - grep in working tree with grep.patternType=extended and grep.extendedRegexp=false
+ok 64 - grep in working tree with grep.patternType=basic and grep.extendedRegexp=true
+ok 65 - grep in working tree with grep.extendedRegexp=false and grep.patternType=extended
+ok 66 - grep in working tree with grep.extendedRegexp=true and grep.patternType=basic
+ok 67 - grep --count in working tree
+ok 68 - grep --count -h in working tree
+ok 69 - grep -l -C
+ok 70 - grep -l -C
+ok 71 - grep -L -C
+ok 72 - grep -e A --and -e B
+ok 73 - grep ( -e A --or -e B ) --and -e B
+ok 74 - grep -e A --and --not -e B
+ok 75 - grep should ignore GREP_OPTIONS
+ok 76 - grep -f, non-existent file
+ok 77 - grep -f, one pattern
+ok 78 - grep -f, multiple patterns
+ok 79 - grep, multiple patterns
+ok 80 - grep -f, ignore empty lines
+ok 81 - grep -f, ignore empty lines, read patterns from stdin
+ok 82 - grep -q, silently report matches
+ok 83 - grep -C1 hunk mark between files
+ok 84 - log grep setup
+ok 85 - log grep (1)
+ok 86 - log grep (2)
+ok 87 - log grep (3)
+ok 88 - log grep (4)
+ok 89 - log grep (5)
+ok 90 - log grep (6)
+ok 91 - log grep (7)
+ok 92 - log grep (8)
+ok 93 - log grep (9)
+ok 94 - log grep (9)
+ok 95 - log --grep-reflog can only be used under -g
+ok 96 - log with multiple --grep uses union
+ok 97 - log --all-match with multiple --grep uses intersection
+ok 98 - log with multiple --author uses union
+ok 99 - log --all-match with multiple --author still uses union
+ok 100 - log --grep --author uses intersection
+ok 101 - log --grep --grep --author takes union of greps and intersects with author
+ok 102 - log ---all-match -grep --author --author still takes union of authors and intersects with grep
+ok 103 - log --grep --author --author takes union of authors and intersects with grep
+ok 104 - log --all-match --grep --grep --author takes intersection
+ok 105 - log --author does not search in timestamp
+ok 106 - log --committer does not search in timestamp
+ok 107 - grep with CE_VALID file
+ok 108 - grep -p with userdiff
+ok 109 - grep -p
+ok 110 - grep -p -B5
+ok 111 - grep -W
+ok 112 - grep -W with userdiff
+ok 113 - grep from a subdirectory to search wider area (1)
+ok 114 - grep from a subdirectory to search wider area (2)
+ok 115 - grep -Fi
+ok 116 - outside of git repository
+ok 117 - inside git repository but with --no-index
+ok 118 - setup double-dash tests
+ok 119 - grep -- pattern
+ok 120 - grep -- pattern -- pathspec
+ok 121 - grep -e pattern -- path
+ok 122 - grep -e -- -- path
+ok 123 - grep --perl-regexp pattern
+ok 124 - grep -P pattern
+ok 125 - grep pattern with grep.extendedRegexp=true
+ok 126 - grep -P pattern with grep.extendedRegexp=true
+ok 127 - grep -P -v pattern
+ok 128 - grep -P -i pattern
+ok 129 - grep -P -w pattern
+ok 130 - grep -G invalidpattern properly dies 
+ok 131 - grep invalidpattern properly dies with grep.patternType=basic
+ok 132 - grep -E invalidpattern properly dies 
+ok 133 - grep invalidpattern properly dies with grep.patternType=extended
+ok 134 - grep -P invalidpattern properly dies 
+ok 135 - grep invalidpattern properly dies with grep.patternType=perl
+ok 136 - grep -G -E -F pattern
+ok 137 - grep pattern with grep.patternType=basic, =extended, =fixed
+ok 138 - grep -E -F -G pattern
+ok 139 - grep pattern with grep.patternType=extended, =fixed, =basic
+ok 140 - grep -F -G -E pattern
+ok 141 - grep pattern with grep.patternType=fixed, =basic, =extended
+ok 142 - grep -G -F -P -E pattern
+ok 143 - grep pattern with grep.patternType=fixed, =basic, =perl, =extended
+ok 144 - grep -G -F -E -P pattern
+ok 145 - grep pattern with grep.patternType=fixed, =basic, =extended, =perl
+ok 146 - grep -P pattern with grep.patternType=fixed
+ok 147 - grep -F pattern with grep.patternType=basic
+ok 148 - grep -G pattern with grep.patternType=fixed
+ok 149 - grep -E pattern with grep.patternType=fixed
+ok 150 - grep --color, separator
+ok 151 - grep --break
+ok 152 - grep --break with context
+ok 153 - grep --heading
+ok 154 - mimic ack-grep --group
+ok 155 - grep -E "^ "
+ok 156 - grep -P "^ "
+ok 157 - grep --color -e A -e B with context
+ok 158 - grep --color -e A --and -e B with context
+ok 159 - grep --color -e A --and --not -e B with context
+ok 160 - grep --color -e A --and -e B -p with context
+# passed all 160 test(s)
+1..160
 *** t7811-grep-open.sh ***
 ok 1 - determine default pager
 ok 2 - setup
@@ -8850,53 +13892,226 @@
 # passed all 10 test(s)
 1..10
 *** t8001-annotate.sh ***
-ok 1 - prepare reference tree
-ok 2 - check all lines blamed on A
-ok 3 - Setup new lines blamed on B
-ok 4 - Two lines blamed on A, two on B
-ok 5 - merge-setup part 1
-ok 6 - Two lines blamed on A, two on B, two on B1
-ok 7 - merge-setup part 2
-ok 8 - Two lines blamed on A, one on B, one on B2
-ok 9 - merge-setup part 3
-ok 10 - Two lines blamed on A, one on B, two on B1, one on B2
-ok 11 - Annotating an old revision works
-ok 12 - Annotating an old revision works
-ok 13 - merge-setup part 4
-ok 14 - Two lines blamed on A, one on B, two on B1, one on B2, one on A U Thor
-ok 15 - an incomplete line added
-ok 16 - With incomplete lines.
-ok 17 - some edit
-ok 18 - some edit
-ok 19 - an obfuscated email added
-ok 20 - obfuscated email parsed
-ok 21 - Annotating an old revision works
-# passed all 21 test(s)
-1..21
+ok 1 - setup A lines
+ok 2 - blame 1 author
+ok 3 - setup B lines
+ok 4 - blame 2 authors
+ok 5 - setup B1 lines (branch1)
+ok 6 - blame 2 authors + 1 branch1 author
+ok 7 - setup B2 lines (branch2)
+ok 8 - blame 2 authors + 1 branch2 author
+ok 9 - merge branch1 & branch2
+ok 10 - blame 2 authors + 2 merged-in authors
+ok 11 - blame ancestor
+ok 12 - blame great-ancestor
+ok 13 - setup evil merge
+ok 14 - blame evil merge
+ok 15 - blame huge graft
+ok 16 - setup incomplete line
+ok 17 - blame incomplete line
+ok 18 - setup edits
+ok 19 - blame edits
+ok 20 - setup obfuscated email
+ok 21 - blame obfuscated email
+ok 22 - blame -L 1 (all)
+ok 23 - blame -L , (all)
+ok 24 - blame -L X (X to end)
+ok 25 - blame -L X, (X to end)
+ok 26 - blame -L ,Y (up to Y)
+ok 27 - blame -L X,X
+ok 28 - blame -L X,Y
+ok 29 - blame -L Y,X (undocumented)
+ok 30 - blame -L -X
+ok 31 - blame -L 0
+ok 32 - blame -L ,0
+ok 33 - blame -L ,+0
+ok 34 - blame -L X,+0
+ok 35 - blame -L X,+1
+ok 36 - blame -L X,+N
+ok 37 - blame -L ,-0
+ok 38 - blame -L X,-0
+ok 39 - blame -L X,-1
+ok 40 - blame -L X,-N
+ok 41 - blame -L /RE/ (RE to end)
+ok 42 - blame -L /RE/,/RE2/
+ok 43 - blame -L X,/RE/
+ok 44 - blame -L /RE/,Y
+ok 45 - blame -L /RE/,+N
+ok 46 - blame -L /RE/,-N
+ok 47 - blame -L X (X == nlines)
+ok 48 - blame -L X (X == nlines + 1)
+ok 49 - blame -L X (X > nlines)
+ok 50 - blame -L ,Y (Y == nlines)
+ok 51 - blame -L ,Y (Y == nlines + 1)
+ok 52 - blame -L ,Y (Y > nlines)
+ok 53 - blame -L multiple (disjoint)
+ok 54 - blame -L multiple (disjoint: unordered)
+ok 55 - blame -L multiple (adjacent)
+ok 56 - blame -L multiple (adjacent: unordered)
+ok 57 - blame -L multiple (overlapping)
+ok 58 - blame -L multiple (overlapping: unordered)
+ok 59 - blame -L multiple (superset/subset)
+ok 60 - blame -L multiple (superset/subset: unordered)
+ok 61 - blame -L /RE/ (relative)
+ok 62 - blame -L /RE/ (relative: no preceding range)
+ok 63 - blame -L /RE/ (relative: adjacent)
+ok 64 - blame -L /RE/ (relative: not found)
+ok 65 - blame -L /RE/ (relative: end-of-file)
+ok 66 - blame -L ^/RE/ (absolute)
+ok 67 - blame -L ^/RE/ (absolute: no preceding range)
+ok 68 - blame -L ^/RE/ (absolute: not found)
+ok 69 - blame -L ^/RE/ (absolute: end-of-file)
+ok 70 - setup -L :regex
+ok 71 - blame -L :literal
+ok 72 - blame -L :regex
+ok 73 - blame -L :nomatch
+ok 74 - blame -L :RE (relative)
+ok 75 - blame -L :RE (relative: no preceding range)
+ok 76 - blame -L :RE (relative: not found)
+ok 77 - blame -L :RE (relative: end-of-file)
+ok 78 - blame -L ^:RE (absolute)
+ok 79 - blame -L ^:RE (absolute: no preceding range)
+ok 80 - blame -L ^:RE (absolute: not found)
+ok 81 - blame -L ^:RE (absolute: end-of-file)
+ok 82 - setup incremental
+ok 83 - blame empty
+ok 84 - blame -L 0 empty
+ok 85 - blame -L 1 empty
+ok 86 - blame -L 2 empty
+ok 87 - blame half
+ok 88 - blame -L 0 half
+ok 89 - blame -L 1 half
+ok 90 - blame -L 2 half
+ok 91 - blame -L 3 half
+ok 92 - blame full
+ok 93 - blame -L 0 full
+ok 94 - blame -L 1 full
+ok 95 - blame -L 2 full
+ok 96 - blame -L 3 full
+ok 97 - blame -L
+ok 98 - blame -L X,+
+ok 99 - blame -L X,-
+ok 100 - blame -L X (non-numeric X)
+ok 101 - blame -L X,Y (non-numeric Y)
+ok 102 - blame -L X,+N (non-numeric N)
+ok 103 - blame -L X,-N (non-numeric N)
+ok 104 - blame -L ,^/RE/
+ok 105 - annotate old revision
+# passed all 105 test(s)
+1..105
 *** t8002-blame.sh ***
-ok 1 - prepare reference tree
-ok 2 - check all lines blamed on A
-ok 3 - Setup new lines blamed on B
-ok 4 - Two lines blamed on A, two on B
-ok 5 - merge-setup part 1
-ok 6 - Two lines blamed on A, two on B, two on B1
-ok 7 - merge-setup part 2
-ok 8 - Two lines blamed on A, one on B, one on B2
-ok 9 - merge-setup part 3
-ok 10 - Two lines blamed on A, one on B, two on B1, one on B2
-ok 11 - Annotating an old revision works
-ok 12 - Annotating an old revision works
-ok 13 - merge-setup part 4
-ok 14 - Two lines blamed on A, one on B, two on B1, one on B2, one on A U Thor
-ok 15 - an incomplete line added
-ok 16 - With incomplete lines.
-ok 17 - some edit
-ok 18 - some edit
-ok 19 - an obfuscated email added
-ok 20 - obfuscated email parsed
-ok 21 - Blame --show-email works
-# passed all 21 test(s)
-1..21
+ok 1 - setup A lines
+ok 2 - blame 1 author
+ok 3 - setup B lines
+ok 4 - blame 2 authors
+ok 5 - setup B1 lines (branch1)
+ok 6 - blame 2 authors + 1 branch1 author
+ok 7 - setup B2 lines (branch2)
+ok 8 - blame 2 authors + 1 branch2 author
+ok 9 - merge branch1 & branch2
+ok 10 - blame 2 authors + 2 merged-in authors
+ok 11 - blame ancestor
+ok 12 - blame great-ancestor
+ok 13 - setup evil merge
+ok 14 - blame evil merge
+ok 15 - blame huge graft
+ok 16 - setup incomplete line
+ok 17 - blame incomplete line
+ok 18 - setup edits
+ok 19 - blame edits
+ok 20 - setup obfuscated email
+ok 21 - blame obfuscated email
+ok 22 - blame -L 1 (all)
+ok 23 - blame -L , (all)
+ok 24 - blame -L X (X to end)
+ok 25 - blame -L X, (X to end)
+ok 26 - blame -L ,Y (up to Y)
+ok 27 - blame -L X,X
+ok 28 - blame -L X,Y
+ok 29 - blame -L Y,X (undocumented)
+ok 30 - blame -L -X
+ok 31 - blame -L 0
+ok 32 - blame -L ,0
+ok 33 - blame -L ,+0
+ok 34 - blame -L X,+0
+ok 35 - blame -L X,+1
+ok 36 - blame -L X,+N
+ok 37 - blame -L ,-0
+ok 38 - blame -L X,-0
+ok 39 - blame -L X,-1
+ok 40 - blame -L X,-N
+ok 41 - blame -L /RE/ (RE to end)
+ok 42 - blame -L /RE/,/RE2/
+ok 43 - blame -L X,/RE/
+ok 44 - blame -L /RE/,Y
+ok 45 - blame -L /RE/,+N
+ok 46 - blame -L /RE/,-N
+ok 47 - blame -L X (X == nlines)
+ok 48 - blame -L X (X == nlines + 1)
+ok 49 - blame -L X (X > nlines)
+ok 50 - blame -L ,Y (Y == nlines)
+ok 51 - blame -L ,Y (Y == nlines + 1)
+ok 52 - blame -L ,Y (Y > nlines)
+ok 53 - blame -L multiple (disjoint)
+ok 54 - blame -L multiple (disjoint: unordered)
+ok 55 - blame -L multiple (adjacent)
+ok 56 - blame -L multiple (adjacent: unordered)
+ok 57 - blame -L multiple (overlapping)
+ok 58 - blame -L multiple (overlapping: unordered)
+ok 59 - blame -L multiple (superset/subset)
+ok 60 - blame -L multiple (superset/subset: unordered)
+ok 61 - blame -L /RE/ (relative)
+ok 62 - blame -L /RE/ (relative: no preceding range)
+ok 63 - blame -L /RE/ (relative: adjacent)
+ok 64 - blame -L /RE/ (relative: not found)
+ok 65 - blame -L /RE/ (relative: end-of-file)
+ok 66 - blame -L ^/RE/ (absolute)
+ok 67 - blame -L ^/RE/ (absolute: no preceding range)
+ok 68 - blame -L ^/RE/ (absolute: not found)
+ok 69 - blame -L ^/RE/ (absolute: end-of-file)
+ok 70 - setup -L :regex
+ok 71 - blame -L :literal
+ok 72 - blame -L :regex
+ok 73 - blame -L :nomatch
+ok 74 - blame -L :RE (relative)
+ok 75 - blame -L :RE (relative: no preceding range)
+ok 76 - blame -L :RE (relative: not found)
+ok 77 - blame -L :RE (relative: end-of-file)
+ok 78 - blame -L ^:RE (absolute)
+ok 79 - blame -L ^:RE (absolute: no preceding range)
+ok 80 - blame -L ^:RE (absolute: not found)
+ok 81 - blame -L ^:RE (absolute: end-of-file)
+ok 82 - setup incremental
+ok 83 - blame empty
+ok 84 - blame -L 0 empty
+ok 85 - blame -L 1 empty
+ok 86 - blame -L 2 empty
+ok 87 - blame half
+ok 88 - blame -L 0 half
+ok 89 - blame -L 1 half
+ok 90 - blame -L 2 half
+ok 91 - blame -L 3 half
+ok 92 - blame full
+ok 93 - blame -L 0 full
+ok 94 - blame -L 1 full
+ok 95 - blame -L 2 full
+ok 96 - blame -L 3 full
+ok 97 - blame -L
+ok 98 - blame -L X,+
+ok 99 - blame -L X,-
+ok 100 - blame -L X (non-numeric X)
+ok 101 - blame -L X,Y (non-numeric Y)
+ok 102 - blame -L X,+N (non-numeric N)
+ok 103 - blame -L X,-N (non-numeric N)
+ok 104 - blame -L ,^/RE/
+ok 105 - blame --show-email
+ok 106 - setup showEmail tests
+ok 107 - blame with no options and no config
+ok 108 - blame with showemail options
+ok 109 - blame with showEmail config false
+ok 110 - blame with showEmail config true
+# passed all 110 test(s)
+1..110
 *** t8003-blame-corner-cases.sh ***
 ok 1 - setup
 ok 2 - straight copy without -C
@@ -8915,14 +14130,18 @@
 ok 15 - blame to a commit with no author name
 ok 16 - blame -L with invalid start
 ok 17 - blame -L with invalid end
-ok 18 - indent of line numbers, nine lines
-ok 19 - indent of line numbers, ten lines
-# passed all 19 test(s)
-1..19
+ok 18 - blame parses <end> part of -L
+ok 19 - indent of line numbers, nine lines
+ok 20 - indent of line numbers, ten lines
+ok 21 - setup file with CRLF newlines
+ok 22 - blame file with CRLF core.autocrlf true
+ok 23 - blame file with CRLF attributes text
+# passed all 23 test(s)
+1..23
 *** t8004-blame-with-conflicts.sh ***
 ok 1 - setup first case
 ok 2 - blame runs on unconflicted file while other file has conflicts
-ok 3 - blame runs on conflicted file in stages 1,3
+ok 3 - blame does not crash with conflicted file in stages 1,3
 # passed all 3 test(s)
 1..3
 *** t8005-blame-i18n.sh ***
@@ -8972,6 +14191,8 @@
 ok 4 - blame --line-porcelain output
 # passed all 4 test(s)
 1..4
+*** t9000-addresses.sh ***
+1..0 # SKIP Perl Mail::Address unavailable, skipping test
 *** t9001-send-email.sh ***
 ok 1 - prepare reference tree
 ok 2 - Setup helper tool
@@ -8989,87 +14210,149 @@
 ok 14 - setup expect
 ok 15 - Verify commandline
 ok 16 - setup expect
-ok 17 - Show all headers
-ok 18 - Prompting works
-ok 19 - tocmd works
-ok 20 - cccmd works
-ok 21 - reject long lines
-ok 22 - no patch was sent
-ok 23 - Author From: in message body
-ok 24 - Author From: not in message body
-ok 25 - allow long lines with --no-validate
-ok 26 - Invalid In-Reply-To
-ok 27 - Valid In-Reply-To when prompting
-ok 28 - In-Reply-To without --chain-reply-to
-ok 29 - In-Reply-To with --chain-reply-to
-ok 30 - setup fake editor
-ok 31 - --compose works
-ok 32 - first message is compose text
-ok 33 - second message is patch
-ok 34 - setup expect
-ok 35 - sendemail.cc set
-ok 36 - setup expect
-ok 37 - sendemail.cc unset
-ok 38 - setup expect
-ok 39 - sendemail.cccmd
-ok 40 - setup expect
-ok 41 - --suppress-cc=all
+ok 17 - self name is suppressed
+ok 18 - self name with dot is suppressed
+ok 19 - non-ascii self name is suppressed
+ok 20 - long non-ascii self name is suppressed
+ok 21 - sanitized self name is suppressed
+ok 22 - Show all headers
+ok 23 - Prompting works
+ok 24 # skip implicit ident is allowed (missing AUTOIDENT of PERL,AUTOIDENT)
+ok 25 - broken implicit ident aborts send-email
+ok 26 - setup tocmd and cccmd scripts
+ok 27 - tocmd works
+ok 28 - cccmd works
+ok 29 - reject long lines
+ok 30 - no patch was sent
+ok 31 - Author From: in message body
+ok 32 - Author From: not in message body
+ok 33 - allow long lines with --no-validate
+ok 34 - Invalid In-Reply-To
+ok 35 - Valid In-Reply-To when prompting
+ok 36 - In-Reply-To without --chain-reply-to
+ok 37 - In-Reply-To with --chain-reply-to
+ok 38 - setup fake editor
+ok 39 - --compose works
+ok 40 - first message is compose text
+ok 41 - second message is patch
 ok 42 - setup expect
-ok 43 - --suppress-cc=body
+ok 43 - sendemail.cc set
 ok 44 - setup expect
-ok 45 - --suppress-cc=body --suppress-cc=cccmd
+ok 45 - sendemail.cc unset
 ok 46 - setup expect
-ok 47 - --suppress-cc=sob
+ok 47 - sendemail.cccmd
 ok 48 - setup expect
-ok 49 - --suppress-cc=bodycc
+ok 49 - --suppress-cc=all
 ok 50 - setup expect
-ok 51 - --suppress-cc=cc
-ok 52 - --confirm=always
-ok 53 - --confirm=auto
-ok 54 - --confirm=cc
-ok 55 - --confirm=compose
-ok 56 - confirm by default (due to cc)
-ok 57 - confirm by default (due to --compose)
-ok 58 - confirm detects EOF (inform assumes y)
-ok 59 - confirm detects EOF (auto causes failure)
-ok 60 - confirm doesnt loop forever
-ok 61 - utf8 Cc is rfc2047 encoded
-ok 62 - --compose adds MIME for utf8 body
-ok 63 - --compose respects user mime type
-ok 64 - --compose adds MIME for utf8 subject
-ok 65 - detects ambiguous reference/file conflict
-ok 66 - feed two files
-ok 67 - in-reply-to but no threading
-ok 68 - no in-reply-to and no threading
-ok 69 - threading but no chain-reply-to
-ok 70 - warning with an implicit --chain-reply-to
-ok 71 - no warning with an explicit --chain-reply-to
-ok 72 - no warning with an explicit --no-chain-reply-to
-ok 73 - no warning with sendemail.chainreplyto = false
-ok 74 - no warning with sendemail.chainreplyto = true
-ok 75 - sendemail.to works
-ok 76 - --no-to overrides sendemail.to
-ok 77 - sendemail.cc works
-ok 78 - --no-cc overrides sendemail.cc
-ok 79 - sendemail.bcc works
-ok 80 - --no-bcc overrides sendemail.bcc
-ok 81 - patches To headers are used by default
-ok 82 - patches To headers are appended to
-ok 83 - To headers from files reset each patch
-ok 84 - setup expect
-ok 85 - setup expect
-ok 86 - asks about and fixes 8bit encodings
-ok 87 - sendemail.8bitEncoding works
-ok 88 - --8bit-encoding overrides sendemail.8bitEncoding
-ok 89 - setup expect
-ok 90 - setup expect
-ok 91 - --8bit-encoding also treats subject
-ok 92 - refusing to send cover letter template
-ok 93 - --force sends cover letter template anyway
-ok 94 - sendemail.aliasfiletype=mailrc
-ok 95 - sendemail.aliasfile=~/.mailrc
-# passed all 95 test(s)
-1..95
+ok 51 - --suppress-cc=body
+ok 52 - setup expect
+ok 53 - --suppress-cc=body --suppress-cc=cccmd
+ok 54 - setup expect
+ok 55 - --suppress-cc=sob
+ok 56 - setup expect
+ok 57 - --suppress-cc=bodycc
+ok 58 - setup expect
+ok 59 - --suppress-cc=cc
+ok 60 - --confirm=always
+ok 61 - --confirm=auto
+ok 62 - --confirm=cc
+ok 63 - --confirm=compose
+ok 64 - confirm by default (due to cc)
+ok 65 - confirm by default (due to --compose)
+ok 66 - confirm detects EOF (inform assumes y)
+ok 67 - confirm detects EOF (auto causes failure)
+ok 68 - confirm does not loop forever
+ok 69 - utf8 Cc is rfc2047 encoded
+ok 70 - --compose adds MIME for utf8 body
+ok 71 - --compose respects user mime type
+ok 72 - --compose adds MIME for utf8 subject
+ok 73 - utf8 author is correctly passed on
+ok 74 - utf8 sender is not duplicated
+ok 75 - sendemail.composeencoding works
+ok 76 - --compose-encoding works
+ok 77 - --compose-encoding overrides sendemail.composeencoding
+ok 78 - --compose-encoding adds correct MIME for subject
+ok 79 - detects ambiguous reference/file conflict
+ok 80 - feed two files
+ok 81 - in-reply-to but no threading
+ok 82 - no in-reply-to and no threading
+ok 83 - threading but no chain-reply-to
+ok 84 - sendemail.to works
+ok 85 - --no-to overrides sendemail.to
+ok 86 - sendemail.cc works
+ok 87 - --no-cc overrides sendemail.cc
+ok 88 - sendemail.bcc works
+ok 89 - --no-bcc overrides sendemail.bcc
+ok 90 - patches To headers are used by default
+ok 91 - patches To headers are appended to
+ok 92 - To headers from files reset each patch
+ok 93 - setup expect
+ok 94 - setup expect
+ok 95 - ASCII subject is not RFC2047 quoted
+ok 96 - setup expect
+ok 97 - asks about and fixes 8bit encodings
+ok 98 - sendemail.8bitEncoding works
+ok 99 - --8bit-encoding overrides sendemail.8bitEncoding
+ok 100 - setup expect
+ok 101 - setup expect
+ok 102 - --8bit-encoding also treats subject
+ok 103 - setup expect
+ok 104 - sendemail.transferencoding=7bit fails on 8bit data
+ok 105 - --transfer-encoding overrides sendemail.transferEncoding
+ok 106 - sendemail.transferencoding=8bit
+ok 107 - setup expect
+ok 108 - 8-bit and sendemail.transferencoding=quoted-printable
+ok 109 - setup expect
+ok 110 - 8-bit and sendemail.transferencoding=base64
+ok 111 - setup expect
+ok 112 - convert from quoted-printable to base64
+ok 113 - setup expect
+ok 114 - setup expect
+ok 115 - CRLF and sendemail.transferencoding=quoted-printable
+ok 116 - setup expect
+ok 117 - CRLF and sendemail.transferencoding=base64
+ok 118 - refusing to send cover letter template
+ok 119 - --force sends cover letter template anyway
+ok 120 - to-cover adds To to all mail
+ok 121 - cc-cover adds Cc to all mail
+ok 122 - tocover adds To to all mail
+ok 123 - cccover adds Cc to all mail
+ok 124 - sendemail.aliasfiletype=mailrc
+ok 125 - sendemail.aliasfile=~/.mailrc
+ok 126 - sendemail.aliasfiletype=sendmail
+ok 127 - sendmail aliases line folding
+ok 128 - sendmail aliases tolerate bogus line folding
+ok 129 - sendmail aliases empty
+ok 130 - alias support in To header
+ok 131 - alias support in Cc header
+ok 132 - tocmd works with aliases
+ok 133 - cccmd works with aliases
+ok 134 - --[no-]xmailer without any configuration
+ok 135 - --[no-]xmailer with sendemail.xmailer=true
+ok 136 - --[no-]xmailer with sendemail.xmailer=false
+ok 137 - setup expected-list
+ok 138 - use email list in --cc --to and --bcc
+ok 139 - aliases work with email list
+ok 140 - leading and trailing whitespaces are removed
+# passed all 140 test(s)
+1..140
+*** t9002-column.sh ***
+ok 1 - setup
+ok 2 - never
+ok 3 - always
+ok 4 - 80 columns
+ok 5 - COLUMNS = 1
+ok 6 - width = 1
+ok 7 - 20 columns
+ok 8 - 20 columns, nodense
+ok 9 - 20 columns, dense
+ok 10 - 20 columns, padding 2
+ok 11 - 20 columns, indented
+ok 12 - 20 columns, row first
+ok 13 - 20 columns, row first, nodense
+ok 14 - 20 columns, row first, dense
+# passed all 14 test(s)
+1..14
 *** t9010-svn-fe.sh ***
 ok 1 - empty dump
 ok 2 - v4 dumps not supported
@@ -9079,3033 +14362,694 @@
 ok 6 - unsupported properties are ignored
 not ok 7 - timestamp and empty file # TODO known breakage
 ok 8 - directory with files
-ok 9 - node without action
-ok 10 - action: add node without text
-not ok 11 - change file mode but keep old content # TODO known breakage
-ok 12 - NUL in property value
-ok 13 - NUL in log message, file content, and property name
-ok 14 - change file mode and reiterate content
-ok 15 - deltas not supported
-ok 16 - property deltas supported
-ok 17 - properties on /
-ok 18 - deltas for typechange
-ok 19 - set up svn repo
-ok 20 - t9135/svn.dump
+ok 9 - branch name with backslash
+ok 10 - node without action
+ok 11 - action: add node without text
+not ok 12 - change file mode but keep old content # TODO known breakage
+ok 13 - NUL in property value
+ok 14 - NUL in log message, file content, and property name
+ok 15 - change file mode and reiterate content
+ok 16 - deltas supported
+ok 17 - property deltas supported
+ok 18 - properties on /
+ok 19 - deltas for typechange
+ok 20 - deltas need not consume the whole preimage
+ok 21 - no hang for delta trying to read past end of preimage
+ok 22 - set up svn repo
+ok 23 - t9135/svn.dump
 # still have 3 known breakage(s)
-# passed all remaining 17 test(s)
-1..20
+# passed all remaining 20 test(s)
+1..23
+*** t9011-svn-da.sh ***
+ok 1 - reject empty delta
+ok 2 - delta can empty file
+ok 3 - reject svndiff2
+ok 4 - one-window empty delta
+ok 5 - reject incomplete window header
+ok 6 - reject declared delta longer than actual delta
+ok 7 - two-window empty delta
+ok 8 - noisy zeroes
+ok 9 - reject variable-length int in magic
+ok 10 - reject truncated integer
+ok 11 - nonempty (but unused) preimage view
+ok 12 - preimage view: right endpoint cannot backtrack
+ok 13 - preimage view: left endpoint can advance
+ok 14 - preimage view: offsets compared by value
+ok 15 - preimage view: reject truncated preimage
+ok 16 - forbid unconsumed inline data
+ok 17 - reject truncated inline data
+ok 18 - reject truncated inline data (after instruction section)
+ok 19 - copyfrom_data
+ok 20 - multiple copyfrom_data
+ok 21 - incomplete multiple insn
+ok 22 - catch attempt to copy missing data
+ok 23 - copyfrom target to repeat data
+ok 24 - copyfrom target out of order
+ok 25 - catch copyfrom future
+ok 26 - copy to sustain
+ok 27 - catch copy that overflows
+ok 28 - copyfrom source
+ok 29 - copy backwards
+ok 30 - offsets are relative to window
+ok 31 - example from notes/svndiff
+# passed all 31 test(s)
+1..31
+*** t9020-remote-svn.sh ***
+ok 1 - simple fetch
+ok 2 - repeated fetch, nothing shall change
+ok 3 - fetch from a file:// url gives the same result
+not ok 4 - the sha1 differ because the git-svn-id line in the commit msg contains the url # TODO known breakage
+ok 5 - mark-file regeneration
+ok 6 - incremental imports must lead to the same head
+# still have 1 known breakage(s)
+# passed all remaining 5 test(s)
+1..6
 *** t9100-git-svn-basic.sh ***
 define NO_SVN_TESTS to skip git svn tests
 # UTF-8 locale not set, some tests skipped (C)
 ok 1 - initialize git svn
-not ok - 2 import an SVN revision into git
-#	git svn fetch
+ok 2 - import an SVN revision into git
 ok 3 - checkout from svn
-not ok - 4 try a deep --rmdir with a commit
-#	
-#		git checkout -f -b mybranch ${remotes_git_svn} &&
-#		mv dir/a/b/c/d/e/file dir/file &&
-#		cp dir/file file &&
-#		git update-index --add --remove dir/a/b/c/d/e/file dir/file file &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test -d "$SVN_TREE"/dir && test ! -d "$SVN_TREE"/dir/a
-not ok - 5 detect node change from file to directory #1
-#	
-#		mkdir dir/new_file &&
-#		mv dir/file dir/new_file/file &&
-#		mv dir/new_file dir/file &&
-#		git update-index --remove dir/file &&
-#		git update-index --add dir/file/file &&
-#		git commit -m 'detect node change from file to directory #1' &&
-#		test_must_fail git svn set-tree --find-copies-harder --rmdir 		remotes/git-svn..mybranch
-not ok - 6 detect node change from directory to file #1
-#	
-#		rm -rf dir "$GIT_DIR"/index &&
-#		git checkout -f -b mybranch2 ${remotes_git_svn} &&
-#		mv bar/zzz zzz &&
-#		rm -rf bar &&
-#		mv zzz bar &&
-#		git update-index --remove -- bar/zzz &&
-#		git update-index --add -- bar &&
-#		git commit -m "$name" &&
-#		test_must_fail git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch2
-not ok - 7 detect node change from file to directory #2
-#	
-#		rm -f "$GIT_DIR"/index &&
-#		git checkout -f -b mybranch3 ${remotes_git_svn} &&
-#		rm bar/zzz &&
-#		git update-index --remove bar/zzz &&
-#		mkdir bar/zzz &&
-#		echo yyy > bar/zzz/yyy &&
-#		git update-index --add bar/zzz/yyy &&
-#		git commit -m "$name" &&
-#		test_must_fail git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch3
-not ok - 8 detect node change from directory to file #2
-#	
-#		rm -f "$GIT_DIR"/index &&
-#		git checkout -f -b mybranch4 ${remotes_git_svn} &&
-#		rm -rf dir &&
-#		git update-index --remove -- dir/file &&
-#		touch dir &&
-#		echo asdf > dir &&
-#		git update-index --add -- dir &&
-#		git commit -m "$name" &&
-#		test_must_fail git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch4
-not ok - 9 remove executable bit from a file
-#	
-#		rm -f "$GIT_DIR"/index &&
-#		git checkout -f -b mybranch5 ${remotes_git_svn} &&
-#		chmod -x exec.sh &&
-#		git update-index exec.sh &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch5 &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test ! -x "$SVN_TREE"/exec.sh
-not ok - 10 add executable bit back file
-#	
-#		chmod +x exec.sh &&
-#		git update-index exec.sh &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch5 &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test -x "$SVN_TREE"/exec.sh
-not ok - 11 executable file becomes a symlink to bar/zzz (file)
-#	
-#		rm exec.sh &&
-#		ln -s bar/zzz exec.sh &&
-#		git update-index exec.sh &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch5 &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test -h "$SVN_TREE"/exec.sh
-not ok - 12 new symlink is added to a file that was also just made executable
-#	
-#		chmod +x bar/zzz &&
-#		ln -s bar/zzz exec-2.sh &&
-#		git update-index --add bar/zzz exec-2.sh &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch5 &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test -x "$SVN_TREE"/bar/zzz &&
-#		test -h "$SVN_TREE"/exec-2.sh
-not ok - 13 modify a symlink to become a file
-#	
-#		echo git help > help || true &&
-#		rm exec-2.sh &&
-#		cp help exec-2.sh &&
-#		git update-index exec-2.sh &&
-#		git commit -m "$name" &&
-#		git svn set-tree --find-copies-harder --rmdir \
-#			${remotes_git_svn}..mybranch5 &&
-#		svn_cmd up "$SVN_TREE" &&
-#		test -f "$SVN_TREE"/exec-2.sh &&
-#		test ! -h "$SVN_TREE"/exec-2.sh &&
-#		test_cmp help "$SVN_TREE"/exec-2.sh
+ok 4 - try a deep --rmdir with a commit
+ok 5 - detect node change from file to directory #1
+ok 6 - detect node change from directory to file #1
+ok 7 - detect node change from file to directory #2
+ok 8 - detect node change from directory to file #2
+ok 9 - remove executable bit from a file
+ok 10 - add executable bit back file
+ok 11 - executable file becomes a symlink to file
+ok 12 - new symlink is added to a file that was also just made executable
+ok 13 - modify a symlink to become a file
 ok 14 # skip commit with UTF-8 message: locale: C (missing UTF8)
-not ok - 15 test fetch functionality (svn => git) with alternate GIT_SVN_ID
-#	git svn init "$svnrepo" && git svn fetch &&
-#	     git rev-list --pretty=raw ${remotes_git_svn} | grep ^tree | uniq > a &&
-#	     git rev-list --pretty=raw remotes/alt | grep ^tree | uniq > b &&
-#	     test_cmp a b
-not ok - 16 check imported tree checksums expected tree checksums
-#	test_cmp a expected
+ok 15 - test fetch functionality (svn => git) with alternate GIT_SVN_ID
+ok 16 - check imported tree checksums expected tree checksums
 ok 17 - exit if remote refs are ambigious
 ok 18 - exit if init-ing a would clobber a URL
-not ok - 19 init allows us to connect to another directory in the same repo
-#	
-#	        git svn init --minimize-url -i bar "$svnrepo/bar" &&
-#	        git config --get svn-remote.svn.fetch \
-#	                              "^bar:refs/remotes/bar$" &&
-#	        git config --get svn-remote.svn.fetch \
-#	                              "^:refs/${remotes_git_svn}$"
-#	        
-not ok - 20 dcommit $rev does not clobber current branch
-#	
-#		git svn fetch -i bar &&
-#		git checkout -b my-bar refs/remotes/bar &&
-#		echo 1 > foo &&
-#		git add foo &&
-#		git commit -m "change 1" &&
-#		echo 2 > foo &&
-#		git add foo &&
-#		git commit -m "change 2" &&
-#		old_head=$(git rev-parse HEAD) &&
-#		git svn dcommit -i bar HEAD^ &&
-#		test $old_head = $(git rev-parse HEAD) &&
-#		test refs/heads/my-bar = $(git symbolic-ref HEAD) &&
-#		git log refs/remotes/bar | grep "change 1" &&
-#		! git log refs/remotes/bar | grep "change 2" &&
-#		git checkout master &&
-#		git branch -D my-bar
-#		
-not ok - 21 able to dcommit to a subdirectory
-#	
-#		git svn fetch -i bar &&
-#		git checkout -b my-bar refs/remotes/bar &&
-#		echo abc > d &&
-#		git update-index --add d &&
-#		git commit -m '/bar/d should be in the log' &&
-#		git svn dcommit -i bar &&
-#		test -z "`git diff refs/heads/my-bar refs/remotes/bar`" &&
-#		mkdir newdir &&
-#		echo new > newdir/dir &&
-#		git update-index --add newdir/dir &&
-#		git commit -m 'add a new directory' &&
-#		git svn dcommit -i bar &&
-#		test -z "`git diff refs/heads/my-bar refs/remotes/bar`" &&
-#		echo foo >> newdir/dir &&
-#		git update-index newdir/dir &&
-#		git commit -m 'modify a file in new directory' &&
-#		git svn dcommit -i bar &&
-#		test -z "`git diff refs/heads/my-bar refs/remotes/bar`"
-#		
-not ok - 22 dcommit should not fail with a touched file
-#	
-#		test_commit "commit-new-file-foo2" foo2 &&
-#		test-chmtime =-60 foo &&
-#		git svn dcommit
-#	
-not ok - 23 rebase should not fail with a touched file
-#	
-#		test-chmtime =-60 foo &&
-#		git svn rebase
-#	
-not ok - 24 able to set-tree to a subdirectory
-#	
-#		echo cba > d &&
-#		git update-index d &&
-#		git commit -m 'update /bar/d' &&
-#		git svn set-tree -i bar HEAD &&
-#		test -z "`git diff refs/heads/my-bar refs/remotes/bar`"
-#		
-not ok - 25 git-svn works in a bare repository
-#	
-#		mkdir bare-repo &&
-#		( cd bare-repo &&
-#		git init --bare &&
-#		GIT_DIR=. git svn init "$svnrepo" &&
-#		git svn fetch ) &&
-#		rm -rf bare-repo
-#		
-# failed 20 among 25 test(s)
-1..25
-make[3]: [t9100-git-svn-basic.sh] Error 1 (ignored)
+ok 19 - init allows us to connect to another directory in the same repo
+ok 20 - dcommit $rev does not clobber current branch
+ok 21 - able to dcommit to a subdirectory
+ok 22 - dcommit should not fail with a touched file
+ok 23 - rebase should not fail with a touched file
+ok 24 - able to set-tree to a subdirectory
+ok 25 - git-svn works in a bare repository
+ok 26 - git-svn works in in a repository with a gitdir: link
+# passed all 26 test(s)
+1..26
 *** t9101-git-svn-props.sh ***
 ok 1 - checkout working copy from svn
 ok 2 - setup some commits to svn
 ok 3 - initialize git svn
-not ok - 4 fetch revisions from svn
-#	git svn fetch
-not ok - 5 test svn:keywords ignoring
-#	git checkout -b mybranch ${remotes_git_svn} &&
-#		echo Hi again >> kw.c &&
-#		git commit -a -m "test keywords ignoring" &&
-#		git svn set-tree ${remotes_git_svn}..mybranch &&
-#		git pull . ${remotes_git_svn}
-sed: Cannot open file kw.c.
-not ok - 6 raw $Id$ found in kw.c
-#	test '/* $Id$ */' = ''
+ok 4 - fetch revisions from svn
+ok 5 - test svn:keywords ignoring
+ok 6 - raw $Id$ found in kw.c
 ok 7 - propset CR on crlf files
-not ok - 8 fetch and pull latest from svn and checkout a new wc
-#	git svn fetch &&
-#		 git pull . ${remotes_git_svn} &&
-#		 svn_cmd co "$svnrepo" new_wc
-not ok - 9 Comparing crlf
-#	cmp crlf new_wc/crlf
-not ok - 10 Comparing ne_crlf
-#	cmp ne_crlf new_wc/ne_crlf
-not ok - 11 Comparing lf
-#	cmp lf new_wc/lf
-not ok - 12 Comparing ne_lf
-#	cmp ne_lf new_wc/ne_lf
-not ok - 13 Comparing cr
-#	cmp cr new_wc/cr
-not ok - 14 Comparing ne_cr
-#	cmp ne_cr new_wc/ne_cr
-not ok - 15 Comparing empty_cr
-#	cmp empty_cr new_wc/empty_cr
-not ok - 16 Comparing empty_lf
-#	cmp empty_lf new_wc/empty_lf
-not ok - 17 Comparing empty
-#	cmp empty new_wc/empty
-not ok - 18 Comparing empty_crlf
-#	cmp empty_crlf new_wc/empty_crlf
+ok 8 - fetch and pull latest from svn and checkout a new wc
+ok 9 - Comparing crlf
+ok 10 - Comparing ne_crlf
+ok 11 - Comparing lf
+ok 12 - Comparing ne_lf
+ok 13 - Comparing cr
+ok 14 - Comparing ne_cr
+ok 15 - Comparing empty_cr
+ok 16 - Comparing empty_lf
+ok 17 - Comparing empty
+ok 18 - Comparing empty_crlf
 ok 19 - Set CRLF on cr files
-not ok - 20 fetch and pull latest from svn
-#	git svn fetch && git pull . ${remotes_git_svn}
-fatal: Cannot open 'cr': No such file or directory
-fatal: Cannot open 'ne_cr': No such file or directory
-not ok - 21 CRLF + $Id$
-#	test 'f39bd49beefa1dff130e47c7a24777dfc3657ba2' = ''
-not ok - 22 CRLF + $Id$ (no newline)
-#	test '41c5e77993f143876592cd19b5e9a6f6d2e4ff8a' = ''
-not ok - 23 test show-ignore
-#	
-#		(
-#			cd test_wc &&
-#			mkdir -p deeply/nested/directory &&
-#			touch deeply/nested/directory/.keep &&
-#			svn_cmd add deeply &&
-#			svn_cmd up &&
-#			svn_cmd propset -R svn:ignore '
-#	no-such-file*
-#	' .
-#			svn_cmd commit -m 'propset svn:ignore'
-#		) &&
-#		git svn show-ignore > show-ignore.got &&
-#		cmp show-ignore.expect show-ignore.got
-#	
-not ok - 24 test create-ignore
-#	
-#		git svn fetch && git pull . remotes/git-svn &&
-#		git svn create-ignore &&
-#		cmp ./.gitignore create-ignore.expect &&
-#		cmp ./deeply/.gitignore create-ignore.expect &&
-#		cmp ./deeply/nested/.gitignore create-ignore.expect &&
-#		cmp ./deeply/nested/directory/.gitignore create-ignore.expect &&
-#		git ls-files -s | grep gitignore | cmp - create-ignore-index.expect
-#		
-not ok - 25 test propget
-#	
-#		git svn propget svn:ignore . | cmp - prop.expect &&
-#		cd deeply &&
-#		git svn propget svn:ignore . | cmp - ../prop.expect &&
-#		git svn propget svn:entry:committed-rev nested/directory/.keep 	  | cmp - ../prop2.expect &&
-#		git svn propget svn:ignore .. | cmp - ../prop.expect &&
-#		git svn propget svn:ignore nested/ | cmp - ../prop.expect &&
-#		git svn propget svn:ignore ./nested | cmp - ../prop.expect &&
-#		git svn propget svn:ignore .././deeply/nested | cmp - ../prop.expect
-#		
-not ok - 26 test proplist
-#	
-#		git svn proplist . | cmp - prop.expect &&
-#		git svn proplist nested/directory/.keep | cmp - prop2.expect
-#		
-# failed 21 among 26 test(s)
+ok 20 - fetch and pull latest from svn
+ok 21 - CRLF + $Id$
+ok 22 - CRLF + $Id$ (no newline)
+ok 23 - test show-ignore
+ok 24 - test create-ignore
+ok 25 - test propget
+ok 26 - test proplist
+# passed all 26 test(s)
 1..26
-make[3]: [t9101-git-svn-props.sh] Error 1 (ignored)
 *** t9102-git-svn-deep-rmdir.sh ***
 ok 1 - initialize repo
-not ok - 2 mirror via git svn
-#	
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		git checkout -f -b test-rmdir ${remotes_git_svn}
-#		
-not ok - 3 Try a commit on rmdir
-#	
-#		git rm -f deeply/nested/directory/number/2/another &&
-#		git commit -a -m "remove another" &&
-#		git svn set-tree --rmdir HEAD &&
-#		svn_cmd ls -R "$svnrepo" | grep ^deeply/nested/directory/number/1
-#		
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9102-git-svn-deep-rmdir.sh] Error 1 (ignored)
+ok 2 - mirror via git svn
+ok 3 - Try a commit on rmdir
+# passed all 3 test(s)
+1..3
 *** t9103-git-svn-tracked-directory-removed.sh ***
 ok 1 - make history for tracking
-not ok - 2 clone repo with git
-#	
-#		git svn clone -s "$svnrepo" x &&
-#		test -f x/FOLLOWME &&
-#		test ! -f x/README
-#	
-not ok - 3 make sure r2 still has old file
-#	
-#		cd x &&
-#			test -n "$(git svn find-rev r1)" &&
-#			git reset --hard $(git svn find-rev r1) &&
-#			test -f README &&
-#			test ! -f FOLLOWME &&
-#			test x$(git svn find-rev r2) = x
-#	
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9103-git-svn-tracked-directory-removed.sh] Error 1 (ignored)
+ok 2 - clone repo with git
+ok 3 - make sure r2 still has old file
+# passed all 3 test(s)
+1..3
 *** t9104-git-svn-follow-parent.sh ***
 ok 1 - initialize repo
-not ok - 2 init and fetch a moved directory
-#	
-#		git svn init --minimize-url -i thunk "$svnrepo"/thunk &&
-#		git svn fetch -i thunk &&
-#		test "`git rev-parse --verify refs/remotes/thunk@2`" \
-#	           = "`git rev-parse --verify refs/remotes/thunk~1`" &&
-#	        test "`git cat-file blob refs/remotes/thunk:readme |\
-#	                 sed -n -e "3p"`" = goodbye &&
-#		test -z "`git config --get svn-remote.svn.fetch \
-#		         "^trunk:refs/remotes/thunk@2$"`"
-#		
-not ok - 3 init and fetch from one svn-remote
-#	
-#	        git config svn-remote.svn.url "$svnrepo" &&
-#	        git config --add svn-remote.svn.fetch \
-#	          trunk:refs/remotes/svn/trunk &&
-#	        git config --add svn-remote.svn.fetch \
-#	          thunk:refs/remotes/svn/thunk &&
-#	        git svn fetch -i svn/thunk &&
-#		test "`git rev-parse --verify refs/remotes/svn/trunk`" \
-#	           = "`git rev-parse --verify refs/remotes/svn/thunk~1`" &&
-#	        test "`git cat-file blob refs/remotes/svn/thunk:readme |\
-#	                 sed -n -e "3p"`" = goodbye
-#	        
-not ok - 4 follow deleted parent
-#	
-#	        (svn_cmd cp -m "resurrecting trunk as junk" \
-#	               "$svnrepo"/trunk@2 "$svnrepo"/junk ||
-#	         svn cp -m "resurrecting trunk as junk" \
-#	               -r2 "$svnrepo"/trunk "$svnrepo"/junk) &&
-#	        git config --add svn-remote.svn.fetch \
-#	          junk:refs/remotes/svn/junk &&
-#	        git svn fetch -i svn/thunk &&
-#	        git svn fetch -i svn/junk &&
-#	        test -z "`git diff svn/junk svn/trunk`" &&
-#	        test "`git merge-base svn/junk svn/trunk`" \
-#	           = "`git rev-parse svn/trunk`"
-#	        
+ok 2 - init and fetch a moved directory
+ok 3 - init and fetch from one svn-remote
+ok 4 - follow deleted parent
 ok 5 - follow larger parent
-not ok - 6 follow higher-level parent
-#	
-#		svn mkdir -m "follow higher-level parent" "$svnrepo"/blob &&
-#		svn co "$svnrepo"/blob blob &&
-#		(
-#			cd blob &&
-#			echo hi > hi &&
-#			svn add hi &&
-#			svn commit -m "hihi"
-#		) &&
-#		svn mkdir -m "new glob at top level" "$svnrepo"/glob &&
-#		svn mv -m "move blob down a level" "$svnrepo"/blob "$svnrepo"/glob/blob &&
-#		git svn init --minimize-url -i blob "$svnrepo"/glob/blob &&
-#	        git svn fetch -i blob
-#	        
-not ok - 7 follow deleted directory
-#	
-#		svn_cmd mv -m "bye!" "$svnrepo"/glob/blob/hi "$svnrepo"/glob/blob/bye &&
-#		svn_cmd rm -m "remove glob" "$svnrepo"/glob &&
-#		git svn init --minimize-url -i glob "$svnrepo"/glob &&
-#		git svn fetch -i glob &&
-#		test "`git cat-file blob refs/remotes/glob:blob/bye`" = hi &&
-#		test "`git ls-tree refs/remotes/glob | wc -l `" -eq 1
-#		
-not ok - 8 follow-parent avoids deleting relevant info
-#	
-#		mkdir -p import/trunk/subversion/bindings/swig/perl/t &&
-#		for i in a b c ; do \
-#		  echo $i > import/trunk/subversion/bindings/swig/perl/$i.pm &&
-#		  echo _$i > import/trunk/subversion/bindings/swig/perl/t/$i.t; \
-#		done &&
-#		  echo "bad delete test" > \
-#		   import/trunk/subversion/bindings/swig/perl/t/larger-parent &&
-#		  echo "bad delete test 2" > \
-#		   import/trunk/subversion/bindings/swig/perl/another-larger &&
-#		(
-#			cd import &&
-#			svn import -m "r9270 test" . "$svnrepo"/r9270
-#		) &&
-#		svn_cmd co "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl r9270 &&
-#		(
-#			cd r9270 &&
-#			svn mkdir native &&
-#			svn mv t native/t &&
-#			for i in a b c
-#			do
-#				svn mv $i.pm native/$i.pm
-#			done &&
-#			echo z >>native/t/c.t &&
-#			poke native/t/c.t &&
-#			svn commit -m "reorg test"
-#		) &&
-#		git svn init --minimize-url -i r9270-t \
-#		  "$svnrepo"/r9270/trunk/subversion/bindings/swig/perl/native/t &&
-#		git svn fetch -i r9270-t &&
-#		test `git rev-list r9270-t | wc -l` -eq 2 &&
-#		test "`git ls-tree --name-only r9270-t~1`" = \
-#		     "`git ls-tree --name-only r9270-t`"
-#		
-not ok - 9 track initial change if it was only made to parent
-#	
-#		svn_cmd cp -m "wheee!" "$svnrepo"/r9270/trunk "$svnrepo"/r9270/drunk &&
-#		git svn init --minimize-url -i r9270-d \
-#		  "$svnrepo"/r9270/drunk/subversion/bindings/swig/perl/native/t &&
-#		git svn fetch -i r9270-d &&
-#		test `git rev-list r9270-d | wc -l` -eq 3 &&
-#		test "`git ls-tree --name-only r9270-t`" = \
-#		     "`git ls-tree --name-only r9270-d`" &&
-#		test "`git rev-parse r9270-t`" = \
-#		     "`git rev-parse r9270-d~1`"
-#		
-not ok - 10 follow-parent is atomic
-#	
-#		(
-#			cd wc &&
-#			svn_cmd up &&
-#			svn_cmd mkdir stunk &&
-#			echo "trunk stunk" > stunk/readme &&
-#			svn_cmd add stunk/readme &&
-#			svn_cmd ci -m "trunk stunk" &&
-#			echo "stunk like junk" >> stunk/readme &&
-#			svn_cmd ci -m "really stunk" &&
-#			echo "stink stank stunk" >> stunk/readme &&
-#			svn_cmd ci -m "even the grinch agrees"
-#		) &&
-#		svn_cmd copy -m "stunk flunked" "$svnrepo"/stunk "$svnrepo"/flunk &&
-#		{ svn cp -m "early stunk flunked too" \
-#			"$svnrepo"/stunk@17 "$svnrepo"/flunked ||
-#		svn_cmd cp -m "early stunk flunked too" \
-#			-r17 "$svnrepo"/stunk "$svnrepo"/flunked; } &&
-#		git svn init --minimize-url -i stunk "$svnrepo"/stunk &&
-#		git svn fetch -i stunk &&
-#		git update-ref refs/remotes/flunk@18 refs/remotes/stunk~2 &&
-#		git update-ref -d refs/remotes/stunk &&
-#		git config --unset svn-remote.svn.fetch stunk &&
-#		mkdir -p "$GIT_DIR"/svn/refs/remotes/flunk@18 &&
-#		rev_map=$(cd "$GIT_DIR"/svn/refs/remotes/stunk && ls .rev_map*) &&
-#		dd if="$GIT_DIR"/svn/refs/remotes/stunk/$rev_map \
-#		   of="$GIT_DIR"/svn/refs/remotes/flunk@18/$rev_map bs=24 count=1 &&
-#		rm -rf "$GIT_DIR"/svn/refs/remotes/stunk &&
-#		git svn init --minimize-url -i flunk "$svnrepo"/flunk &&
-#		git svn fetch -i flunk &&
-#		git svn init --minimize-url -i stunk "$svnrepo"/stunk &&
-#		git svn fetch -i stunk &&
-#		git svn init --minimize-url -i flunked "$svnrepo"/flunked &&
-#		git svn fetch -i flunked &&
-#		test "`git rev-parse --verify refs/remotes/flunk@18`" \
-#		   = "`git rev-parse --verify refs/remotes/stunk`" &&
-#		test "`git rev-parse --verify refs/remotes/flunk~1`" \
-#		   = "`git rev-parse --verify refs/remotes/stunk`" &&
-#		test "`git rev-parse --verify refs/remotes/flunked~1`" \
-#		   = "`git rev-parse --verify refs/remotes/stunk~1`"
-#		
-not ok - 11 track multi-parent paths
-#	
-#		svn_cmd cp -m "resurrect /glob" "$svnrepo"/r9270 "$svnrepo"/glob &&
-#		git svn multi-fetch &&
-#		test `git cat-file commit refs/remotes/glob | \
-#		       grep "^parent " | wc -l` -eq 2
-#		
-not ok - 12 multi-fetch continues to work
-#	
-#		git svn multi-fetch
-#		
-not ok - 13 multi-fetch works off a 'clean' repository
-#	
-#		rm -r "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" "$GIT_DIR/logs" &&
-#		mkdir "$GIT_DIR/svn" &&
-#		git svn multi-fetch
-#		
-# failed 11 among 13 test(s)
+ok 6 - follow higher-level parent
+ok 7 - follow deleted directory
+ok 8 - follow-parent avoids deleting relevant info
+ok 9 - track initial change if it was only made to parent
+ok 10 - follow-parent is atomic
+ok 11 - track multi-parent paths
+ok 12 - multi-fetch continues to work
+ok 13 - multi-fetch works off a 'clean' repository
+# passed all 13 test(s)
 1..13
-make[3]: [t9104-git-svn-follow-parent.sh] Error 1 (ignored)
 *** t9105-git-svn-commit-diff.sh ***
 ok 1 - initialize repo
-not ok - 2 test the commit-diff command
-#	
-#		test -n "$prev" && test -n "$head" &&
-#		git svn commit-diff -r1 "$prev" "$head" "$svnrepo" &&
-#		svn_cmd co "$svnrepo" wc &&
-#		cmp readme wc/readme
-#		
-not ok - 3 commit-diff to a sub-directory (with git svn config)
-#	
-#		svn_cmd import -m "sub-directory" import "$svnrepo"/subdir &&
-#		git svn init --minimize-url "$svnrepo"/subdir &&
-#		git svn fetch &&
-#		git svn commit-diff -r3 "$prev" "$head" &&
-#		svn_cmd cat "$svnrepo"/subdir/readme > readme.2 &&
-#		cmp readme readme.2
-#		
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9105-git-svn-commit-diff.sh] Error 1 (ignored)
+ok 2 - test the commit-diff command
+ok 3 - commit-diff to a sub-directory (with git svn config)
+# passed all 3 test(s)
+1..3
 *** t9106-git-svn-commit-diff-clobber.sh ***
 ok 1 - initialize repo
 ok 2 - commit change from svn side
-not ok - 3 commit conflicting change from git
-#	
-#		echo second line from git >> file &&
-#		git commit -a -m "second line from git" &&
-#		test_must_fail git svn commit-diff -r1 HEAD~1 HEAD "$svnrepo"
-#	
-not ok - 4 commit complementing change from git
-#	
-#		git reset --hard HEAD~1 &&
-#		echo second line from svn >> file &&
-#		git commit -a -m "second line from svn" &&
-#		echo third line from git >> file &&
-#		git commit -a -m "third line from git" &&
-#		git svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"
-#		
-not ok - 5 dcommit fails to commit because of conflict
-#	
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		git reset --hard refs/${remotes_git_svn} &&
-#		svn_cmd co "$svnrepo" t.svn &&
-#		(
-#			cd t.svn &&
-#			echo fourth line from svn >>file &&
-#			poke file &&
-#			svn_cmd commit -m "fourth line from svn"
-#		) &&
-#		rm -rf t.svn &&
-#		echo "fourth line from git" >> file &&
-#		git commit -a -m "fourth line from git" &&
-#		test_must_fail git svn dcommit
-#		
-not ok - 6 dcommit does the svn equivalent of an index merge
-#	
-#		git reset --hard refs/remotes/git-svn &&
-#		echo 'index merge' > file2 &&
-#		git update-index --add file2 &&
-#		git commit -a -m 'index merge' &&
-#		echo 'more changes' >> file2 &&
-#		git update-index file2 &&
-#		git commit -a -m 'more changes' &&
-#		git svn dcommit
-#		
+ok 3 - commit conflicting change from git
+ok 4 - commit complementing change from git
+ok 5 - dcommit fails to commit because of conflict
+ok 6 - dcommit does the svn equivalent of an index merge
 ok 7 - commit another change from svn side
-not ok - 8 multiple dcommit from git svn will not clobber svn
-#	
-#		git reset --hard refs/remotes/git-svn &&
-#		echo new file >> new-file &&
-#		git update-index --add new-file &&
-#		git commit -a -m 'new file' &&
-#		echo clobber > file &&
-#		git commit -a -m 'clobber' &&
-#		test_must_fail git svn dcommit
-#		
-not ok - 9 check that rebase really failed
-#	
-#		test -d .git/rebase-apply
-#	
-not ok - 10 resolve, continue the rebase and dcommit
-#	
-#		echo clobber and I really mean it > file &&
-#		git update-index file &&
-#		git rebase --continue &&
-#		git svn dcommit
-#		
-# failed 7 among 10 test(s)
+ok 8 - multiple dcommit from git svn will not clobber svn
+ok 9 - check that rebase really failed
+ok 10 - resolve, continue the rebase and dcommit
+# passed all 10 test(s)
 1..10
-make[3]: [t9106-git-svn-commit-diff-clobber.sh] Error 1 (ignored)
 *** t9107-git-svn-migrate.sh ***
-not ok - 1 setup old-looking metadata
-#	
-#		cp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&
-#		mkdir import &&
-#		(
-#			cd import &&
-#			for i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3
-#			do
-#				mkdir -p $i &&
-#				echo hello >>$i/README ||
-#				exit 1
-#			done &&
-#			svn_cmd import -m test . "$svnrepo"
-#		) &&
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		rm -rf "$GIT_DIR"/svn &&
-#		git update-ref refs/heads/git-svn-HEAD refs/${remotes_git_svn} &&
-#		git update-ref refs/heads/svn-HEAD refs/${remotes_git_svn} &&
-#		git update-ref -d refs/${remotes_git_svn} refs/${remotes_git_svn}
-#		
-fatal: Needed a single revision
-not ok - 2 git-svn-HEAD is a real HEAD
-#	test -n ''
-not ok - 3 initialize old-style (v0) git svn layout
-#	
-#		mkdir -p "$GIT_DIR"/git-svn/info "$GIT_DIR"/svn/info &&
-#		echo "$svnrepo" > "$GIT_DIR"/git-svn/info/url &&
-#		echo "$svnrepo" > "$GIT_DIR"/svn/info/url &&
-#		git svn migrate &&
-#		! test -d "$GIT_DIR"/git svn &&
-#		git rev-parse --verify refs/${remotes_git_svn}^0 &&
-#		git rev-parse --verify refs/remotes/svn^0 &&
-#		test "$(git config --get svn-remote.svn.url)" = "$svnrepo" &&
-#		test `git config --get svn-remote.svn.fetch` = \
-#	             ":refs/${remotes_git_svn}"
-#		
-not ok - 4 initialize a multi-repository repo
-#	
-#		git svn init "$svnrepo" -T trunk -t tags -b branches &&
-#		git config --get-all svn-remote.svn.fetch > fetch.out &&
-#		grep "^trunk:refs/remotes/trunk$" fetch.out &&
-#		test -n "`git config --get svn-remote.svn.branches \
-#		            "^branches/\*:refs/remotes/\*$"`" &&
-#		test -n "`git config --get svn-remote.svn.tags \
-#		            "^tags/\*:refs/remotes/tags/\*$"`" &&
-#		git config --unset svn-remote.svn.branches \
-#		                        "^branches/\*:refs/remotes/\*$" &&
-#		git config --unset svn-remote.svn.tags \
-#		                        "^tags/\*:refs/remotes/tags/\*$" &&
-#		git config --add svn-remote.svn.fetch "branches/a:refs/remotes/a" &&
-#		git config --add svn-remote.svn.fetch "branches/b:refs/remotes/b" &&
-#		for i in tags/0.1 tags/0.2 tags/0.3; do
-#			git config --add svn-remote.svn.fetch \
-#			                 $i:refs/remotes/$i || exit 1; done &&
-#		git config --get-all svn-remote.svn.fetch > fetch.out &&
-#		grep "^trunk:refs/remotes/trunk$" fetch.out &&
-#		grep "^branches/a:refs/remotes/a$" fetch.out &&
-#		grep "^branches/b:refs/remotes/b$" fetch.out &&
-#		grep "^tags/0\.1:refs/remotes/tags/0\.1$" fetch.out &&
-#		grep "^tags/0\.2:refs/remotes/tags/0\.2$" fetch.out &&
-#		grep "^tags/0\.3:refs/remotes/tags/0\.3$" fetch.out &&
-#		grep "^:refs/${remotes_git_svn}" fetch.out
-#		
-not ok - 5 multi-fetch works on partial urls + paths
-#	
-#		git svn multi-fetch &&
-#		for i in trunk a b tags/0.1 tags/0.2 tags/0.3; do
-#			git rev-parse --verify refs/remotes/$i^0 >> refs.out || exit 1;
-#		    done &&
-#		test -z "`sort < refs.out | uniq -d`" &&
-#		for i in trunk a b tags/0.1 tags/0.2 tags/0.3; do
-#		  for j in trunk a b tags/0.1 tags/0.2 tags/0.3; do
-#			if test $j != $i; then continue; fi
-#		    test -z "`git diff refs/remotes/$i 	                         refs/remotes/$j`" ||exit 1; done; done
-#		
-not ok - 6 migrate --minimize on old inited layout
-#	
-#		git config --unset-all svn-remote.svn.fetch &&
-#		git config --unset-all svn-remote.svn.url &&
-#		rm -rf "$GIT_DIR"/svn &&
-#		for i in `cat fetch.out`; do
-#			path=`expr $i : "\([^:]*\):.*$"`
-#			ref=`expr $i : "[^:]*:\(refs/remotes/.*\)$"`
-#			if test -z "$ref"; then continue; fi
-#			if test -n "$path"; then path="/$path"; fi
-#			( mkdir -p "$GIT_DIR"/svn/$ref/info/ &&
-#			echo "$svnrepo"$path > "$GIT_DIR"/svn/$ref/info/url ) || exit 1;
-#		done &&
-#		git svn migrate --minimize &&
-#		test -z "`git config -l | grep "^svn-remote\.git-svn\."`" &&
-#		git config --get-all svn-remote.svn.fetch > fetch.out &&
-#		grep "^trunk:refs/remotes/trunk$" fetch.out &&
-#		grep "^branches/a:refs/remotes/a$" fetch.out &&
-#		grep "^branches/b:refs/remotes/b$" fetch.out &&
-#		grep "^tags/0\.1:refs/remotes/tags/0\.1$" fetch.out &&
-#		grep "^tags/0\.2:refs/remotes/tags/0\.2$" fetch.out &&
-#		grep "^tags/0\.3:refs/remotes/tags/0\.3$" fetch.out &&
-#		grep "^:refs/${remotes_git_svn}" fetch.out
-#		
-not ok - 7 .rev_db auto-converted to .rev_map.UUID
-#	
-#		git svn fetch -i trunk &&
-#		test -z "$(ls "$GIT_DIR"/svn/refs/remotes/trunk/.rev_db.* 2>/dev/null)" &&
-#		expect="$(ls "$GIT_DIR"/svn/refs/remotes/trunk/.rev_map.*)" &&
-#		test -n "$expect" &&
-#		rev_db="$(echo $expect | sed -e "s,_map,_db,")" &&
-#		convert_to_rev_db "$expect" "$rev_db" &&
-#		rm -f "$expect" &&
-#		test -f "$rev_db" &&
-#		git svn fetch -i trunk &&
-#		test -z "$(ls "$GIT_DIR"/svn/refs/remotes/trunk/.rev_db.* 2>/dev/null)" &&
-#		test ! -e "$GIT_DIR"/svn/refs/remotes/trunk/.rev_db &&
-#		test -f "$expect"
-#		
-# failed 7 among 7 test(s)
+ok 1 - setup old-looking metadata
+ok 2 - git-svn-HEAD is a real HEAD
+ok 3 - initialize old-style (v0) git svn layout
+ok 4 - initialize a multi-repository repo
+ok 5 - multi-fetch works on partial urls + paths
+ok 6 - migrate --minimize on old inited layout
+ok 7 - .rev_db auto-converted to .rev_map.UUID
+# passed all 7 test(s)
 1..7
-make[3]: [t9107-git-svn-migrate.sh] Error 1 (ignored)
 *** t9108-git-svn-glob.sh ***
-not ok - 1 test refspec globbing
-#	
-#		mkdir -p trunk/src/a trunk/src/b trunk/doc &&
-#		echo "hello world" > trunk/src/a/readme &&
-#		echo "goodbye world" > trunk/src/b/readme &&
-#		svn_cmd import -m "initial" trunk "$svnrepo"/trunk &&
-#		svn_cmd co "$svnrepo" tmp &&
-#		(
-#			cd tmp &&
-#			mkdir branches tags &&
-#			svn_cmd add branches tags &&
-#			svn_cmd cp trunk branches/start &&
-#			svn_cmd commit -m "start a new branch" &&
-#			svn_cmd up &&
-#			echo "hi" >> branches/start/src/b/readme &&
-#			poke branches/start/src/b/readme &&
-#			echo "hey" >> branches/start/src/a/readme &&
-#			poke branches/start/src/a/readme &&
-#			svn_cmd commit -m "hi" &&
-#			svn_cmd up &&
-#			svn_cmd cp branches/start tags/end &&
-#			echo "bye" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			echo "aye" >> tags/end/src/a/readme &&
-#			poke tags/end/src/a/readme &&
-#			svn_cmd commit -m "the end" &&
-#			echo "byebye" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			svn_cmd commit -m "nothing to see here"
-#		) &&
-#		git config --add svn-remote.svn.url "$svnrepo" &&
-#		git config --add svn-remote.svn.fetch \
-#		                 "trunk/src/a:refs/remotes/trunk" &&
-#		git config --add svn-remote.svn.branches \
-#		                 "branches/*/src/a:refs/remotes/branches/*" &&
-#		git config --add svn-remote.svn.tags\
-#		                 "tags/*/src/a:refs/remotes/tags/*" &&
-#		git svn multi-fetch &&
-#		git log --pretty=oneline refs/remotes/tags/end | \
-#		    sed -e "s/^.\{41\}//" > output.end &&
-#		test_cmp expect.end output.end &&
-#		test "`git rev-parse refs/remotes/tags/end~1`" = \
-#			"`git rev-parse refs/remotes/branches/start`" &&
-#		test "`git rev-parse refs/remotes/branches/start~2`" = \
-#			"`git rev-parse refs/remotes/trunk`" &&
-#		test_must_fail git rev-parse refs/remotes/tags/end@3
-#		
-not ok - 2 test left-hand-side only globbing
-#	
-#		git config --add svn-remote.two.url "$svnrepo" &&
-#		git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk &&
-#		git config --add svn-remote.two.branches \
-#		                 "branches/*:refs/remotes/two/branches/*" &&
-#		git config --add svn-remote.two.tags \
-#		                 "tags/*:refs/remotes/two/tags/*" &&
-#		(
-#			cd tmp &&
-#			echo "try try" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			svn_cmd commit -m "try to try"
-#		) &&
-#		git svn fetch two &&
-#		test `git rev-list refs/remotes/two/tags/end | wc -l` -eq 6 &&
-#		test `git rev-list refs/remotes/two/branches/start | wc -l` -eq 3 &&
-#		test `git rev-parse refs/remotes/two/branches/start~2` = \
-#		     `git rev-parse refs/remotes/two/trunk` &&
-#		test `git rev-parse refs/remotes/two/tags/end~3` = \
-#		     `git rev-parse refs/remotes/two/branches/start` &&
-#		git log --pretty=oneline refs/remotes/two/tags/end | \
-#		    sed -e "s/^.\{41\}//" > output.two &&
-#		test_cmp expect.two output.two
-#		
+ok 1 - test refspec globbing
+ok 2 - test left-hand-side only globbing
 ok 3 - test disallow multi-globs
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9108-git-svn-glob.sh] Error 1 (ignored)
+# passed all 3 test(s)
+1..3
 *** t9109-git-svn-multi-glob.sh ***
-not ok - 1 test refspec globbing
-#	
-#		mkdir -p trunk/src/a trunk/src/b trunk/doc &&
-#		echo "hello world" > trunk/src/a/readme &&
-#		echo "goodbye world" > trunk/src/b/readme &&
-#		svn_cmd import -m "initial" trunk "$svnrepo"/trunk &&
-#		svn_cmd co "$svnrepo" tmp &&
-#		(
-#			cd tmp &&
-#			mkdir branches branches/v1 tags &&
-#			svn_cmd add branches tags &&
-#			svn_cmd cp trunk branches/v1/start &&
-#			svn_cmd commit -m "start a new branch" &&
-#			svn_cmd up &&
-#			echo "hi" >> branches/v1/start/src/b/readme &&
-#			poke branches/v1/start/src/b/readme &&
-#			echo "hey" >> branches/v1/start/src/a/readme &&
-#			poke branches/v1/start/src/a/readme &&
-#			svn_cmd commit -m "hi" &&
-#			svn_cmd up &&
-#			svn_cmd cp branches/v1/start tags/end &&
-#			echo "bye" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			echo "aye" >> tags/end/src/a/readme &&
-#			poke tags/end/src/a/readme &&
-#			svn_cmd commit -m "the end" &&
-#			echo "byebye" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			svn_cmd commit -m "nothing to see here"
-#		) &&
-#		git config --add svn-remote.svn.url "$svnrepo" &&
-#		git config --add svn-remote.svn.fetch \
-#		                 "trunk/src/a:refs/remotes/trunk" &&
-#		git config --add svn-remote.svn.branches \
-#		                 "branches/*/*/src/a:refs/remotes/branches/*/*" &&
-#		git config --add svn-remote.svn.tags\
-#		                 "tags/*/src/a:refs/remotes/tags/*" &&
-#		git svn multi-fetch &&
-#		git log --pretty=oneline refs/remotes/tags/end | \
-#		    sed -e "s/^.\{41\}//" > output.end &&
-#		test_cmp expect.end output.end &&
-#		test "`git rev-parse refs/remotes/tags/end~1`" = \
-#			"`git rev-parse refs/remotes/branches/v1/start`" &&
-#		test "`git rev-parse refs/remotes/branches/v1/start~2`" = \
-#			"`git rev-parse refs/remotes/trunk`" &&
-#		test_must_fail git rev-parse refs/remotes/tags/end@3
-#		
-not ok - 2 test left-hand-side only globbing
-#	
-#		git config --add svn-remote.two.url "$svnrepo" &&
-#		git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk &&
-#		git config --add svn-remote.two.branches \
-#		                 "branches/*/*:refs/remotes/two/branches/*/*" &&
-#		git config --add svn-remote.two.tags \
-#		                 "tags/*:refs/remotes/two/tags/*" &&
-#		(
-#			cd tmp &&
-#			echo "try try" >> tags/end/src/b/readme &&
-#			poke tags/end/src/b/readme &&
-#			svn_cmd commit -m "try to try"
-#		) &&
-#		git svn fetch two &&
-#		test `git rev-list refs/remotes/two/tags/end | wc -l` -eq 6 &&
-#		test `git rev-list refs/remotes/two/branches/v1/start | wc -l` -eq 3 &&
-#		test `git rev-parse refs/remotes/two/branches/v1/start~2` = \
-#		     `git rev-parse refs/remotes/two/trunk` &&
-#		test `git rev-parse refs/remotes/two/tags/end~3` = \
-#		     `git rev-parse refs/remotes/two/branches/v1/start` &&
-#		git log --pretty=oneline refs/remotes/two/tags/end | \
-#		    sed -e "s/^.\{41\}//" > output.two &&
-#		test_cmp expect.two output.two
-#		
-not ok - 3 test another branch
-#	
-#		(
-#			cd tmp &&
-#			mkdir branches/v2 &&
-#			svn_cmd add branches/v2 &&
-#			svn_cmd cp trunk branches/v2/start &&
-#			svn_cmd commit -m "Another versioned branch" &&
-#			svn_cmd up &&
-#			echo "hello" >> branches/v2/start/src/b/readme &&
-#			poke branches/v2/start/src/b/readme &&
-#			echo "howdy" >> branches/v2/start/src/a/readme &&
-#			poke branches/v2/start/src/a/readme &&
-#			svn_cmd commit -m "Changed 2 in v2/start" &&
-#			svn_cmd up &&
-#			svn_cmd cp branches/v2/start tags/next &&
-#			echo "bye" >> tags/next/src/b/readme &&
-#			poke tags/next/src/b/readme &&
-#			echo "aye" >> tags/next/src/a/readme &&
-#			poke tags/next/src/a/readme &&
-#			svn_cmd commit -m "adding more" &&
-#			echo "byebye" >> tags/next/src/b/readme &&
-#			poke tags/next/src/b/readme &&
-#			svn_cmd commit -m "adios"
-#		) &&
-#		git config --add svn-remote.four.url "$svnrepo" &&
-#		git config --add svn-remote.four.fetch trunk:refs/remotes/four/trunk &&
-#		git config --add svn-remote.four.branches \
-#		                 "branches/*/*:refs/remotes/four/branches/*/*" &&
-#		git config --add svn-remote.four.tags \
-#		                 "tags/*:refs/remotes/four/tags/*" &&
-#		git svn fetch four &&
-#		test `git rev-list refs/remotes/four/tags/next | wc -l` -eq 5 &&
-#		test `git rev-list refs/remotes/four/branches/v2/start | wc -l` -eq 3 &&
-#		test `git rev-parse refs/remotes/four/branches/v2/start~2` = \
-#		     `git rev-parse refs/remotes/four/trunk` &&
-#		test `git rev-parse refs/remotes/four/tags/next~2` = \
-#		     `git rev-parse refs/remotes/four/branches/v2/start` &&
-#		git log --pretty=oneline refs/remotes/four/tags/next | \
-#		    sed -e "s/^.\{41\}//" > output.four &&
-#		test_cmp expect.four output.four
-#		
+ok 1 - test refspec globbing
+ok 2 - test left-hand-side only globbing
+ok 3 - test another branch
 ok 4 - test disallow multiple globs
-# failed 3 among 4 test(s)
+# passed all 4 test(s)
 1..4
-make[3]: [t9109-git-svn-multi-glob.sh] Error 1 (ignored)
 *** t9110-git-svn-use-svm-props.sh ***
-not ok - 1 load svm repo
-#	
-#		svnadmin load -q "$rawsvnrepo" < "$TEST_DIRECTORY"/t9110/svm.dump &&
-#		git svn init --minimize-url -R arr -i bar "$svnrepo"/mirror/arr &&
-#		git svn init --minimize-url -R argh -i dir "$svnrepo"/mirror/argh &&
-#		git svn init --minimize-url -R argh -i e \
-#		  "$svnrepo"/mirror/argh/a/b/c/d/e &&
-#		git config svn.useSvmProps true &&
-#		git svn fetch --all
-#		
-not ok - 2 verify metadata for /bar
-#	
-#		git cat-file commit refs/remotes/bar | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~1 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~2 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~3 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~4 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~5 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-not ok - 3 verify metadata for /dir/a/b/c/d/e
-#	
-#		git cat-file commit refs/remotes/e | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-not ok - 4 verify metadata for /dir
-#	
-#		git cat-file commit refs/remotes/dir | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/dir~1 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
-Use '--' to separate paths from revisions
-not ok - 5 find commit based on SVN revision number
-#	
-#	        git svn find-rev r12 |
-#		    grep HEAD
-#	        
-not ok - 6 empty rebase
-#	
-#		git svn rebase
-#		
-# failed 6 among 6 test(s)
+ok 1 - load svm repo
+ok 2 - verify metadata for /bar
+ok 3 - verify metadata for /dir/a/b/c/d/e
+ok 4 - verify metadata for /dir
+ok 5 - find commit based on SVN revision number
+ok 6 - empty rebase
+# passed all 6 test(s)
 1..6
-make[3]: [t9110-git-svn-use-svm-props.sh] Error 1 (ignored)
 *** t9111-git-svn-use-svnsync-props.sh ***
-not ok - 1 load svnsync repo
-#	
-#		svnadmin load -q "$rawsvnrepo" < "$TEST_DIRECTORY"/t9111/svnsync.dump &&
-#		git svn init --minimize-url -R arr -i bar "$svnrepo"/bar &&
-#		git svn init --minimize-url -R argh -i dir "$svnrepo"/dir &&
-#		git svn init --minimize-url -R argh -i e "$svnrepo"/dir/a/b/c/d/e &&
-#		git config svn.useSvnsyncProps true &&
-#		git svn fetch --all
-#		
-not ok - 2 verify metadata for /bar
-#	
-#		git cat-file commit refs/remotes/bar | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@12 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~1 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@11 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~2 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@10 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~3 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@9 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~4 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@6 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/bar~5 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/bar@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-not ok - 3 verify metadata for /dir/a/b/c/d/e
-#	
-#		git cat-file commit refs/remotes/e | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir/a/b/c/d/e@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-not ok - 4 verify metadata for /dir
-#	
-#		git cat-file commit refs/remotes/dir | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir@2 161ce429-a9dd-4828-af4a-52023f968c89$' &&
-#		git cat-file commit refs/remotes/dir~1 | 	   grep '^git-svn-id: http://mayonaise/svnrepo/dir@1 161ce429-a9dd-4828-af4a-52023f968c89$'
-#		
-# failed 4 among 4 test(s)
+ok 1 - load svnsync repo
+ok 2 - verify metadata for /bar
+ok 3 - verify metadata for /dir/a/b/c/d/e
+ok 4 - verify metadata for /dir
+# passed all 4 test(s)
 1..4
-make[3]: [t9111-git-svn-use-svnsync-props.sh] Error 1 (ignored)
 *** t9112-git-svn-md5less-file.sh ***
 ok 1 - load svn dumpfile
 ok 2 - initialize git svn
-not ok - 3 fetch revisions from svn
-#	git svn fetch
-# failed 1 among 3 test(s)
-1..3
-make[3]: [t9112-git-svn-md5less-file.sh] Error 1 (ignored)
+ok 3 - fetch revisions from svn
+# passed all 3 test(s)
+1..3
 *** t9113-git-svn-dcommit-new-file.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping svnserve test. (set $SVNSERVE_PORT to enable)
 *** t9114-git-svn-dcommit-merge.sh ***
 ok 1 - setup svn repository
-not ok - 2 setup git mirror and merge
-#	
-#		git svn init "$svnrepo" -t tags -T trunk -b branches &&
-#		git svn fetch &&
-#		git checkout --track -b svn remotes/trunk &&
-#		git checkout -b merge &&
-#		echo new file > new_file &&
-#		git add new_file &&
-#		git commit -a -m "New file" &&
-#		echo hello >> README &&
-#		git commit -a -m "hello" &&
-#		echo add some stuff >> new_file &&
-#		git commit -a -m "add some stuff" &&
-#		git checkout svn &&
-#		mv -f README tmp &&
-#		echo friend > README &&
-#		cat tmp >> README &&
-#		git commit -a -m "friend" &&
-#		git pull . merge
-#		
-not ok - 3 verify pre-merge ancestry
-#	
-#		test x`git rev-parse --verify refs/heads/svn^2` = 	     x`git rev-parse --verify refs/heads/merge` &&
-#		git cat-file commit refs/heads/svn^ | grep '^friend$'
-#		
-not ok - 4 git svn dcommit merges
-#	
-#		git svn dcommit
-#		
-not ok - 5 verify post-merge ancestry
-#	
-#		test x`git rev-parse --verify refs/heads/svn` = 	     x`git rev-parse --verify refs/remotes/trunk ` &&
-#		test x`git rev-parse --verify refs/heads/svn^2` = 	     x`git rev-parse --verify refs/heads/merge` &&
-#		git cat-file commit refs/heads/svn^ | grep '^friend$'
-#		
-not ok - 6 verify merge commit message
-#	
-#		git rev-list --pretty=raw -1 refs/heads/svn | 	  grep "    Merge branch 'merge' into svn"
-#		
-# failed 5 among 6 test(s)
+ok 2 - setup git mirror and merge
+ok 3 - verify pre-merge ancestry
+ok 4 - git svn dcommit merges
+ok 5 - verify post-merge ancestry
+ok 6 - verify merge commit message
+# passed all 6 test(s)
 1..6
-make[3]: [t9114-git-svn-dcommit-merge.sh] Error 1 (ignored)
 *** t9115-git-svn-dcommit-funky-renames.sh ***
 ok 1 - load repository with strange names
-not ok - 2 init and fetch repository
-#	
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		git reset --hard git-svn
-#		
-not ok - 3 create file in existing ugly and empty dir
-#	
-#		mkdir -p "#{bad_directory_name}" &&
-#		echo hi > "#{bad_directory_name}/ foo" &&
-#		git update-index --add "#{bad_directory_name}/ foo" &&
-#		git commit -m "new file in ugly parent" &&
-#		git svn dcommit
-#		
-not ok - 4 rename ugly file
-#	
-#		git mv "#{bad_directory_name}/ foo" "file name with feces" &&
-#		git commit -m "rename ugly file" &&
-#		git svn dcommit
-#		
-not ok - 5 rename pretty file
-#	
-#		echo :x > pretty &&
-#		git update-index --add pretty &&
-#		git commit -m "pretty :x" &&
-#		git svn dcommit &&
-#		mkdir -p regular_dir_name &&
-#		git mv pretty regular_dir_name/pretty &&
-#		git commit -m "moved pretty file" &&
-#		git svn dcommit
-#		
-not ok - 6 rename pretty file into ugly one
-#	
-#		git mv regular_dir_name/pretty "#{bad_directory_name}/ booboo" &&
-#		git commit -m booboo &&
-#		git svn dcommit
-#		
-not ok - 7 add a file with plus signs
-#	
-#		echo .. > +_+ &&
-#		git update-index --add +_+ &&
-#		git commit -m plus &&
-#		mkdir gtk+ &&
-#		git mv +_+ gtk+/_+_ &&
-#		git commit -m plus_dir &&
-#		git svn dcommit
-#		
-not ok - 8 clone the repository to test rebase
-#	
-#		git svn clone "$svnrepo" test-rebase &&
-#		(
-#			cd test-rebase &&
-#			echo test-rebase >test-rebase &&
-#			git add test-rebase &&
-#			git commit -m test-rebase
-#		)
-#		
-not ok - 9 make a commit to test rebase
-#	
-#			echo test-rebase-main > test-rebase-main &&
-#			git add test-rebase-main &&
-#			git commit -m test-rebase-main &&
-#			git svn dcommit
-#		
-not ok - 10 git svn rebase works inside a fresh-cloned repository
-#	
-#		cd test-rebase &&
-#			git svn rebase &&
-#			test -e test-rebase-main &&
-#			test -e test-rebase
-#		
-# failed 9 among 10 test(s)
+ok 2 - init and fetch repository
+ok 3 - create file in existing ugly and empty dir
+ok 4 - rename ugly file
+ok 5 - rename pretty file
+ok 6 - rename pretty file into ugly one
+ok 7 - add a file with plus signs
+ok 8 - clone the repository to test rebase
+ok 9 - make a commit to test rebase
+ok 10 - git svn rebase works inside a fresh-cloned repository
+# passed all 10 test(s)
 1..10
-make[3]: [t9115-git-svn-dcommit-funky-renames.sh] Error 1 (ignored)
 *** t9116-git-svn-log.sh ***
-not ok - 1 setup repository and import
-#	
-#		mkdir import &&
-#		(
-#			cd import &&
-#			for i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3
-#			do
-#				mkdir -p $i &&
-#				echo hello >>$i/README ||
-#				exit 1
-#			done &&
-#			svn_cmd import -m test . "$svnrepo"
-#		) &&
-#		git svn init "$svnrepo" -T trunk -b branches -t tags &&
-#		git svn fetch &&
-#		git reset --hard trunk &&
-#		echo bye >> README &&
-#		git commit -a -m bye &&
-#		git svn dcommit &&
-#		git reset --hard a &&
-#		echo why >> FEEDME &&
-#		git update-index --add FEEDME &&
-#		git commit -m feedme &&
-#		git svn dcommit &&
-#		git reset --hard trunk &&
-#		echo aye >> README &&
-#		git commit -a -m aye &&
-#		git svn dcommit &&
-#		git reset --hard b &&
-#		echo spy >> README &&
-#		git commit -a -m spy &&
-#		echo try >> README &&
-#		git commit -a -m try &&
-#		git svn dcommit
-#		
-not ok - 2 run log
-#	
-#		git reset --hard a &&
-#		git svn log -r2 trunk | grep ^r2 &&
-#		git svn log -r4 trunk | grep ^r4 &&
-#		git svn log -r3 | grep ^r3
-#		
-not ok - 3 run log against a from trunk
-#	
-#		git reset --hard trunk &&
-#		git svn log -r3 a | grep ^r3
-#		
-not ok - 4 test ascending revision range
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
-#		
-not ok - 5 test ascending revision range with --show-commit
-#	
-#		git reset --hard trunk &&
-#		git svn log --show-commit -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
-#		
-not ok - 6 test ascending revision range with --show-commit (sha1)
-#	
-#		git svn find-rev r1 >expected-range-r1-r2-r4-sha1 &&
-#		git svn find-rev r2 >>expected-range-r1-r2-r4-sha1 &&
-#		git svn find-rev r4 >>expected-range-r1-r2-r4-sha1 &&
-#		git reset --hard trunk &&
-#		git svn log --show-commit -r 1:4 | grep '^r[0-9]' | cut -d'|' -f2 >out &&
-#		git rev-parse $(cat out) >actual &&
-#		test_cmp expected-range-r1-r2-r4-sha1 actual
-#		
-not ok - 7 test descending revision range
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4-r2-r1 -
-#		
-not ok - 8 test ascending revision range with unreachable revision
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2 -
-#		
-not ok - 9 test descending revision range with unreachable revision
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2-r1 -
-#		
-not ok - 10 test ascending revision range with unreachable upper boundary revision and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
-#		
-not ok - 11 test descending revision range with unreachable upper boundary revision and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
-#		
-not ok - 12 test ascending revision range with unreachable lower boundary revision and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
-#		
-not ok - 13 test descending revision range with unreachable lower boundary revision and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
-#		
-not ok - 14 test ascending revision range with unreachable boundary revisions and no commits
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 5:6 | test_cmp expected-separator -
-#		
-not ok - 15 test descending revision range with unreachable boundary revisions and no commits
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 6:5 | test_cmp expected-separator -
-#		
-not ok - 16 test ascending revision range with unreachable boundary revisions and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
-#		
-not ok - 17 test descending revision range with unreachable boundary revisions and 1 commit
-#	
-#		git reset --hard trunk &&
-#		git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
-#		
-# failed 17 among 17 test(s)
+ok 1 - setup repository and import
+ok 2 - run log
+ok 3 - run log against a from trunk
+ok 4 - test ascending revision range
+ok 5 - test ascending revision range with --show-commit
+ok 6 - test ascending revision range with --show-commit (sha1)
+ok 7 - test descending revision range
+ok 8 - test ascending revision range with unreachable revision
+ok 9 - test descending revision range with unreachable revision
+ok 10 - test ascending revision range with unreachable upper boundary revision and 1 commit
+ok 11 - test descending revision range with unreachable upper boundary revision and 1 commit
+ok 12 - test ascending revision range with unreachable lower boundary revision and 1 commit
+ok 13 - test descending revision range with unreachable lower boundary revision and 1 commit
+ok 14 - test ascending revision range with unreachable boundary revisions and no commits
+ok 15 - test descending revision range with unreachable boundary revisions and no commits
+ok 16 - test ascending revision range with unreachable boundary revisions and 1 commit
+ok 17 - test descending revision range with unreachable boundary revisions and 1 commit
+# passed all 17 test(s)
 1..17
-make[3]: [t9116-git-svn-log.sh] Error 1 (ignored)
 *** t9117-git-svn-init-clone.sh ***
 ok 1 - setup svnrepo
-not ok - 2 basic clone
-#	
-#		test ! -d trunk &&
-#		git svn clone "$svnrepo"/project/trunk &&
-#		test -d trunk/.git/svn &&
-#		test -e trunk/foo &&
-#		rm -rf trunk
-#		
-not ok - 3 clone to target directory
-#	
-#		test ! -d target &&
-#		git svn clone "$svnrepo"/project/trunk target &&
-#		test -d target/.git/svn &&
-#		test -e target/foo &&
-#		rm -rf target
-#		
-not ok - 4 clone with --stdlayout
-#	
-#		test ! -d project &&
-#		git svn clone -s "$svnrepo"/project &&
-#		test -d project/.git/svn &&
-#		test -e project/foo &&
-#		rm -rf project
-#		
-not ok - 5 clone to target directory with --stdlayout
-#	
-#		test ! -d target &&
-#		git svn clone -s "$svnrepo"/project target &&
-#		test -d target/.git/svn &&
-#		test -e target/foo &&
-#		rm -rf target
-#		
-# failed 4 among 5 test(s)
-1..5
-make[3]: [t9117-git-svn-init-clone.sh] Error 1 (ignored)
+ok 2 - basic clone
+ok 3 - clone to target directory
+ok 4 - clone with --stdlayout
+ok 5 - clone to target directory with --stdlayout
+ok 6 - init without -s/-T/-b/-t does not warn
+ok 7 - clone without -s/-T/-b/-t does not warn
+ok 8 - init with -s/-T/-b/-t assumes --prefix=origin/
+ok 9 - clone with -s/-T/-b/-t assumes --prefix=origin/
+ok 10 - init with -s/-T/-b/-t and --prefix "" still works
+ok 11 - clone with -s/-T/-b/-t and --prefix "" still works
+# passed all 11 test(s)
+1..11
 *** t9118-git-svn-funky-branch-names.sh ***
 ok 1 - setup svnrepo
-not ok - 2 test clone with funky branch names
-#	
-#		git svn clone -s "$svnrepo/pr ject" project &&
-#		(
-#			cd project &&
-#			git rev-parse "refs/remotes/fun%20plugin" &&
-#			git rev-parse "refs/remotes/more%20fun%20plugin!" &&
-#			git rev-parse "refs/remotes/$scary_ref" &&
-#			git rev-parse "refs/remotes/%2Eleading_dot" &&
-#			git rev-parse "refs/remotes/trailing_dot%2E" &&
-#			git rev-parse "refs/remotes/trailing_dotlock%2Elock" &&
-#			git rev-parse "refs/remotes/not-a%40{0}reflog"
-#		)
-#		
-not ok - 3 test dcommit to funky branch
-#	
-#		(
-#			cd project &&
-#			git reset --hard 'refs/remotes/more%20fun%20plugin!' &&
-#			echo hello >> foo &&
-#			git commit -m 'hello' -- foo &&
-#			git svn dcommit
-#		)
-#		
-not ok - 4 test dcommit to scary branch
-#	
-#		(
-#			cd project &&
-#			git reset --hard "refs/remotes/$scary_ref" &&
-#			echo urls are scary >> foo &&
-#			git commit -m "eep" -- foo &&
-#			git svn dcommit
-#		)
-#		
-not ok - 5 test dcommit to trailing_dotlock branch
-#	
-#		(
-#			cd project &&
-#			git reset --hard "refs/remotes/trailing_dotlock%2Elock" &&
-#			echo who names branches like this anyway? >> foo &&
-#			git commit -m "bar" -- foo &&
-#			git svn dcommit
-#		)
-#		
-# failed 4 among 5 test(s)
+ok 2 - test clone with funky branch names
+ok 3 - test dcommit to funky branch
+ok 4 - test dcommit to scary branch
+ok 5 - test dcommit to trailing_dotlock branch
+# passed all 5 test(s)
 1..5
-make[3]: [t9118-git-svn-funky-branch-names.sh] Error 1 (ignored)
 *** t9119-git-svn-info.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping svn-info test (SVN version: 1.7.19 not supported)
+1..0 # SKIP skipping svn-info test (SVN version: 1.7.20 not supported)
 *** t9120-git-svn-clone-with-percent-escapes.sh ***
 ok 1 - setup svnrepo
-not ok - 2 test clone with percent escapes
-#	
-#		git svn clone "$svnrepo/pr%20ject" clone &&
-#		(
-#			cd clone &&
-#			git rev-parse refs/${remotes_git_svn}
-#		)
-#	
+ok 2 - test clone with percent escapes
 ok 3 - svn checkout with percent escapes
 ok 4 - svn checkout with space
-not ok - 5 test clone trunk with percent escapes and minimize-url
-#	
-#		git svn clone --minimize-url "$svnrepo/pr%20ject/trunk" minimize &&
-#		(
-#			cd minimize &&
-#			git rev-parse refs/${remotes_git_svn}
-#		)
-#	
-not ok - 6 test clone trunk with percent escapes
-#	
-#		git svn clone "$svnrepo/pr%20ject/trunk" trunk &&
-#		(
-#			cd trunk &&
-#			git rev-parse refs/${remotes_git_svn}
-#		)
-#	
-not ok - 7 test clone --stdlayout with percent escapes
-#	
-#		git svn clone --stdlayout "$svnrepo/pr%20ject" percent &&
-#		(
-#			cd percent &&
-#			git rev-parse refs/remotes/trunk^0 &&
-#			git rev-parse refs/remotes/b^0 &&
-#			git rev-parse refs/remotes/tags/v1^0
-#		)
-#	
-not ok - 8 test clone -s with unescaped space
-#	
-#		git svn clone -s "$svnrepo/pr ject" space &&
-#		(
-#			cd space &&
-#			git rev-parse refs/remotes/trunk^0 &&
-#			git rev-parse refs/remotes/b^0 &&
-#			git rev-parse refs/remotes/tags/v1^0
-#		)
-#	
-# failed 5 among 8 test(s)
+ok 5 - test clone trunk with percent escapes and minimize-url
+ok 6 - test clone trunk with percent escapes
+ok 7 - test clone --stdlayout with percent escapes
+ok 8 - test clone -s with unescaped space
+# passed all 8 test(s)
 1..8
-make[3]: [t9120-git-svn-clone-with-percent-escapes.sh] Error 1 (ignored)
 *** t9121-git-svn-fetch-renamed-dir.sh ***
 ok 1 - load repository with renamed directory
-not ok - 2 init and fetch repository
-#	
-#		git svn init "$svnrepo/newname" &&
-#		git svn fetch
-#		
-# failed 1 among 2 test(s)
+ok 2 - init and fetch repository
+# passed all 2 test(s)
 1..2
-make[3]: [t9121-git-svn-fetch-renamed-dir.sh] Error 1 (ignored)
 *** t9122-git-svn-author.sh ***
 ok 1 - setup svn repository
-not ok - 2 interact with it via git svn
-#	
-#		mkdir work.git &&
-#		(
-#			cd work.git &&
-#			git svn init "$svnrepo"
-#			git svn fetch &&
-#	
-#			echo modification >file &&
-#			test_tick &&
-#			git commit -a -m second &&
-#	
-#			test_tick &&
-#			git svn dcommit &&
-#	
-#			echo "further modification" >file &&
-#			test_tick &&
-#			git commit -a -m third &&
-#	
-#			test_tick &&
-#			git svn --add-author-from dcommit &&
-#	
-#			echo "yet further modification" >file &&
-#			test_tick &&
-#			git commit -a -m fourth &&
-#	
-#			test_tick &&
-#			git svn --add-author-from --use-log-author dcommit &&
-#	
-#			git log &&
-#	
-#			git show -s HEAD^^ >../actual.2 &&
-#			git show -s HEAD^  >../actual.3 &&
-#			git show -s HEAD   >../actual.4
-#	
-#		) &&
-#	
-#		# Make sure that --add-author-from without --use-log-author
-#		# did not affect the authorship information
-#		myself=$(grep "^Author: " actual.2) &&
-#		unaffected=$(grep "^Author: " actual.3) &&
-#		test "z$myself" = "z$unaffected" &&
-#	
-#		# Make sure lack of --add-author-from did not add cruft
-#		! grep "^    From: A U Thor " actual.2 &&
-#	
-#		# Make sure --add-author-from added cruft
-#		grep "^    From: A U Thor " actual.3 &&
-#		grep "^    From: A U Thor " actual.4 &&
-#	
-#		# Make sure --add-author-from with --use-log-author affected
-#		# the authorship information
-#		grep "^Author: A U Thor " actual.4 &&
-#	
-#		# Make sure there are no commit messages with excess blank lines
-#		test $(grep "^ " actual.2 | wc -l) = 3 &&
-#		test $(grep "^ " actual.3 | wc -l) = 5 &&
-#		test $(grep "^ " actual.4 | wc -l) = 5 &&
-#	
-#		# Make sure there are no svn commit messages with excess blank lines
-#		(
-#			cd work.svn &&
-#			svn_cmd up &&
-#			
-#			test $(svn_cmd log -r2:2 | wc -l) = 5 &&
-#			test $(svn_cmd log -r4:4 | wc -l) = 7
-#		)
-#	
-# failed 1 among 2 test(s)
+ok 2 - interact with it via git svn
+# passed all 2 test(s)
 1..2
-make[3]: [t9122-git-svn-author.sh] Error 1 (ignored)
 *** t9123-git-svn-rebuild-with-rewriteroot.sh ***
-not ok - 1 init, fetch and checkout repository
-#	
-#		git svn init --rewrite-root=http://invalid.invalid/ "$svnrepo" &&
-#		git svn fetch &&
-#		git checkout -b mybranch ${remotes_git_svn}
-#		
-not ok - 2 remove rev_map
-#	
-#		rm "$GIT_SVN_DIR"/.rev_map.*
-#		
-not ok - 3 rebuild rev_map
-#	
-#		git svn rebase >/dev/null
-#		
-# failed 3 among 3 test(s)
-1..3
-make[3]: [t9123-git-svn-rebuild-with-rewriteroot.sh] Error 1 (ignored)
+ok 1 - init, fetch and checkout repository
+ok 2 - remove rev_map
+ok 3 - rebuild rev_map
+# passed all 3 test(s)
+1..3
 *** t9124-git-svn-dcommit-auto-props.sh ***
-not ok - 1 initialize git svn
-#	
-#		mkdir import &&
-#		(
-#			cd import &&
-#			echo foo >foo &&
-#			svn_cmd import -m "import for git svn" . "$svnrepo"
-#		) &&
-#		rm -rf import &&
-#		git svn init "$svnrepo" &&
-#		git svn fetch
-#	
+ok 1 - initialize git svn
 ok 2 - enable auto-props config
-not ok - 3 add files matching auto-props
-#	
-#		echo "#!$SHELL_PATH" >exec1.sh &&
-#		chmod +x exec1.sh &&
-#		echo "hello" >hello.txt &&
-#		echo bar >bar &&
-#		git add exec1.sh hello.txt bar &&
-#		git commit -m "files for enabled auto-props" &&
-#		git svn dcommit --config-dir=user
-#	
+ok 3 - add files matching auto-props
 ok 4 - disable auto-props config
-not ok - 5 add files matching disabled auto-props
-#	
-#		echo "#$SHELL_PATH" >exec2.sh &&
-#		chmod +x exec2.sh &&
-#		echo "world" >world.txt &&
-#		echo zot >zot &&
-#		git add exec2.sh world.txt zot &&
-#		git commit -m "files for disabled auto-props" &&
-#		git svn dcommit --config-dir=user
-#	
-not ok - 6 check resulting svn repository
-#	
-#	(
-#		mkdir work &&
-#		cd work &&
-#		svn_cmd co "$svnrepo" &&
-#		cd svnrepo &&
-#	
-#		# Check properties from first commit.
-#		test "x$(svn_cmd propget svn:executable exec1.sh)" = "x*" &&
-#		test "x$(svn_cmd propget svn:mime-type exec1.sh)" = \
-#		     "xapplication/x-shellscript" &&
-#		test "x$(svn_cmd propget svn:mime-type hello.txt)" = "xtext/plain" &&
-#		test "x$(svn_cmd propget svn:eol-style hello.txt)" = "xnative" &&
-#		test "x$(svn_cmd propget svn:mime-type bar)" = "x" &&
-#	
-#		# Check properties from second commit.
-#		test "x$(svn_cmd propget svn:executable exec2.sh)" = "x*" &&
-#		test "x$(svn_cmd propget svn:mime-type exec2.sh)" = "x" &&
-#		test "x$(svn_cmd propget svn:mime-type world.txt)" = "x" &&
-#		test "x$(svn_cmd propget svn:eol-style world.txt)" = "x" &&
-#		test "x$(svn_cmd propget svn:mime-type zot)" = "x"
-#	)
-#	
-not ok - 7 check renamed file
-#	
-#		test -d user &&
-#		generate_auto_props yes > user/config &&
-#		git mv foo foo.sh &&
-#		git commit -m "foo => foo.sh" &&
-#		git svn dcommit --config-dir=user &&
-#		(
-#			cd work/svnrepo &&
-#			svn_cmd up &&
-#			test ! -e foo &&
-#			test -e foo.sh &&
-#			test "x$(svn_cmd propget svn:mime-type foo.sh)" = \
-#			     "xapplication/x-shellscript" &&
-#			test "x$(svn_cmd propget svn:eol-style foo.sh)" = "xLF"
-#		)
-#	
-# failed 5 among 7 test(s)
+ok 5 - add files matching disabled auto-props
+ok 6 - check resulting svn repository
+ok 7 - check renamed file
+# passed all 7 test(s)
 1..7
-make[3]: [t9124-git-svn-dcommit-auto-props.sh] Error 1 (ignored)
 *** t9125-git-svn-multi-glob-branch-names.sh ***
 ok 1 - setup svnrepo
-not ok - 2 test clone with multi-glob in branch names
-#	
-#		git svn clone -T trunk -b branches/*/* -t tags \
-#		              "$svnrepo/project" project &&
-#		(cd project &&
-#			git rev-parse "refs/remotes/v14.1/beta" &&
-#			git rev-parse "refs/remotes/v14.1/gold"
-#		)
-#		
-not ok - 3 test dcommit to multi-globbed branch
-#	
-#		(cd project &&
-#		git reset --hard 'refs/remotes/v14.1/gold' &&
-#		echo hello >> foo &&
-#		git commit -m 'hello' -- foo &&
-#		git svn dcommit
-#		)
-#		
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9125-git-svn-multi-glob-branch-names.sh] Error 1 (ignored)
+ok 2 - test clone with multi-glob in branch names
+ok 3 - test dcommit to multi-globbed branch
+# passed all 3 test(s)
+1..3
 *** t9126-git-svn-follow-deleted-readded-directory.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping svnserve test. (set $SVNSERVE_PORT to enable)
 *** t9127-git-svn-partial-rebuild.sh ***
-not ok - 1 initialize svnrepo
-#	
-#		mkdir import &&
-#		(
-#			(cd import &&
-#			mkdir trunk branches tags &&
-#			(cd trunk &&
-#			echo foo > foo
-#			) &&
-#			svn_cmd import -m "import for git-svn" . "$svnrepo" >/dev/null &&
-#			svn_cmd copy "$svnrepo"/trunk "$svnrepo"/branches/a \
-#				-m "created branch a"
-#			) &&
-#			rm -rf import &&
-#			svn_cmd co "$svnrepo"/trunk trunk &&
-#			(cd trunk &&
-#			echo bar >> foo &&
-#			svn_cmd ci -m "updated trunk"
-#			) &&
-#			svn_cmd co "$svnrepo"/branches/a a &&
-#			(cd a &&
-#			echo baz >> a &&
-#			svn_cmd add a &&
-#			svn_cmd ci -m "updated a"
-#			) &&
-#			git svn init --stdlayout "$svnrepo"
-#		)
-#	
-not ok - 2 import an early SVN revision into git
-#	
-#		git svn fetch -r1:2
-#	
-not ok - 3 make full git mirror of SVN
-#	
-#		mkdir mirror &&
-#		(
-#			(cd mirror &&
-#			git init &&
-#			git svn init --stdlayout "$svnrepo" &&
-#			git svn fetch
-#			)
-#		)
-#	
-not ok - 4 fetch from git mirror and partial-rebuild
-#	
-#		git config --add remote.origin.url "file://$PWD/mirror/.git" &&
-#		git config --add remote.origin.fetch refs/remotes/*:refs/remotes/* &&
-#		git fetch origin &&
-#		git svn fetch
-#	
-# failed 4 among 4 test(s)
+ok 1 - initialize svnrepo
+ok 2 - import an early SVN revision into git
+ok 3 - make full git mirror of SVN
+ok 4 - fetch from git mirror and partial-rebuild
+# passed all 4 test(s)
 1..4
-make[3]: [t9127-git-svn-partial-rebuild.sh] Error 1 (ignored)
 *** t9128-git-svn-cmd-branch.sh ***
 ok 1 - initialize svnrepo
-not ok - 2 import into git
-#	
-#		git svn init --stdlayout "$svnrepo" &&
-#		git svn fetch &&
-#		git checkout remotes/trunk
-#	
-not ok - 3 git svn branch tests
-#	
-#		git svn branch a &&
-#		base=$(git rev-parse HEAD:) &&
-#		test $base = $(git rev-parse remotes/a:) &&
-#		git svn branch -m "created branch b blah" b &&
-#		test $base = $(git rev-parse remotes/b:) &&
-#		test_must_fail git branch -m "no branchname" &&
-#		git svn branch -n c &&
-#		test_must_fail git rev-parse remotes/c &&
-#		test_must_fail git svn branch a &&
-#		git svn branch -t tag1 &&
-#		test $base = $(git rev-parse remotes/tags/tag1:) &&
-#		git svn branch --tag tag2 &&
-#		test $base = $(git rev-parse remotes/tags/tag2:) &&
-#		git svn tag tag3 &&
-#		test $base = $(git rev-parse remotes/tags/tag3:) &&
-#		git svn tag -m "created tag4 foo" tag4 &&
-#		test $base = $(git rev-parse remotes/tags/tag4:) &&
-#		test_must_fail git svn tag -m "no tagname" &&
-#		git svn tag -n tag5 &&
-#		test_must_fail git rev-parse remotes/tags/tag5 &&
-#		test_must_fail git svn tag tag1
-#	
-not ok - 4 branch uses correct svn-remote
-#	
-#		(svn_cmd co "$svnrepo" svn &&
-#		cd svn &&
-#		mkdir mirror &&
-#		svn_cmd add mirror &&
-#		svn_cmd copy trunk mirror/ &&
-#		svn_cmd copy tags mirror/ &&
-#		svn_cmd copy branches mirror/ &&
-#		svn_cmd ci -m "made mirror" ) &&
-#		rm -rf svn &&
-#		git svn init -s -R mirror --prefix=mirror/ "$svnrepo"/mirror &&
-#		git svn fetch -R mirror &&
-#		git checkout mirror/trunk &&
-#		base=$(git rev-parse HEAD:) &&
-#		git svn branch -m "branch in mirror" d &&
-#		test $base = $(git rev-parse remotes/mirror/d:) &&
-#		test_must_fail git rev-parse remotes/d
-#	
-# failed 3 among 4 test(s)
+ok 2 - import into git
+ok 3 - git svn branch tests
+ok 4 - branch uses correct svn-remote
+# passed all 4 test(s)
 1..4
-make[3]: [t9128-git-svn-cmd-branch.sh] Error 1 (ignored)
 *** t9129-git-svn-i18n-commitencoding.sh ***
-not ok - 1 ISO8859-1 setup
-#	
-#			mkdir $H &&
-#			svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
-#			git svn clone "$svnrepo"/$H $H
-#		
-not ok - 2 eucJP setup
-#	
-#			mkdir $H &&
-#			svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
-#			git svn clone "$svnrepo"/$H $H
-#		
-not ok - 3 ISO-2022-JP setup
-#	
-#			mkdir $H &&
-#			svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
-#			git svn clone "$svnrepo"/$H $H
-#		
-not ok - 4 ISO8859-1 commit on git side
-#	
-#		(
-#			cd $H &&
-#			git config i18n.commitencoding $H &&
-#			git checkout -b t refs/remotes/git-svn &&
-#			echo $H >F &&
-#			git add F &&
-#			git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H"
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 5 eucJP commit on git side
-#	
-#		(
-#			cd $H &&
-#			git config i18n.commitencoding $H &&
-#			git checkout -b t refs/remotes/git-svn &&
-#			echo $H >F &&
-#			git add F &&
-#			git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H"
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 6 ISO-2022-JP commit on git side
-#	
-#		(
-#			cd $H &&
-#			git config i18n.commitencoding $H &&
-#			git checkout -b t refs/remotes/git-svn &&
-#			echo $H >F &&
-#			git add F &&
-#			git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H"
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 7 ISO8859-1 dcommit to svn
-#	
-#		(
-#			cd $H &&
-#			git svn dcommit &&
-#			git cat-file commit HEAD | grep git-svn-id: &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H" &&
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 8 eucJP dcommit to svn
-#	
-#		(
-#			cd $H &&
-#			git svn dcommit &&
-#			git cat-file commit HEAD | grep git-svn-id: &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H" &&
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 9 ISO-2022-JP dcommit to svn
-#	
-#		(
-#			cd $H &&
-#			git svn dcommit &&
-#			git cat-file commit HEAD | grep git-svn-id: &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H" &&
-#			compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
-#		)
-#		
-not ok - 10 ISO-8859-1 should match UTF-8 in svn
-#	
-#		(
-#			cd ISO8859-1 &&
-#			compare_svn_head_with "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
-#		)
-#	
-not ok - 11 eucJP should match UTF-8 in svn
-#	
-#			(
-#				cd $H &&
-#				compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
-#			)
-#		
-not ok - 12 ISO-2022-JP should match UTF-8 in svn
-#	
-#			(
-#				cd $H &&
-#				compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
-#			)
-#		
-# failed 12 among 12 test(s)
+ok 1 - ISO8859-1 setup
+ok 2 - eucJP setup
+ok 3 - ISO-2022-JP setup
+ok 4 - ISO8859-1 commit on git side
+ok 5 - eucJP commit on git side
+ok 6 - ISO-2022-JP commit on git side
+ok 7 - ISO8859-1 dcommit to svn
+ok 8 - eucJP dcommit to svn
+ok 9 - ISO-2022-JP dcommit to svn
+ok 10 - ISO-8859-1 should match UTF-8 in svn
+ok 11 - eucJP should match UTF-8 in svn
+ok 12 - ISO-2022-JP should match UTF-8 in svn
+# passed all 12 test(s)
 1..12
-make[3]: [t9129-git-svn-i18n-commitencoding.sh] Error 1 (ignored)
 *** t9130-git-svn-authors-file.sh ***
 ok 1 - setup svnrepo
-not ok - 2 start import with incomplete authors file
-#	
-#		test_must_fail git svn clone --authors-file=svn-authors "$svnrepo" x
-#		
-not ok - 3 imported 2 revisions successfully
-#	
-#		(
-#			cd x
-#			test "`git rev-list refs/remotes/git-svn | wc -l`" -eq 2 &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn | \
-#			  grep "^author BBBBBBB BBBBBBB <bb@example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \
-#			  grep "^author AAAAAAA AAAAAAA <aa@example\.com> "
-#		)
-#		
-not ok - 4 continues to import once authors have been added
-#	
-#		(
-#			cd x
-#			git svn fetch --authors-file=../svn-authors &&
-#			test "`git rev-list refs/remotes/git-svn | wc -l`" -eq 4 &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn | \
-#			  grep "^author DDDDDDD DDDDDDD <dd@example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \
-#			  grep "^author CCCCCCC CCCCCCC <cc@example\.com> "
-#		)
-#		
-not ok - 5 authors-file against globs
-#	
-#		svn_cmd mkdir -m globs --username aa \
-#		  "$svnrepo"/aa/trunk "$svnrepo"/aa/branches "$svnrepo"/aa/tags &&
-#		git svn clone --authors-file=svn-authors -s "$svnrepo"/aa aa-work &&
-#		for i in bb ee cc
-#		do
-#			branch="aa/branches/$i"
-#			svn_cmd mkdir -m "$branch" --username $i "$svnrepo/$branch"
-#		done
-#		
+ok 2 - start import with incomplete authors file
+ok 3 - imported 2 revisions successfully
+ok 4 - continues to import once authors have been added
+ok 5 - authors-file against globs
 ok 6 - fetch fails on ee
-not ok - 7 failure happened without negative side effects
-#	
-#		(
-#			cd aa-work &&
-#			test 6 -eq "`tmp_config_get svn-remote.svn.branches-maxRev`" &&
-#			test 6 -eq "`tmp_config_get svn-remote.svn.tags-maxRev`"
-#		)
-#		
-not ok - 8 fetch continues after authors-file is fixed
-#	
-#		(
-#			cd aa-work &&
-#			git svn fetch --authors-file=../svn-authors &&
-#			test 8 -eq "`tmp_config_get svn-remote.svn.branches-maxRev`" &&
-#			test 8 -eq "`tmp_config_get svn-remote.svn.tags-maxRev`"
-#		)
-#		
-not ok - 9 fresh clone with svn.authors-file in config
-#	
-#		(
-#			rm -r "$GIT_DIR" &&
-#			test x = x"$(git config svn.authorsfile)" &&
-#			test_config="$HOME"/.gitconfig &&
-#			sane_unset GIT_DIR &&
-#			sane_unset GIT_CONFIG &&
-#			git config --global \
-#			  svn.authorsfile "$HOME"/svn-authors &&
-#			test x"$HOME"/svn-authors = x"$(git config svn.authorsfile)" &&
-#			git svn clone "$svnrepo" gitconfig.clone &&
-#			cd gitconfig.clone &&
-#			nr_ex=$(git log | grep "^Author:.*example.com" | wc -l) &&
-#			nr_rev=$(git rev-list HEAD | wc -l) &&
-#			test $nr_rev -eq $nr_ex
-#		)
-#	
-# failed 7 among 9 test(s)
+ok 7 - failure happened without negative side effects
+ok 8 - fetch continues after authors-file is fixed
+ok 9 - fresh clone with svn.authors-file in config
+# passed all 9 test(s)
 1..9
-make[3]: [t9130-git-svn-authors-file.sh] Error 1 (ignored)
 *** t9131-git-svn-empty-symlink.sh ***
 ok 1 - load svn dumpfile
-not ok - 2 clone using git svn
-#	git svn clone -r1 "$svnrepo" x
+ok 2 - clone using git svn
 ok 3 - enable broken symlink workaround
-not ok - 4 "bar" is an empty file
-#	test -f x/bar && ! test -s x/bar
-not ok - 5 get "bar" => symlink fix from svn
-#	(cd x && git svn rebase)
-not ok - 6 "bar" becomes a symlink
-#	test -h x/bar
-not ok - 7 clone using git svn
-#	git svn clone -r1 "$svnrepo" y
+ok 4 - "bar" is an empty file
+ok 5 - get "bar" => symlink fix from svn
+ok 6 - "bar" becomes a symlink
+ok 7 - clone using git svn
 ok 8 - disable broken symlink workaround
-not ok - 9 "bar" is an empty file
-#	test -f y/bar && ! test -s y/bar
-not ok - 10 get "bar" => symlink fix from svn
-#	(cd y && git svn rebase)
+ok 9 - "bar" is an empty file
+ok 10 - get "bar" => symlink fix from svn
 ok 11 - "bar" does not become a symlink
-not ok - 12 clone using git svn
-#	git svn clone -r1 "$svnrepo" z
-not ok - 13 "bar" is an empty file
-#	test -f z/bar && ! test -s z/bar
-not ok - 14 get "bar" => symlink fix from svn
-#	(cd z && git svn rebase)
+ok 12 - clone using git svn
+ok 13 - "bar" is an empty file
+ok 14 - get "bar" => symlink fix from svn
 ok 15 - "bar" does not become a symlink
-# failed 10 among 15 test(s)
+# passed all 15 test(s)
 1..15
-make[3]: [t9131-git-svn-empty-symlink.sh] Error 1 (ignored)
 *** t9132-git-svn-broken-symlink.sh ***
 ok 1 - load svn dumpfile
-not ok - 2 clone using git svn
-#	git svn clone -r1 "$svnrepo" x
-not ok - 3 "bar" is a symlink that points to "asdf"
-#	
-#		test -L x/bar &&
-#		(cd x && test xasdf = x"`git cat-file blob HEAD:bar`")
-#	
-not ok - 4 get "bar" => symlink fix from svn
-#	
-#		(cd x && git svn rebase)
-#	
-not ok - 5 "bar" remains a proper symlink
-#	
-#		test -L x/bar &&
-#		(cd x && test xdoink = x"`git cat-file blob HEAD:bar`")
-#	
-# failed 4 among 5 test(s)
+ok 2 - clone using git svn
+ok 3 - "bar" is a symlink that points to "asdf"
+ok 4 - get "bar" => symlink fix from svn
+ok 5 - "bar" remains a proper symlink
+# passed all 5 test(s)
 1..5
-make[3]: [t9132-git-svn-broken-symlink.sh] Error 1 (ignored)
 *** t9133-git-svn-nested-git-repo.sh ***
 ok 1 - setup repo with a git repo inside it
-not ok - 2 clone an SVN repo containing a git repo
-#	
-#		git svn clone "$svnrepo" g &&
-#		echo a > expect &&
-#		test_cmp expect g/a
-#	
+ok 2 - clone an SVN repo containing a git repo
 ok 3 - SVN-side change outside of .git
-not ok - 4 update git svn-cloned repo
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			echo a > expect &&
-#			echo b >> expect &&
-#			test_cmp a expect &&
-#			rm expect
-#		)
-#	
+ok 4 - update git svn-cloned repo
 ok 5 - SVN-side change inside of .git
-not ok - 6 update git svn-cloned repo
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			echo a > expect &&
-#			echo b >> expect &&
-#			test_cmp a expect &&
-#			rm expect
-#		)
-#	
+ok 6 - update git svn-cloned repo
 ok 7 - SVN-side change in and out of .git
-not ok - 8 update git svn-cloned repo again
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			echo a > expect &&
-#			echo b >> expect &&
-#			echo c >> expect &&
-#			test_cmp a expect &&
-#			rm expect
-#		)
-#	
-# failed 4 among 8 test(s)
+ok 8 - update git svn-cloned repo again
+# passed all 8 test(s)
 1..8
-make[3]: [t9133-git-svn-nested-git-repo.sh] Error 1 (ignored)
 *** t9134-git-svn-ignore-paths.sh ***
 ok 1 - setup test repository
-not ok - 2 clone an SVN repository with ignored www directory
-#	
-#		git svn clone --ignore-paths="^www" "$svnrepo" g &&
-#		echo test_qqq > expect &&
-#		for i in g/*/*.txt; do cat $i >> expect2; done &&
-#		test_cmp expect expect2
-#	
-not ok - 3 init+fetch an SVN repository with ignored www directory
-#	
-#		git svn init "$svnrepo" c &&
-#		( cd c && git svn fetch --ignore-paths="^www" ) &&
-#		rm expect2 &&
-#		echo test_qqq > expect &&
-#		for i in c/*/*.txt; do cat $i >> expect2; done &&
-#		test_cmp expect expect2
-#	
+ok 2 - clone an SVN repository with ignored www directory
+ok 3 - init+fetch an SVN repository with ignored www directory
 ok 4 - verify ignore-paths config saved by clone
 ok 5 - SVN-side change outside of www
-not ok - 6 update git svn-cloned repo (config ignore)
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			printf "test_qqq
-#	b
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
-not ok - 7 update git svn-cloned repo (option ignore)
-#	
-#		(
-#			cd c &&
-#			git svn rebase --ignore-paths="^www" &&
-#			printf "test_qqq
-#	b
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
+ok 6 - update git svn-cloned repo (config ignore)
+ok 7 - update git svn-cloned repo (option ignore)
 ok 8 - SVN-side change inside of ignored www
-not ok - 9 update git svn-cloned repo (config ignore)
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			printf "test_qqq
-#	b
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
-not ok - 10 update git svn-cloned repo (option ignore)
-#	
-#		(
-#			cd c &&
-#			git svn rebase --ignore-paths="^www" &&
-#			printf "test_qqq
-#	b
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
+ok 9 - update git svn-cloned repo (config ignore)
+ok 10 - update git svn-cloned repo (option ignore)
 ok 11 - SVN-side change in and out of ignored www
-not ok - 12 update git svn-cloned repo again (config ignore)
-#	
-#		(
-#			cd g &&
-#			git svn rebase &&
-#			printf "test_qqq
-#	b
-#	ygg
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
-not ok - 13 update git svn-cloned repo again (option ignore)
-#	
-#		(
-#			cd c &&
-#			git svn rebase --ignore-paths="^www" &&
-#			printf "test_qqq
-#	b
-#	ygg
-#	" > expect &&
-#			for i in */*.txt; do cat $i >> expect2; done &&
-#			test_cmp expect2 expect &&
-#			rm expect expect2
-#		)
-#	
-# failed 8 among 13 test(s)
+ok 12 - update git svn-cloned repo again (config ignore)
+ok 13 - update git svn-cloned repo again (option ignore)
+# passed all 13 test(s)
 1..13
-make[3]: [t9134-git-svn-ignore-paths.sh] Error 1 (ignored)
 *** t9135-git-svn-moved-branch-empty-file.sh ***
 ok 1 - load svn dumpfile
-not ok - 2 clone using git svn
-#	git svn clone -s "$svnrepo" x
-not ok - 3 test that b1 exists and is empty
-#	
-#		(
-#			cd x &&
-#			git reset --hard branch-c &&
-#			test -f b1 &&
-#			! test -s b1
-#		)
-#		
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9135-git-svn-moved-branch-empty-file.sh] Error 1 (ignored)
+ok 2 - clone using git svn
+ok 3 - test that b1 exists and is empty
+# passed all 3 test(s)
+1..3
 *** t9136-git-svn-recreated-branch-empty-file.sh ***
 ok 1 - load svn dumpfile
-not ok - 2 clone using git svn
-#	git svn clone -s "$svnrepo" x
-# failed 1 among 2 test(s)
+ok 2 - clone using git svn
+# passed all 2 test(s)
 1..2
-make[3]: [t9136-git-svn-recreated-branch-empty-file.sh] Error 1 (ignored)
 *** t9137-git-svn-dcommit-clobber-series.sh ***
-not ok - 1 initialize repo
-#	
-#		mkdir import &&
-#		(cd import &&
-#		awk "BEGIN { for (i = 1; i < 64; i++) { print i } }" > file
-#		svn_cmd import -m "initial" . "$svnrepo"
-#		) &&
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		test -e file
-#		
-not ok - 2 (supposedly) non-conflicting change from SVN
-#	
-#		test x"`sed -n -e 58p < file`" = x58 &&
-#		test x"`sed -n -e 61p < file`" = x61 &&
-#		svn_cmd co "$svnrepo" tmp &&
-#		(cd tmp &&
-#			perl -i.bak -p -e "s/^58$/5588/" file &&
-#			perl -i.bak -p -e "s/^61$/6611/" file &&
-#			poke file &&
-#			test x"`sed -n -e 58p < file`" = x5588 &&
-#			test x"`sed -n -e 61p < file`" = x6611 &&
-#			svn_cmd commit -m "58 => 5588, 61 => 6611"
-#		)
-#		
+ok 1 - initialize repo
+ok 2 - (supposedly) non-conflicting change from SVN
 ok 3 - some unrelated changes to git
-not ok - 4 change file but in unrelated area
-#	
-#		test x"`sed -n -e 4p < file`" = x4 &&
-#		test x"`sed -n -e 7p < file`" = x7 &&
-#		perl -i.bak -p -e 's/^4$/4444/' file &&
-#		perl -i.bak -p -e 's/^7$/7777/' file &&
-#		test x"`sed -n -e 4p < file`" = x4444 &&
-#		test x"`sed -n -e 7p < file`" = x7777 &&
-#		git commit -m '4 => 4444, 7 => 7777' file &&
-#		git svn dcommit &&
-#		svn_cmd up tmp &&
-#		cd tmp &&
-#			test x"`sed -n -e 4p < file`" = x4444 &&
-#			test x"`sed -n -e 7p < file`" = x7777 &&
-#			test x"`sed -n -e 58p < file`" = x5588 &&
-#			test x"`sed -n -e 61p < file`" = x6611
-#		
+ok 4 - change file but in unrelated area
 ok 5 - attempt to dcommit with a dirty index
-# failed 3 among 5 test(s)
+# passed all 5 test(s)
 1..5
-make[3]: [t9137-git-svn-dcommit-clobber-series.sh] Error 1 (ignored)
 *** t9138-git-svn-authors-prog.sh ***
-ok 1 - setup svnrepo
-not ok - 2 import authors with prog and file
-#	
-#		git svn clone --authors-prog=./svn-authors-prog \
-#		    --authors-file=svn-authors "$svnrepo" x
-#		
-not ok - 3 imported 6 revisions successfully
-#	
-#		(
-#			cd x
-#			test "`git rev-list refs/remotes/git-svn | wc -l`" -eq 6
-#		)
-#		
-not ok - 4 authors-prog ran correctly
-#	
-#		(
-#			cd x
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \
-#			  grep "^author ee-foo <ee-foo@example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~2 | \
-#			  grep "^author dd <dd@sub\.example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~3 | \
-#			  grep "^author cc <cc@sub\.example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~4 | \
-#			  grep "^author bb <bb@example\.com> " &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn~5 | \
-#			  grep "^author aa <aa@example\.com> "
-#		)
-#		
-not ok - 5 authors-file overrode authors-prog
-#	
-#		(
-#			cd x
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn | \
-#			  grep "^author FFFFFFF FFFFFFF <fFf@other\.example\.com> "
-#		)
-#		
-not ok - 6 authors-prog handled special characters in username
-#	
-#		svn mkdir -m bad --username "xyz; touch evil" "$svnrepo"/bad &&
-#		(
-#			cd x &&
-#			git svn --authors-prog=../svn-authors-prog fetch &&
-#			git rev-list -1 --pretty=raw refs/remotes/git-svn |
-#			grep "^author xyz; touch evil <xyz; touch evil@example\.com> " &&
-#			! test -f evil
-#		)
-#	
-# failed 5 among 6 test(s)
-1..6
-make[3]: [t9138-git-svn-authors-prog.sh] Error 1 (ignored)
+ok 1 - svn-authors setup
+ok 2 - setup svnrepo
+ok 3 - import authors with prog and file
+ok 4 - imported 6 revisions successfully
+ok 5 - authors-prog ran correctly
+ok 6 - authors-file overrode authors-prog
+ok 7 - authors-prog handled special characters in username
+# passed all 7 test(s)
+1..7
 *** t9139-git-svn-non-utf8-commitencoding.sh ***
-not ok - 1 ISO8859-1 setup
-#	
-#			mkdir $H &&
-#			svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
-#			git svn clone "$svnrepo"/$H $H
-#		
-not ok - 2 eucJP setup
-#	
-#			mkdir $H &&
-#			svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
-#			git svn clone "$svnrepo"/$H $H
-#		
-not ok - 3 ISO8859-1 commit on git side
-#	
-#		(
-#			cd $H &&
-#			git config i18n.commitencoding $H &&
-#			git checkout -b t refs/remotes/git-svn &&
-#			echo $H >F &&
-#			git add F &&
-#			git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H"
-#		)
-#		
-not ok - 4 eucJP commit on git side
-#	
-#		(
-#			cd $H &&
-#			git config i18n.commitencoding $H &&
-#			git checkout -b t refs/remotes/git-svn &&
-#			echo $H >F &&
-#			git add F &&
-#			git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
-#			E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
-#			test "z$E" = "z$H"
-#		)
-#		
+ok 1 - ISO8859-1 setup
+ok 2 - eucJP setup
+ok 3 - ISO8859-1 commit on git side
+ok 4 - eucJP commit on git side
 ok 5 - ISO8859-1 dcommit to svn
 ok 6 - eucJP dcommit to svn
-# failed 4 among 6 test(s)
+# passed all 6 test(s)
 1..6
-make[3]: [t9139-git-svn-non-utf8-commitencoding.sh] Error 1 (ignored)
 *** t9140-git-svn-reset.sh ***
 ok 1 - setup test repository
-not ok - 2 clone SVN repository with hidden directory
-#	
-#		git svn init "$svnrepo" g &&
-#		( cd g && git svn fetch --ignore-paths="^hid" )
-#	
+ok 2 - clone SVN repository with hidden directory
 ok 3 - modify hidden file in SVN repo
-not ok - 4 fetch fails on modified hidden file
-#	
-#		( cd g &&
-#		  git svn find-rev refs/remotes/git-svn > ../expect &&
-#		  test_must_fail git svn fetch 2> ../errors &&
-#		  git svn find-rev refs/remotes/git-svn > ../expect2 ) &&
-#		fgrep "not found in commit" errors &&
-#		test_cmp expect expect2
-#	
-not ok - 5 reset unwinds back to r1
-#	
-#		( cd g &&
-#		  git svn reset -r1 &&
-#		  git svn find-rev refs/remotes/git-svn > ../expect2 ) &&
-#		echo 1 >expect &&
-#		test_cmp expect expect2
-#	
-not ok - 6 refetch succeeds not ignoring any files
-#	
-#		( cd g &&
-#		  git svn fetch &&
-#		  git svn rebase &&
-#		  fgrep "mod hidden" hid/hid.txt
-#		)
-#	
-# failed 4 among 6 test(s)
+ok 4 - fetch fails on modified hidden file
+ok 5 - reset unwinds back to r1
+ok 6 - refetch succeeds not ignoring any files
+# passed all 6 test(s)
 1..6
-make[3]: [t9140-git-svn-reset.sh] Error 1 (ignored)
 *** t9141-git-svn-multiple-branches.sh ***
 ok 1 - setup svnrepo
-not ok - 2 clone multiple branch and tag paths
-#	
-#		git svn clone -T trunk \
-#			      -b b_one/* --branches b_two/* \
-#			      -t tags_A/* --tags tags_B \
-#			      "$svnrepo/project" git_project &&
-#		( cd git_project &&
-#			git rev-parse refs/remotes/first &&
-#			git rev-parse refs/remotes/second &&
-#			git rev-parse refs/remotes/1 &&
-#			git rev-parse refs/remotes/2 &&
-#			git rev-parse refs/remotes/tags/1.0 &&
-#			git rev-parse refs/remotes/tags/2.0 &&
-#			git rev-parse refs/remotes/tags/3.0 &&
-#			git rev-parse refs/remotes/tags/4.0 &&
-#			git rev-parse refs/remotes/tags/v5 &&
-#			git rev-parse refs/remotes/tags/v6 &&
-#			git rev-parse refs/remotes/tags/v7 &&
-#			git rev-parse refs/remotes/tags/v8
-#		)
-#	
+ok 2 - clone multiple branch and tag paths
 ok 3 - Multiple branch or tag paths require -d
-not ok - 4 create new branches and tags
-#	
-#		( cd git_project &&
-#			git svn branch -m "New branch 1" -d b_one New1 ) &&
-#		( cd svn_project &&
-#			svn_cmd up && test -e b_one/New1/a.file ) &&
-#	
-#		( cd git_project &&
-#			git svn branch -m "New branch 2" -d b_two New2 ) &&
-#		( cd svn_project &&
-#			svn_cmd up && test -e b_two/New2/a.file ) &&
-#	
-#		( cd git_project &&
-#			git svn branch -t -m "New tag 1" -d tags_A Tag1 ) &&
-#		( cd svn_project &&
-#			svn_cmd up && test -e tags_A/Tag1/a.file ) &&
-#	
-#		( cd git_project &&
-#			git svn tag -m "New tag 2" -d tags_B Tag2 ) &&
-#		( cd svn_project &&
-#			svn_cmd up && test -e tags_B/Tag2/a.file )
-#	
-# failed 2 among 4 test(s)
+ok 4 - create new branches and tags
+# passed all 4 test(s)
 1..4
-make[3]: [t9141-git-svn-multiple-branches.sh] Error 1 (ignored)
 *** t9142-git-svn-shallow-clone.sh ***
 ok 1 - setup test repository
-not ok - 2 clone trunk with "-r HEAD"
-#	
-#		git svn clone -r HEAD "$svnrepo/trunk" g &&
-#		( cd g && git rev-parse --symbolic --verify HEAD )
-#	
-# failed 1 among 2 test(s)
+ok 2 - clone trunk with "-r HEAD"
+# passed all 2 test(s)
 1..2
-make[3]: [t9142-git-svn-shallow-clone.sh] Error 1 (ignored)
 *** t9143-git-svn-gc.sh ***
 ok 1 - setup directories and test repo
 ok 2 - checkout working copy from svn
 ok 3 - set some properties to create an unhandled.log file
 ok 4 - Setup repo
-not ok - 5 Fetch repo
-#	git svn fetch
-not ok - 6 make backup copy of unhandled.log
-#	
-#		 cp .git/svn/refs/remotes/git-svn/unhandled.log tmp
-#		
+ok 5 - Fetch repo
+ok 6 - make backup copy of unhandled.log
 ok 7 - create leftover index
 ok 8 - git svn gc runs
 ok 9 - git svn index removed
-not ok - 10 git svn gc does not change unhandled.log files
-#	
-#		 test_cmp .git/svn/refs/remotes/git-svn/unhandled.log tmp/unhandled.log
-#		
-# failed 3 among 10 test(s)
-1..10
-make[3]: [t9143-git-svn-gc.sh] Error 1 (ignored)
+ok 10 - git svn gc produces a valid gzip file
+ok 11 - git svn gc does not change unhandled.log files
+# passed all 11 test(s)
+1..11
 *** t9144-git-svn-old-rev_map.sh ***
-not ok - 1 setup test repository with old layout
-#	
-#		mkdir i &&
-#		(cd i && > a) &&
-#		svn_cmd import -m- i "$svnrepo" &&
-#		git svn init "$svnrepo" &&
-#		git svn fetch &&
-#		test -d .git/svn/refs/remotes/git-svn/ &&
-#		! test -e .git/svn/git-svn/ &&
-#		mv .git/svn/refs/remotes/git-svn .git/svn/ &&
-#		rm -r .git/svn/refs
-#	
-not ok - 2 old layout continues to work
-#	
-#		svn_cmd import -m- i "$svnrepo/b" &&
-#		git svn rebase &&
-#		echo a >> b/a &&
-#		git add b/a &&
-#		git commit -m- -a &&
-#		git svn dcommit &&
-#		! test -d .git/svn/refs/ &&
-#		test -e .git/svn/git-svn/
-#	
-# failed 2 among 2 test(s)
+ok 1 - setup test repository with old layout
+ok 2 - old layout continues to work
+# passed all 2 test(s)
 1..2
-make[3]: [t9144-git-svn-old-rev_map.sh] Error 1 (ignored)
 *** t9145-git-svn-master-branch.sh ***
 ok 1 - setup test repository
-not ok - 2 git svn clone --stdlayout sets up trunk as master
-#	
-#		git svn clone -s "$svnrepo" g &&
-#		(
-#			cd g &&
-#			test x`git rev-parse --verify refs/remotes/trunk^0` = \
-#			     x`git rev-parse --verify refs/heads/master^0`
-#		)
-#	
-# failed 1 among 2 test(s)
+ok 2 - git svn clone --stdlayout sets up trunk as master
+# passed all 2 test(s)
 1..2
-make[3]: [t9145-git-svn-master-branch.sh] Error 1 (ignored)
 *** t9146-git-svn-empty-dirs.sh ***
 ok 1 - initialize repo
-not ok - 2 clone
-#	git svn clone "$svnrepo" cloned
-not ok - 3 empty directories exist
-#	
-#		(
-#			cd cloned &&
-#			for i in a b c d d/e d/e/f "weird file name"
-#			do
-#				if ! test -d "$i"
-#				then
-#					echo >&2 "$i does not exist"
-#					exit 1
-#				fi
-#			done
-#		)
-#	
-not ok - 4 option automkdirs set to false
-#	
-#		(
-#			git svn init "$svnrepo" cloned-no-mkdirs &&
-#			cd cloned-no-mkdirs &&
-#			git config svn-remote.svn.automkdirs false &&
-#			git svn fetch &&
-#			for i in a b c d d/e d/e/f "weird file name"
-#			do
-#				if test -d "$i"
-#				then
-#					echo >&2 "$i exists"
-#					exit 1
-#				fi
-#			done
-#		)
-#	
+ok 2 - clone
+ok 3 - empty directories exist
+ok 4 - option automkdirs set to false
 ok 5 - more emptiness
-not ok - 6 git svn rebase creates empty directory
-#	
-#		( cd cloned && git svn rebase ) &&
-#		test -d cloned/"! !"
-#	
-not ok - 7 git svn mkdirs recreates empty directories
-#	
-#		(
-#			cd cloned &&
-#			rm -r * &&
-#			git svn mkdirs &&
-#			for i in a b c d d/e d/e/f "weird file name" "! !"
-#			do
-#				if ! test -d "$i"
-#				then
-#					echo >&2 "$i does not exist"
-#					exit 1
-#				fi
-#			done
-#		)
-#	
-not ok - 8 git svn mkdirs -r works
-#	
-#		(
-#			cd cloned &&
-#			rm -r * &&
-#			git svn mkdirs -r7 &&
-#			for i in a b c d d/e d/e/f "weird file name"
-#			do
-#				if ! test -d "$i"
-#				then
-#					echo >&2 "$i does not exist"
-#					exit 1
-#				fi
-#			done
-#	
-#			if test -d "! !"
-#			then
-#				echo >&2 "$i should not exist"
-#				exit 1
-#			fi
-#	
-#			git svn mkdirs -r8 &&
-#			if ! test -d "! !"
-#			then
-#				echo >&2 "$i not exist"
-#				exit 1
-#			fi
-#		)
-#	
+ok 6 - git svn rebase creates empty directory
+ok 7 - git svn mkdirs recreates empty directories
+ok 8 - git svn mkdirs -r works
 ok 9 - initialize trunk
-not ok - 10 clone trunk
-#	git svn clone -s "$svnrepo" trunk
-not ok - 11 empty directories in trunk exist
-#	
-#		(
-#			cd trunk &&
-#			for i in a "weird file name"
-#			do
-#				if ! test -d "$i"
-#				then
-#					echo >&2 "$i does not exist"
-#					exit 1
-#				fi
-#			done
-#		)
-#	
+ok 10 - clone trunk
+ok 11 - empty directories in trunk exist
 ok 12 - remove a top-level directory from svn
-not ok - 13 removed top-level directory does not exist
-#	
-#		git svn clone "$svnrepo" removed &&
-#		test ! -e removed/d
-#	
-#	
+ok 13 - removed top-level directory does not exist
 ok 14 - git svn gc-ed files work
-# failed 9 among 14 test(s)
+# passed all 14 test(s)
 1..14
-make[3]: [t9146-git-svn-empty-dirs.sh] Error 1 (ignored)
+*** t9147-git-svn-include-paths.sh ***
+ok 1 - setup test repository
+ok 2 - clone an SVN repository with filter to include qqq directory
+ok 3 - init+fetch an SVN repository with included qqq directory
+ok 4 - verify include-paths config saved by clone
+ok 5 - SVN-side change outside of www
+ok 6 - update git svn-cloned repo (config include)
+ok 7 - update git svn-cloned repo (option include)
+ok 8 - SVN-side change inside of ignored www
+ok 9 - update git svn-cloned repo (config include)
+ok 10 - update git svn-cloned repo (option include)
+ok 11 - SVN-side change in and out of included qqq
+ok 12 - update git svn-cloned repo again (config include)
+ok 13 - update git svn-cloned repo again (option include)
+# passed all 13 test(s)
+1..13
+*** t9148-git-svn-propset.sh ***
+ok 1 - initialize git svn
+ok 2 - fetch revisions from svn
+ok 3 - add props top level
+ok 4 - add multiple props
+ok 5 - add props subdir
+ok 6 - add props relative
+# passed all 6 test(s)
+1..6
 *** t9150-svk-mergetickets.sh ***
-not ok - 1 load svk depot
-#	
-#		svnadmin load -q '$(@D)/t/trash directory.t9150-svk-mergetickets/svnrepo' 	  < '$(@D)/t/t9150/svk-merge.dump' &&
-#		git svn init --minimize-url -R svkmerge 	  --rewrite-root=http://svn.example.org 	  -T trunk -b branches 'file://$(@D)/t/trash directory.t9150-svk-mergetickets/svnrepo' &&
-#		git svn fetch --all
-#		
-fatal: Not a valid object name HEAD
-not ok - 2 svk merges were represented coming in
-#	
-#		[ 0 -eq 2 ]
-#		
-# failed 2 among 2 test(s)
+ok 1 - load svk depot
+ok 2 - svk merges were represented coming in
+# passed all 2 test(s)
 1..2
-make[3]: [t9150-svk-mergetickets.sh] Error 1 (ignored)
 *** t9151-svn-mergeinfo.sh ***
-not ok - 1 load svn dump
-#	
-#		svnadmin load -q '$(@D)/t/trash directory.t9151-svn-mergeinfo/svnrepo' 	  < '$(@D)/t/t9151/svn-mergeinfo.dump' &&
-#		git svn init --minimize-url -R svnmerge 	  --rewrite-root=http://svn.example.org 	  -T trunk -b branches 'file://$(@D)/t/trash directory.t9151-svn-mergeinfo/svnrepo' &&
-#		git svn fetch --all
-#		
+ok 1 - load svn dump
 ok 2 - all svn merges became git merge commits
 ok 3 - cherry picks did not become git merge commits
 ok 4 - svn non-merge merge commits did not become git merge commits
-not ok - 5 commit made to merged branch is reachable from the merge
-#	
-#		before_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2") &&
-#		merge_commit=$(git rev-list --all --grep="Merge trunk to b2") &&
-#		not_reachable=$(git rev-list -1 $before_commit --not $merge_commit) &&
-#		[ -z "$not_reachable" ]
-#		
-not ok - 6 merging two branches in one commit is detected correctly
-#	
-#		f1_commit=$(git rev-list --all --grep="make f1 branch from trunk") &&
-#		f2_commit=$(git rev-list --all --grep="make f2 branch from trunk") &&
-#		merge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk") &&
-#		not_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit) &&
-#		[ -z "$not_reachable" ]
-#		
+ok 5 - commit made to merged branch is reachable from the merge
+ok 6 - merging two branches in one commit is detected correctly
 not ok 7 - everything got merged in the end # TODO known breakage
 # still have 1 known breakage(s)
-# failed 3 among remaining 6 test(s)
+# passed all remaining 6 test(s)
 1..7
-make[3]: [t9151-svn-mergeinfo.sh] Error 1 (ignored)
 *** t9152-svn-empty-dirs-after-gc.sh ***
 ok 1 - initialize repo
-not ok - 2 clone
-#	git svn clone "$svnrepo" cloned
+ok 2 - clone
 ok 3 - git svn gc runs
-not ok - 4 git svn mkdirs recreates empty directories after git svn gc
-#	
-#		(
-#			cd cloned &&
-#			rm -r * &&
-#			git svn mkdirs &&
-#			for i in a b c d d/e d/e/f "weird file name"
-#			do
-#				if ! test -d "$i"
-#				then
-#					echo >&2 "$i does not exist"
-#					exit 1
-#				fi
-#			done
-#		)
-#	
-# failed 2 among 4 test(s)
+ok 4 - git svn mkdirs recreates empty directories after git svn gc
+# passed all 4 test(s)
 1..4
-make[3]: [t9152-svn-empty-dirs-after-gc.sh] Error 1 (ignored)
 *** t9153-git-svn-rewrite-uuid.sh ***
-not ok - 1 load svn repo
-#	
-#		svnadmin load -q '$(@D)/t/trash directory.t9153-git-svn-rewrite-uuid/svnrepo' < '$(@D)/t/t9153/svn.dump' &&
-#		git svn init --minimize-url --rewrite-uuid='6cc8ada4-5932-4b4a-8242-3534ed8a3232' 'file://$(@D)/t/trash directory.t9153-git-svn-rewrite-uuid/svnrepo' &&
-#		git svn fetch
-#		
-not ok - 2 verify uuid
-#	
-#		git cat-file commit refs/remotes/git-svn~0 | 	   grep '^git-svn-id: .*@2 6cc8ada4-5932-4b4a-8242-3534ed8a3232$' &&
-#		git cat-file commit refs/remotes/git-svn~1 | 	   grep '^git-svn-id: .*@1 6cc8ada4-5932-4b4a-8242-3534ed8a3232$'
-#		
-# failed 2 among 2 test(s)
+ok 1 - load svn repo
+ok 2 - verify uuid
+# passed all 2 test(s)
 1..2
-make[3]: [t9153-git-svn-rewrite-uuid.sh] Error 1 (ignored)
 *** t9154-git-svn-fancy-glob.sh ***
-not ok - 1 load svn repo
-#	
-#		svnadmin load -q '$(@D)/t/trash directory.t9154-git-svn-fancy-glob/svnrepo' < '$(@D)/t/t9154/svn.dump' &&
-#		git svn init --minimize-url -T trunk 'file://$(@D)/t/trash directory.t9154-git-svn-fancy-glob/svnrepo' &&
-#		git svn fetch
-#		
-not ok - 2 add red branch
-#	
-#		git config svn-remote.svn.branches 'branches/{red}:refs/remotes/*' &&
-#		git svn fetch &&
-#		git rev-parse refs/remotes/red &&
-#		test_must_fail git rev-parse refs/remotes/green &&
-#		test_must_fail git rev-parse refs/remotes/blue
-#		
-not ok - 3 add green branch
-#	
-#		GIT_CONFIG=.git/svn/.metadata git config --unset svn-remote.svn.branches-maxRev &&
-#		git config svn-remote.svn.branches 'branches/{red,green}:refs/remotes/*' &&
-#		git svn fetch &&
-#		git rev-parse refs/remotes/red &&
-#		git rev-parse refs/remotes/green &&
-#		test_must_fail git rev-parse refs/remotes/blue
-#		
-not ok - 4 add all branches
-#	
-#		GIT_CONFIG=.git/svn/.metadata git config --unset svn-remote.svn.branches-maxRev &&
-#		git config svn-remote.svn.branches 'branches/*:refs/remotes/*' &&
-#		git svn fetch &&
-#		git rev-parse refs/remotes/red &&
-#		git rev-parse refs/remotes/green &&
-#		git rev-parse refs/remotes/blue
-#		
-# failed 4 among 4 test(s)
-1..4
-make[3]: [t9154-git-svn-fancy-glob.sh] Error 1 (ignored)
+ok 1 - load svn repo
+ok 2 - add red branch
+ok 3 - add gre branch
+ok 4 - add green branch
+ok 5 - add all branches
+# passed all 5 test(s)
+1..5
 *** t9155-git-svn-fetch-deleted-tag.sh ***
 ok 1 - setup svn repo
-not ok - 2 fetch deleted tags from same revision with checksum error
-#	
-#		git svn init --stdlayout "$svnrepo" git_project &&
-#		cd git_project &&
-#		git svn fetch &&
-#	
-#		git diff --exit-code mybranch:trunk/subdir/file tags/mytag:file &&
-#		git diff --exit-code master:subdir/file tags/mytag^:file
-#	
-# failed 1 among 2 test(s)
+ok 2 - fetch deleted tags from same revision with checksum error
+# passed all 2 test(s)
 1..2
-make[3]: [t9155-git-svn-fetch-deleted-tag.sh] Error 1 (ignored)
 *** t9156-git-svn-fetch-deleted-tag-2.sh ***
 ok 1 - setup svn repo
-not ok - 2 fetch deleted tags from same revision with no checksum error
-#	
-#		git svn init --stdlayout "$svnrepo" git_project &&
-#		cd git_project &&
-#		git svn fetch &&
-#	
-#		git diff --exit-code master:subdir3/file tags/mytag:file &&
-#		git diff --exit-code master:subdir2/file tags/mytag^:file &&
-#		git diff --exit-code master:subdir1/file tags/mytag^^:file
-#	
-# failed 1 among 2 test(s)
+ok 2 - fetch deleted tags from same revision with no checksum error
+# passed all 2 test(s)
 1..2
-make[3]: [t9156-git-svn-fetch-deleted-tag-2.sh] Error 1 (ignored)
 *** t9157-git-svn-fetch-merge.sh ***
 ok 1 - initialize source svn repo
-not ok - 2 clone svn repo
-#	
-#		git svn init -s "$svnrepo" &&
-#		git svn fetch
-#	
-not ok - 3 verify merge commit
-#	git rev-parse HEAD^2
-# failed 2 among 3 test(s)
-1..3
-make[3]: [t9157-git-svn-fetch-merge.sh] Error 1 (ignored)
+ok 2 - clone svn repo
+ok 3 - verify merge commit
+# passed all 3 test(s)
+1..3
 *** t9158-git-svn-mergeinfo.sh ***
 define NO_SVN_TESTS to skip git svn tests
 ok 1 - initialize source svn repo
-not ok - 2 clone svn repo
-#	
-#		git svn init "$svnrepo"/trunk &&
-#		git svn fetch
-#	
-not ok - 3 change svn:mergeinfo
-#	
-#		touch bar &&
-#		git add bar &&
-#		git commit -m "bar" &&
-#		git svn dcommit --mergeinfo="/branches/foo:1-10"
-#	
-not ok - 4 verify svn:mergeinfo
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk)
-#		test "$mergeinfo" = "/branches/foo:1-10"
-#	
-not ok - 5 change svn:mergeinfo multiline
-#	
-#		touch baz &&
-#		git add baz &&
-#		git commit -m "baz" &&
-#		git svn dcommit --mergeinfo="/branches/bar:1-10 /branches/other:3-5,8,10-11"
-#	
-not ok - 6 verify svn:mergeinfo multiline
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk)
-#		test "$mergeinfo" = "/branches/bar:1-10
-#	/branches/other:3-5,8,10-11"
-#	
-# failed 5 among 6 test(s)
+ok 2 - clone svn repo
+ok 3 - change svn:mergeinfo
+ok 4 - verify svn:mergeinfo
+ok 5 - change svn:mergeinfo multiline
+ok 6 - verify svn:mergeinfo multiline
+# passed all 6 test(s)
 1..6
-make[3]: [t9158-git-svn-mergeinfo.sh] Error 1 (ignored)
 *** t9159-git-svn-no-parent-mergeinfo.sh ***
-not ok - 1 test handling of root commits in merge ranges
-#	
-#		mkdir -p init/trunk init/branches init/tags &&
-#		echo "r1" > init/trunk/file.txt &&
-#		svn_cmd import -m "initial import" init "$svnrepo" &&
-#		svn_cmd co "$svnrepo" tmp &&
-#		(
-#			cd tmp &&
-#			echo "r2" > trunk/file.txt &&
-#			svn_cmd commit -m "Modify file.txt on trunk" &&
-#			svn_cmd cp trunk@1 branches/a &&
-#			svn_cmd commit -m "Create branch a from trunk r1" &&
-#			svn_cmd propset svn:mergeinfo /trunk:1-2 branches/a &&
-#			svn_cmd commit -m "Fake merge of trunk r2 into branch a" &&
-#			mkdir branches/b &&
-#			echo "r5" > branches/b/file2.txt &&
-#			svn_cmd add branches/b &&
-#			svn_cmd commit -m "Create branch b from thin air" &&
-#			echo "r6" > branches/b/file2.txt &&
-#			svn_cmd commit -m "Modify file2.txt on branch b" &&
-#			svn_cmd cp branches/b@5 branches/c &&
-#			svn_cmd commit -m "Create branch c from branch b r5" &&
-#			svn_cmd propset svn:mergeinfo /branches/b:5-6 branches/c &&
-#			svn_cmd commit -m "Fake merge of branch b r6 into branch c"
-#		) &&
-#		git svn init -s "$svnrepo" &&
-#		git svn fetch
-#		
-# failed 1 among 1 test(s)
+ok 1 - test handling of root commits in merge ranges
+# passed all 1 test(s)
 1..1
-make[3]: [t9159-git-svn-no-parent-mergeinfo.sh] Error 1 (ignored)
 *** t9160-git-svn-preserve-empty-dirs.sh ***
 define NO_SVN_TESTS to skip git svn tests
 ok 1 - initialize source svn repo containing empty dirs
-not ok - 2 clone svn repo with --preserve-empty-dirs
-#	
-#		git svn clone "$svnrepo"/trunk --preserve-empty-dirs "$GIT_REPO"
-#	
-not ok - 3 directory empty from inception
-#	
-#		test -f "$GIT_REPO"/1/.gitignore &&
-#		test $(find "$GIT_REPO"/1 -type f | wc -l) = "1"
-#	
-not ok - 4 directory empty from subsequent svn commit
-#	
-#		test -f "$GIT_REPO"/2/.gitignore &&
-#		test $(find "$GIT_REPO"/2 -type f | wc -l) = "1" &&
-#		test -f "$GIT_REPO"/3/.gitignore &&
-#		test $(find "$GIT_REPO"/3 -type f | wc -l) = "1"
-#	
-not ok - 5 add entry to previously empty directory
-#	
-#		test $(find "$GIT_REPO"/4 -type f | wc -l) = "1" &&
-#		test -f "$GIT_REPO"/4/a/b/c/foo
-#	
-not ok - 6 remove non-last entry from directory
-#	
-#		(
-#			cd "$GIT_REPO" &&
-#			git checkout HEAD~2
-#		) &&
-#		test_must_fail test -f "$GIT_REPO"/2/.gitignore &&
-#		test_must_fail test -f "$GIT_REPO"/3/.gitignore
-#	
-not ok - 7 clone svn repo with --placeholder-file specified
-#	
-#		rm -rf "$GIT_REPO" &&
-#		git svn clone "$svnrepo"/trunk --preserve-empty-dirs \
-#			--placeholder-file=.placeholder "$GIT_REPO" &&
-#		find "$GIT_REPO" -type f -name ".placeholder" &&
-#		test $(find "$GIT_REPO" -type f -name ".placeholder" | wc -l) = "5"
-#	
-not ok - 8 placeholder namespace conflict with file
-#	
-#		test -s "$GIT_REPO"/5/.placeholder
-#	
-not ok - 9 placeholder namespace conflict with directory
-#	
-#		test -d "$GIT_REPO"/6/.placeholder &&
-#		test -f "$GIT_REPO"/6/.placeholder/.placeholder &&
-#		test $(find "$GIT_REPO"/6 -type f | wc -l) = "1"
-#	
-not ok - 10 second set of svn commits and rebase
-#	
-#		svn_cmd co "$svnrepo"/trunk "$SVN_TREE" &&
-#		(
-#			cd "$SVN_TREE" &&
-#			mkdir -p 7 &&
-#			echo "This should remove placeholder" > 1/file1.txt &&
-#			echo "This should not remove placeholder" > 5/file1.txt &&
-#			svn_cmd add 7 1/file1.txt 5/file1.txt &&
-#			svn_cmd commit -m "subsequent svn commit for persistence tests"
-#		) &&
-#		rm -rf "$SVN_TREE" &&
-#		(
-#			cd "$GIT_REPO" &&
-#			git svn rebase
-#		)
-#	
-not ok - 11 flag persistence during subsqeuent rebase
-#	
-#		test -f "$GIT_REPO"/7/.placeholder &&
-#		test $(find "$GIT_REPO"/7 -type f | wc -l) = "1"
-#	
-not ok - 12 placeholder list persistence during subsqeuent rebase
-#	
-#		test -f "$GIT_REPO"/1/file1.txt &&
-#		test $(find "$GIT_REPO"/1 -type f | wc -l) = "1" &&
-#	
-#		test -f "$GIT_REPO"/5/file1.txt &&
-#		test -f "$GIT_REPO"/5/.placeholder &&
-#		test $(find "$GIT_REPO"/5 -type f | wc -l) = "2"
-#	
-# failed 11 among 12 test(s)
+ok 2 - clone svn repo with --preserve-empty-dirs
+ok 3 - directory empty from inception
+ok 4 - directory empty from subsequent svn commit
+ok 5 - add entry to previously empty directory
+ok 6 - remove non-last entry from directory
+ok 7 - clone svn repo with --placeholder-file specified
+ok 8 - placeholder namespace conflict with file
+ok 9 - placeholder namespace conflict with directory
+ok 10 - second set of svn commits and rebase
+ok 11 - flag persistence during subsqeuent rebase
+ok 12 - placeholder list persistence during subsqeuent rebase
+# passed all 12 test(s)
 1..12
-make[3]: [t9160-git-svn-preserve-empty-dirs.sh] Error 1 (ignored)
 *** t9161-git-svn-mergeinfo-push.sh ***
-not ok - 1 load svn dump
-#	
-#		svnadmin load -q '$(@D)/t/trash directory.t9161-git-svn-mergeinfo-push/svnrepo' 	  < '$(@D)/t/t9161/branches.dump' &&
-#		git svn init --minimize-url -R svnmerge 	  -T trunk -b branches 'file://$(@D)/t/trash directory.t9161-git-svn-mergeinfo-push/svnrepo' &&
-#		git svn fetch --all
-#		
-not ok - 2 propagate merge information
-#	
-#		git config svn.pushmergeinfo yes &&
-#		git checkout svnb1 &&
-#		git merge --no-ff svnb2 &&
-#		git svn dcommit
-#		
-not ok - 3 check svn:mergeinfo
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1)
-#		test "$mergeinfo" = "/branches/svnb2:3,8"
-#		
-not ok - 4 merge another branch
-#	
-#		git merge --no-ff svnb3 &&
-#		git svn dcommit
-#		
-not ok - 5 check primary parent mergeinfo respected
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1)
-#		test "$mergeinfo" = "/branches/svnb2:3,8
-#	/branches/svnb3:4,9"
-#		
-not ok - 6 merge existing merge
-#	
-#		git merge --no-ff svnb4 &&
-#		git svn dcommit
-#		
-not ok - 7 check both parents' mergeinfo respected
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1)
-#		test "$mergeinfo" = "/branches/svnb2:3,8
-#	/branches/svnb3:4,9
-#	/branches/svnb4:5-6,10-12
-#	/branches/svnb5:6,11"
-#		
-not ok - 8 make further commits to branch
-#	
-#		git checkout svnb2 &&
-#		touch newb2file &&
-#		git add newb2file &&
-#		git commit -m "later b2 commit" &&
-#		touch newb2file-2 &&
-#		git add newb2file-2 &&
-#		git commit -m "later b2 commit 2" &&
-#		git svn dcommit
-#		
-not ok - 9 second forward merge
-#	
-#		git checkout svnb1 &&
-#		git merge --no-ff svnb2 &&
-#		git svn dcommit
-#		
-not ok - 10 check new mergeinfo added
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1)
-#		test "$mergeinfo" = "/branches/svnb2:3,8,16-17
-#	/branches/svnb3:4,9
-#	/branches/svnb4:5-6,10-12
-#	/branches/svnb5:6,11"
-#		
-not ok - 11 reintegration merge
-#	
-#		git checkout svnb4 &&
-#		git merge --no-ff svnb1 &&
-#		git svn dcommit
-#		
-not ok - 12 check reintegration mergeinfo
-#	
-#		mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb4)
-#		test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18
-#	/branches/svnb2:3,8,16-17
-#	/branches/svnb3:4,9
-#	/branches/svnb4:5-6,10-12
-#	/branches/svnb5:6,11"
-#		
-not ok - 13 dcommit a merge at the top of a stack
-#	
-#		git checkout svnb1 &&
-#		touch anotherfile &&
-#		git add anotherfile &&
-#		git commit -m "a commit" &&
-#		git merge svnb4 &&
-#		git svn dcommit
-#		
-# failed 13 among 13 test(s)
+ok 1 - load svn dump
+ok 2 - propagate merge information
+ok 3 - check svn:mergeinfo
+ok 4 - merge another branch
+ok 5 - check primary parent mergeinfo respected
+ok 6 - merge existing merge
+ok 7 - check both parents' mergeinfo respected
+ok 8 - make further commits to branch
+ok 9 - second forward merge
+ok 10 - check new mergeinfo added
+ok 11 - reintegration merge
+ok 12 - check reintegration mergeinfo
+ok 13 - dcommit a merge at the top of a stack
+# passed all 13 test(s)
 1..13
-make[3]: [t9161-git-svn-mergeinfo-push.sh] Error 1 (ignored)
 *** t9162-git-svn-dcommit-interactive.sh ***
-not ok - 1 initialize repo
-#	
-#		svn_cmd mkdir -m"mkdir test-interactive" "$svnrepo/test-interactive" &&
-#		git svn clone "$svnrepo/test-interactive" test-interactive &&
-#		cd test-interactive &&
-#		touch foo && git add foo && git commit -m"foo: first commit" &&
-#		git svn dcommit
-#		
-not ok - 2 answers: y [
-] yes
-#	
-#		(
-#			echo "change #1" >> foo && git commit -a -m"change #1" &&
-#			echo "change #2" >> foo && git commit -a -m"change #2" &&
-#			echo "change #3" >> foo && git commit -a -m"change #3" &&
-#			( echo "y
-#	
-#	y" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-#			test $(git rev-parse HEAD) = $(git rev-parse remotes/git-svn)
-#		)
-#		
-not ok - 3 answers: yes yes no
-#	
-#		(
-#			echo "change #1" >> foo && git commit -a -m"change #1" &&
-#			echo "change #2" >> foo && git commit -a -m"change #2" &&
-#			echo "change #3" >> foo && git commit -a -m"change #3" &&
-#			( echo "yes
-#	yes
-#	no" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-#			test $(git rev-parse HEAD^^^) = $(git rev-parse remotes/git-svn) &&
-#			git reset --hard remotes/git-svn
-#		)
-#		
-not ok - 4 answers: yes quit
-#	
-#		(
-#			echo "change #1" >> foo && git commit -a -m"change #1" &&
-#			echo "change #2" >> foo && git commit -a -m"change #2" &&
-#			echo "change #3" >> foo && git commit -a -m"change #3" &&
-#			( echo "yes
-#	quit" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-#			test $(git rev-parse HEAD^^^) = $(git rev-parse remotes/git-svn) &&
-#			git reset --hard remotes/git-svn
-#		)
-#		
-not ok - 5 answers: all
-#	
-#		(
-#			echo "change #1" >> foo && git commit -a -m"change #1" &&
-#			echo "change #2" >> foo && git commit -a -m"change #2" &&
-#			echo "change #3" >> foo && git commit -a -m"change #3" &&
-#			( echo "all" | GIT_SVN_NOTTY=1 git svn dcommit --interactive ) &&
-#			test $(git rev-parse HEAD) = $(git rev-parse remotes/git-svn) &&
-#			git reset --hard remotes/git-svn
-#		)
-#		
-# failed 5 among 5 test(s)
+ok 1 - initialize repo
+ok 2 - answers: y [\n] yes
+ok 3 - answers: yes yes no
+ok 4 - answers: yes quit
+ok 5 - answers: all
+# passed all 5 test(s)
 1..5
-make[3]: [t9162-git-svn-dcommit-interactive.sh] Error 1 (ignored)
+*** t9163-git-svn-reset-clears-caches.sh ***
+ok 1 - initialize source svn repo
+ok 2 - fetch to merge-base (a)
+ok 3 - rebase looses SVN merge (m)
+ok 4 - reset and fetch gets the SVN merge (m) correctly
+# passed all 4 test(s)
+1..4
+*** t9164-git-svn-dcommit-concurrent.sh ***
+ok 1 - setup svn repository
+ok 2 - check if post-commit hook creates a concurrent commit
+ok 3 - check if pre-commit hook fails
+ok 4 - dcommit error handling
+ok 5 - dcommit concurrent change in non-changed file
+ok 6 - dcommit concurrent non-conflicting change
+ok 7 - dcommit --no-rebase concurrent non-conflicting change
+ok 8 - dcommit fails on concurrent conflicting change
+# passed all 8 test(s)
+1..8
+*** t9165-git-svn-fetch-merge-branch-of-branch.sh ***
+ok 1 - initialize source svn repo
+ok 2 - clone svn repo
+ok 3 - verify merge commit
+# passed all 3 test(s)
+1..3
+*** t9166-git-svn-fetch-merge-branch-of-branch2.sh ***
+ok 1 - initialize source svn repo
+ok 2 - clone svn repo
+ok 3 - verify merge commit
+# passed all 3 test(s)
+1..3
+*** t9167-git-svn-cmd-branch-subproject.sh ***
+ok 1 - initialize svnrepo
+ok 2 - import into git
+ok 3 - git svn branch tests
+# passed all 3 test(s)
+1..3
 *** t9200-git-cvsexportcommit.sh ***
 ok 1 - New file
 ok 2 - Remove two files, add two and update two
@@ -12125,157 +15069,184 @@
 # passed all 15 test(s)
 1..15
 *** t9300-fast-import.sh ***
-ok 1 - setup: have pipes?
-ok 2 - empty stream succeeds
-ok 3 - A: create pack from stdin
-ok 4 - A: verify pack
-ok 5 - A: verify commit
-ok 6 - A: verify tree
-ok 7 - A: verify file2
-ok 8 - A: verify file3
-ok 9 - A: verify file4
-ok 10 - A: verify tag/series-A
-ok 11 - A: verify tag/series-A-blob
-ok 12 - A: verify marks output
-ok 13 - A: verify marks import
-ok 14 - A: tag blob by sha1
-ok 15 - A: verify marks import does not crash
-ok 16 - A: verify pack
-ok 17 - A: verify diff
-ok 18 - A: export marks with large values
-ok 19 - B: fail on invalid blob sha1
-ok 20 - B: fail on invalid branch name ".badbranchname"
-ok 21 - B: fail on invalid branch name "bad[branch]name"
-ok 22 - B: accept branch name "TEMP_TAG"
-ok 23 - B: accept empty committer
-ok 24 - B: accept and fixup committer with no name
-ok 25 - B: fail on invalid committer (1)
-ok 26 - B: fail on invalid committer (2)
-ok 27 - B: fail on invalid committer (3)
-ok 28 - B: fail on invalid committer (4)
-ok 29 - B: fail on invalid committer (5)
-ok 30 - C: incremental import create pack from stdin
-ok 31 - C: verify pack
-ok 32 - C: validate reuse existing blob
-ok 33 - C: verify commit
-ok 34 - C: validate rename result
-ok 35 - D: inline data in commit
-ok 36 - D: verify pack
-ok 37 - D: validate new files added
-ok 38 - D: verify file5
-ok 39 - D: verify file6
-ok 40 - E: rfc2822 date, --date-format=raw
-ok 41 - E: rfc2822 date, --date-format=rfc2822
-ok 42 - E: verify pack
-ok 43 - E: verify commit
-ok 44 - F: non-fast-forward update skips
-ok 45 - F: verify pack
-ok 46 - F: verify other commit
-ok 47 - G: non-fast-forward update forced
-ok 48 - G: verify pack
-ok 49 - G: branch changed, but logged
-ok 50 - H: deletall, add 1
-ok 51 - H: verify pack
-ok 52 - H: validate old files removed, new files added
-ok 53 - H: verify file
-ok 54 - I: export-pack-edges
-ok 55 - I: verify edge list
-ok 56 - J: reset existing branch creates empty commit
-ok 57 - J: branch has 1 commit, empty tree
-ok 58 - J: tag must fail on empty branch
-ok 59 - K: reinit branch with from
-ok 60 - K: verify K^1 = branch^1
-ok 61 - L: verify internal tree sorting
-ok 62 - L: nested tree copy does not corrupt deltas
-ok 63 - M: rename file in same subdirectory
-ok 64 - M: rename file to new subdirectory
-ok 65 - M: rename subdirectory to new subdirectory
-ok 66 - N: copy file in same subdirectory
-ok 67 - N: copy then modify subdirectory
-ok 68 - N: copy dirty subdirectory
-ok 69 - N: copy directory by id
-ok 70 - N: read and copy directory
-ok 71 - N: empty directory reads as missing
-ok 72 - N: copy root directory by tree hash
-ok 73 - N: delete directory by copying
-ok 74 - N: modify copied tree
-ok 75 - N: reject foo/ syntax
-ok 76 - N: copy to root by id and modify
-ok 77 - N: extract subtree
-ok 78 - N: modify subtree, extract it, and modify again
-ok 79 - O: comments are all skipped
-ok 80 - O: blank lines not necessary after data commands
-ok 81 - O: repack before next test
-ok 82 - O: blank lines not necessary after other commands
-ok 83 - O: progress outputs as requested by input
-ok 84 - P: supermodule & submodule mix
-ok 85 - P: verbatim SHA gitlinks
-ok 86 - P: fail on inline gitlink
-ok 87 - P: fail on blob mark in gitlink
-ok 88 - Q: commit notes
-ok 89 - Q: verify pack
-ok 90 - Q: verify first commit
-ok 91 - Q: verify second commit
-ok 92 - Q: verify third commit
-ok 93 - Q: verify first notes commit
-ok 94 - Q: verify first notes tree
-ok 95 - Q: verify first note for first commit
-ok 96 - Q: verify first note for second commit
-ok 97 - Q: verify first note for third commit
-ok 98 - Q: verify second notes commit
-ok 99 - Q: verify second notes tree
-ok 100 - Q: verify second note for first commit
-ok 101 - Q: verify first note for second commit
-ok 102 - Q: verify first note for third commit
-ok 103 - Q: verify third notes commit
-ok 104 - Q: verify third notes tree
-ok 105 - Q: verify third note for first commit
-ok 106 - Q: verify fourth notes commit
-ok 107 - Q: verify fourth notes tree
-ok 108 - Q: verify second note for second commit
-ok 109 - Q: deny note on empty branch
-ok 110 - R: abort on unsupported feature
-ok 111 - R: supported feature is accepted
-ok 112 - R: abort on receiving feature after data command
-ok 113 - R: only one import-marks feature allowed per stream
-ok 114 - R: export-marks feature results in a marks file being created
-ok 115 - R: export-marks options can be overriden by commandline options
-ok 116 - R: catch typo in marks file name
-ok 117 - R: import and output marks can be the same file
-ok 118 - R: --import-marks=foo --output-marks=foo to create foo fails
-ok 119 - R: --import-marks-if-exists
-ok 120 - R: feature import-marks-if-exists
-ok 121 - R: import to output marks works without any content
-ok 122 - R: import marks prefers commandline marks file over the stream
-ok 123 - R: multiple --import-marks= should be honoured
-ok 124 - R: feature relative-marks should be honoured
-ok 125 - R: feature no-relative-marks should be honoured
-ok 126 - R: feature ls supported
-ok 127 - R: feature cat-blob supported
-ok 128 - R: cat-blob-fd must be a nonnegative integer
-ok 129 - R: print old blob
-ok 130 - R: in-stream cat-blob-fd not respected
-ok 131 - R: print new blob
-ok 132 - R: print new blob by sha1
-ok 133 - setup: big file
-ok 134 - R: print two blobs to stdout
-ok 135 - R: copy using cat-file
-ok 136 - R: print blob mid-commit
-ok 137 - R: print staged blob within commit
-ok 138 - R: quiet option results in no stats being output
-ok 139 - R: feature done means terminating "done" is mandatory
-ok 140 - R: terminating "done" with trailing gibberish is ok
-ok 141 - R: terminating "done" within commit
-ok 142 - R: die on unknown option
-ok 143 - R: unknown commandline options are rejected
-ok 144 - R: die on invalid option argument
-ok 145 - R: ignore non-git options
-ok 146 - R: blob bigger than threshold
-ok 147 - R: verify created pack
-ok 148 - R: verify written objects
-ok 149 - R: blob appears only once
-# passed all 149 test(s)
-1..149
+ok 1 - empty stream succeeds
+ok 2 - A: create pack from stdin
+ok 3 - A: verify pack
+ok 4 - A: verify commit
+ok 5 - A: verify tree
+ok 6 - A: verify file2
+ok 7 - A: verify file3
+ok 8 - A: verify file4
+ok 9 - A: verify tag/series-A
+ok 10 - A: verify tag/series-A-blob
+ok 11 - A: verify marks output
+ok 12 - A: verify marks import
+ok 13 - A: tag blob by sha1
+ok 14 - A: verify marks import does not crash
+ok 15 - A: verify pack
+ok 16 - A: verify diff
+ok 17 - A: export marks with large values
+ok 18 - B: fail on invalid blob sha1
+ok 19 - B: accept branch name "TEMP_TAG"
+ok 20 - B: accept empty committer
+ok 21 - B: accept and fixup committer with no name
+ok 22 - B: fail on invalid committer (1)
+ok 23 - B: fail on invalid committer (2)
+ok 24 - B: fail on invalid committer (3)
+ok 25 - B: fail on invalid committer (4)
+ok 26 - B: fail on invalid committer (5)
+ok 27 - C: incremental import create pack from stdin
+ok 28 - C: verify pack
+ok 29 - C: validate reuse existing blob
+ok 30 - C: verify commit
+ok 31 - C: validate rename result
+ok 32 - D: inline data in commit
+ok 33 - D: verify pack
+ok 34 - D: validate new files added
+ok 35 - D: verify file5
+ok 36 - D: verify file6
+ok 37 - E: rfc2822 date, --date-format=raw
+ok 38 - E: rfc2822 date, --date-format=rfc2822
+ok 39 - E: verify pack
+ok 40 - E: verify commit
+ok 41 - F: non-fast-forward update skips
+ok 42 - F: verify pack
+ok 43 - F: verify other commit
+ok 44 - G: non-fast-forward update forced
+ok 45 - G: verify pack
+ok 46 - G: branch changed, but logged
+ok 47 - H: deletall, add 1
+ok 48 - H: verify pack
+ok 49 - H: validate old files removed, new files added
+ok 50 - H: verify file
+ok 51 - I: export-pack-edges
+ok 52 - I: verify edge list
+ok 53 - J: reset existing branch creates empty commit
+ok 54 - J: branch has 1 commit, empty tree
+ok 55 - J: tag must fail on empty branch
+ok 56 - K: reinit branch with from
+ok 57 - K: verify K^1 = branch^1
+ok 58 - L: verify internal tree sorting
+ok 59 - L: nested tree copy does not corrupt deltas
+ok 60 - M: rename file in same subdirectory
+ok 61 - M: rename file to new subdirectory
+ok 62 - M: rename subdirectory to new subdirectory
+ok 63 - M: rename root to subdirectory
+ok 64 - N: copy file in same subdirectory
+ok 65 - N: copy then modify subdirectory
+ok 66 - N: copy dirty subdirectory
+ok 67 - N: copy directory by id
+ok 68 - N: read and copy directory
+ok 69 - N: empty directory reads as missing
+ok 70 - N: copy root directory by tree hash
+ok 71 - N: copy root by path
+ok 72 - N: delete directory by copying
+ok 73 - N: modify copied tree
+ok 74 - N: reject foo/ syntax
+ok 75 - N: reject foo/ syntax in copy source
+ok 76 - N: reject foo/ syntax in rename source
+ok 77 - N: reject foo/ syntax in ls argument
+ok 78 - N: copy to root by id and modify
+ok 79 - N: extract subtree
+ok 80 - N: modify subtree, extract it, and modify again
+ok 81 - O: comments are all skipped
+ok 82 - O: blank lines not necessary after data commands
+ok 83 - O: repack before next test
+ok 84 - O: blank lines not necessary after other commands
+ok 85 - O: progress outputs as requested by input
+ok 86 - P: superproject & submodule mix
+ok 87 - P: verbatim SHA gitlinks
+ok 88 - P: fail on inline gitlink
+ok 89 - P: fail on blob mark in gitlink
+ok 90 - Q: commit notes
+ok 91 - Q: verify pack
+ok 92 - Q: verify first commit
+ok 93 - Q: verify second commit
+ok 94 - Q: verify third commit
+ok 95 - Q: verify first notes commit
+ok 96 - Q: verify first notes tree
+ok 97 - Q: verify first note for first commit
+ok 98 - Q: verify first note for second commit
+ok 99 - Q: verify first note for third commit
+ok 100 - Q: verify second notes commit
+ok 101 - Q: verify second notes tree
+ok 102 - Q: verify second note for first commit
+ok 103 - Q: verify first note for second commit
+ok 104 - Q: verify first note for third commit
+ok 105 - Q: verify third notes commit
+ok 106 - Q: verify third notes tree
+ok 107 - Q: verify third note for first commit
+ok 108 - Q: verify fourth notes commit
+ok 109 - Q: verify fourth notes tree
+ok 110 - Q: verify second note for second commit
+ok 111 - Q: deny note on empty branch
+ok 112 - R: abort on unsupported feature
+ok 113 - R: supported feature is accepted
+ok 114 - R: abort on receiving feature after data command
+ok 115 - R: only one import-marks feature allowed per stream
+ok 116 - R: export-marks feature results in a marks file being created
+ok 117 - R: export-marks options can be overridden by commandline options
+ok 118 - R: catch typo in marks file name
+ok 119 - R: import and output marks can be the same file
+ok 120 - R: --import-marks=foo --output-marks=foo to create foo fails
+ok 121 - R: --import-marks-if-exists
+ok 122 - R: feature import-marks-if-exists
+ok 123 - R: import to output marks works without any content
+ok 124 - R: import marks prefers commandline marks file over the stream
+ok 125 - R: multiple --import-marks= should be honoured
+ok 126 - R: feature relative-marks should be honoured
+ok 127 - R: feature no-relative-marks should be honoured
+ok 128 - R: feature ls supported
+ok 129 - R: feature cat-blob supported
+ok 130 - R: cat-blob-fd must be a nonnegative integer
+ok 131 - R: print old blob
+ok 132 - R: in-stream cat-blob-fd not respected
+ok 133 - R: print mark for new blob
+ok 134 - R: print new blob
+ok 135 - R: print new blob by sha1
+ok 136 - setup: big file
+ok 137 - R: print two blobs to stdout
+ok 138 - R: copy using cat-file
+ok 139 - R: print blob mid-commit
+ok 140 - R: print staged blob within commit
+ok 141 - R: quiet option results in no stats being output
+ok 142 - R: feature done means terminating "done" is mandatory
+ok 143 - R: terminating "done" with trailing gibberish is ok
+ok 144 - R: terminating "done" within commit
+ok 145 - R: die on unknown option
+ok 146 - R: unknown commandline options are rejected
+ok 147 - R: die on invalid option argument
+ok 148 - R: ignore non-git options
+ok 149 - R: blob bigger than threshold
+ok 150 - R: verify created pack
+ok 151 - R: verify written objects
+ok 152 - R: blob appears only once
+ok 153 - S: initialize for S tests
+ok 154 - S: filemodify with garbage after mark must fail
+ok 155 - S: filemodify with garbage after inline must fail
+ok 156 - S: filemodify with garbage after sha1 must fail
+ok 157 - S: notemodify with garabge after mark dataref must fail
+ok 158 - S: notemodify with garbage after inline dataref must fail
+ok 159 - S: notemodify with garbage after sha1 dataref must fail
+ok 160 - S: notemodify with garbage after mark commit-ish must fail
+ok 161 - S: from with garbage after mark must fail
+ok 162 - S: merge with garbage after mark must fail
+ok 163 - S: tag with garbage after mark must fail
+ok 164 - S: cat-blob with garbage after mark must fail
+ok 165 - S: ls with garbage after mark must fail
+ok 166 - S: ls with garbage after sha1 must fail
+ok 167 - T: ls root tree
+ok 168 - T: delete branch
+ok 169 - T: empty reset doesnt delete branch
+ok 170 - U: initialize for U tests
+ok 171 - U: filedelete file succeeds
+ok 172 - U: validate file delete result
+ok 173 - U: filedelete directory succeeds
+ok 174 - U: validate directory delete result
+ok 175 - U: filedelete root succeeds
+ok 176 - U: validate root delete result
+# passed all 176 test(s)
+1..176
 *** t9301-fast-import-notes.sh ***
 ok 1 - set up master branch
 ok 2 - add notes with simple M command
@@ -12305,33 +15276,56 @@
 ok 7 - signed-tags=abort
 ok 8 - signed-tags=verbatim
 ok 9 - signed-tags=strip
-ok 10 - setup submodule
-ok 11 - submodule fast-export | fast-import
-ok 12 - setup copies
-ok 13 - fast-export -C -C | fast-import
-ok 14 - fast-export | fast-import when master is tagged
-ok 15 - cope with tagger-less tags
-ok 16 - setup for limiting exports by PATH
-ok 17 - dropping tag of filtered out object
-ok 18 - rewriting tag of filtered out object
-not ok 19 - no exact-ref revisions included # TODO known breakage
-ok 20 - path limiting with import-marks does not lose unmodified files
-ok 21 - full-tree re-shows unmodified files
-ok 22 - set-up a few more tags for tag export tests
-ok 23 - tree_tag
-ok 24 - tree_tag-obj
-ok 25 - tag-obj_tag
-ok 26 - tag-obj_tag-obj
-ok 27 - directory becomes symlink
-ok 28 - fast-export quotes pathnames
+ok 10 - signed-tags=warn-strip
+ok 11 - setup submodule
+ok 12 - submodule fast-export | fast-import
+ok 13 - setup copies
+ok 14 - fast-export -C -C | fast-import
+ok 15 - fast-export | fast-import when master is tagged
+ok 16 - cope with tagger-less tags
+ok 17 - setup for limiting exports by PATH
+ok 18 - dropping tag of filtered out object
+ok 19 - rewriting tag of filtered out object
+not ok 20 - no exact-ref revisions included # TODO known breakage
+ok 21 - path limiting with import-marks does not lose unmodified files
+ok 22 - full-tree re-shows unmodified files
+ok 23 - set-up a few more tags for tag export tests
+ok 24 - tree_tag
+ok 25 - tree_tag-obj
+ok 26 - tag-obj_tag
+ok 27 - tag-obj_tag-obj
+ok 28 - directory becomes symlink
+ok 29 - fast-export quotes pathnames
+ok 30 - test bidirectionality
+ok 31 - avoid uninteresting refs
+ok 32 - refs are updated even if no commits need to be exported
+ok 33 - use refspec
+ok 34 - delete refspec
 # still have 1 known breakage(s)
-# passed all remaining 27 test(s)
-1..28
+# passed all remaining 33 test(s)
+1..34
+*** t9351-fast-export-anonymize.sh ***
+ok 1 - setup simple repo
+ok 2 - export anonymized stream
+ok 3 - stream omits path names
+ok 4 - stream allows master as refname
+ok 5 - stream omits other refnames
+ok 6 - stream omits identities
+ok 7 - stream omits tag message
+ok 8 - import stream to new repository
+ok 9 - result has two branches
+ok 10 - repo has original shape and timestamps
+ok 11 - root tree has original shape
+ok 12 - paths in subdir ended up in one tree
+ok 13 - tag points to branch tip
+ok 14 - idents are shared
+# passed all 14 test(s)
+1..14
 *** t9400-git-cvsserver-server.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
 *** t9401-git-cvsserver-crlf.sh ***
-# passed all 0 test(s)
+1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
+*** t9402-git-cvsserver-refs.sh ***
 1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
 *** t9500-gitweb-standalone-no-errors.sh ***
 ok 1 - no commits: projects_list (implicit)
@@ -12379,7 +15373,34 @@
 ok 43 - commitdiff(2): symlink becomes file
 ok 44 - commitdiff(2): symlink becomes directory
 ok 45 - commitdiff(2): directory becomes symlink
-ok 46 - setup incomplete lines
+not ok 46 - setup incomplete lines
+#	
+#		cat >file<<-\EOF &&
+#		Dominus regit me,
+#		et nihil mihi deerit.
+#		In loco pascuae ibi me collocavit,
+#		super aquam refectionis educavit me;
+#		animam meam convertit,
+#		deduxit me super semitas jusitiae,
+#		propter nomen suum.
+#		CHANGE_ME
+#		EOF
+#		git commit -a -m "Preparing for incomplete lines" &&
+#		echo "incomplete" | tr -d "\\012" >>file &&
+#		git commit -a -m "Add incomplete line" &&
+#		git tag incomplete_lines_add &&
+#		sed -e s/CHANGE_ME/change_me/ <file >file+ &&
+#		mv -f file+ file &&
+#		git commit -a -m "Incomplete context line" &&
+#		git tag incomplete_lines_ctx &&
+#		echo "Dominus regit me," >file &&
+#		echo "incomplete line" | tr -d "\\012" >>file &&
+#		git commit -a -m "Change incomplete line" &&
+#		git tag incomplete_lines_chg &&
+#		echo "Dominus regit me," >file &&
+#		git commit -a -m "Remove incomplete line" &&
+#		git tag incomplete_lines_rem
+#	
 ok 47 - commitdiff(1): addition of incomplete line
 ok 48 - commitdiff(1): incomplete line as context line
 ok 49 - commitdiff(1): change incomplete line
@@ -12407,50 +15428,54 @@
 ok 71 - path_info: project/branch
 ok 72 - path_info: project/branch:file
 ok 73 - path_info: project/branch:dir/
-ok 74 - path_info: project/branch:file (non-existent)
-ok 75 - path_info: project/branch:dir/ (non-existent)
-ok 76 - path_info: project/branch:/file
-ok 77 - path_info: project/:/file (implicit HEAD)
-ok 78 - path_info: project/:/ (implicit HEAD, top tree)
-ok 79 - feeds: OPML
-ok 80 - feed: RSS
-ok 81 - feed: Atom
-ok 82 - encode(commit): utf8
-ok 83 - encode(commit): iso-8859-1
-ok 84 - encode(log): utf-8 and iso-8859-1
-ok 85 - opt: log --no-merges
-ok 86 - opt: atom --no-merges
-ok 87 - opt: "file" history --no-merges
-ok 88 - opt: log --no-such-option (invalid option)
-ok 89 - opt: tree --no-merges (invalid option for action)
-ok 90 - URL: no project URLs, no base URL
-ok 91 - URL: project URLs via gitweb.url
-ok 92 - URL: project URLs via cloneurl file
-ok 93 - config override: projects list (implicit)
-ok 94 - config override: tree view, features not overridden in repo config
-ok 95 - config override: tree view, features disabled in repo config
-ok 96 - config override: tree view, features enabled in repo config (1)
-ok 97 - config override: tree view, features enabled in repo config (2)
-ok 98 - search: preparation
-ok 99 - search: commit author
-ok 100 - search: commit message
-ok 101 - search: grep
-ok 102 - search: pickaxe
-ok 103 - search: projects
-ok 104 - README.html with non-ASCII characters (utf-8)
-Skipping syntax highlighting test, because 'highlight' was not found
-ok 105 # skip syntax highlighting (no highlight, unknown syntax) (missing HIGHLIGHT)
-ok 106 # skip syntax highlighting (highlighted, shell script) (missing HIGHLIGHT)
-ok 107 - forks: prepare
-ok 108 - forks: projects list
-ok 109 - forks: forks action
-ok 110 - ctags: tag cloud in projects list
-ok 111 - ctags: search projects by existing tag
-ok 112 - ctags: search projects by non existent tag
-ok 113 - ctags: malformed tag weights
-ok 114 - categories: projects list, only default category
-# passed all 114 test(s)
-1..114
+ok 74 - path_info: project/branch (non-existent)
+ok 75 - path_info: project/branch:filename (non-existent branch)
+ok 76 - path_info: project/branch:file (non-existent)
+ok 77 - path_info: project/branch:dir/ (non-existent)
+ok 78 - path_info: project/branch:/file
+ok 79 - path_info: project/:/file (implicit HEAD)
+ok 80 - path_info: project/:/ (implicit HEAD, top tree)
+ok 81 - feeds: OPML
+ok 82 - feed: RSS
+ok 83 - feed: Atom
+ok 84 - encode(commit): utf8
+ok 85 - encode(commit): iso-8859-1
+ok 86 - encode(log): utf-8 and iso-8859-1
+ok 87 - opt: log --no-merges
+ok 88 - opt: atom --no-merges
+ok 89 - opt: "file" history --no-merges
+ok 90 - opt: log --no-such-option (invalid option)
+ok 91 - opt: tree --no-merges (invalid option for action)
+ok 92 - URL: no project URLs, no base URL
+ok 93 - URL: project URLs via gitweb.url
+ok 94 - URL: project URLs via cloneurl file
+ok 95 - config override: projects list (implicit)
+ok 96 - config override: tree view, features not overridden in repo config
+ok 97 - config override: tree view, features disabled in repo config
+ok 98 - config override: tree view, features enabled in repo config (1)
+ok 99 - config override: tree view, features enabled in repo config (2)
+ok 100 - search: preparation
+ok 101 - search: commit author
+ok 102 - search: commit message
+ok 103 - search: grep
+ok 104 - search: pickaxe
+ok 105 - search: projects
+ok 106 - README.html with non-ASCII characters (utf-8)
+Skipping syntax highlighting tests: 'highlight' not found
+ok 107 # skip syntax highlighting (no highlight, unknown syntax) (missing HIGHLIGHT)
+ok 108 # skip syntax highlighting (highlighted, shell script) (missing HIGHLIGHT)
+ok 109 - forks: prepare
+ok 110 - forks: projects list
+ok 111 - forks: forks action
+ok 112 - ctags: tag cloud in projects list
+ok 113 - ctags: search projects by existing tag
+ok 114 - ctags: search projects by non existent tag
+ok 115 - ctags: malformed tag weights
+ok 116 - categories: projects list, only default category
+ok 117 - unborn HEAD: "summary" page (with "heads" subview)
+# failed 1 among 117 test(s)
+1..117
+make[3]: [t9500-gitweb-standalone-no-errors.sh] Error 1 (ignored)
 *** t9501-gitweb-standalone-http-status.sh ***
 ok 1 - setup
 ok 2 - snapshots: tgz only default format enabled
@@ -12462,9 +15487,17 @@
 ok 8 - snapshots: bad tree-ish id (tagged object)
 ok 9 - snapshots: good object id
 ok 10 - snapshots: bad object id
-ok 11 - load checking: load too high (default action)
-# passed all 11 test(s)
-1..11
+ok 11 # skip modification: feed last-modified (missing DATE_PARSER)
+ok 12 # skip modification: feed if-modified-since (modified) (missing DATE_PARSER)
+ok 13 # skip modification: feed if-modified-since (unmodified) (missing DATE_PARSER)
+ok 14 # skip modification: snapshot last-modified (missing DATE_PARSER)
+ok 15 # skip modification: snapshot if-modified-since (modified) (missing DATE_PARSER)
+ok 16 # skip modification: snapshot if-modified-since (unmodified) (missing DATE_PARSER)
+ok 17 # skip modification: tree snapshot (missing DATE_PARSER)
+ok 18 - load checking: load too high (default action)
+ok 19 - invalid arguments: invalid regexp (in project search)
+# passed all 19 test(s)
+1..19
 *** t9502-gitweb-standalone-parse-output.sh ***
 ok 1 - setup
 ok 2 - snapshot: full sha1
@@ -12478,27 +15511,27 @@
 ok 10 - snapshot: hierarchical branch name (xx/test)
 ok 11 - forks: setup
 ok 12 - forks: not skipped unless "forks" feature enabled
-ok 13 - forks: forks skipped if "forks" feature enabled
-ok 14 - forks: "forks" action for forked repository
-ok 15 - forks: can access forked repository
-ok 16 - forks: project_index lists all projects (incl. forks)
-# passed all 16 test(s)
-1..16
+ok 13 - enable forks feature
+ok 14 - forks: forks skipped if "forks" feature enabled
+ok 15 - forks: "forks" action for forked repository
+ok 16 - forks: can access forked repository
+ok 17 - forks: project_index lists all projects (incl. forks)
+ok 18 - xss checks
+# passed all 18 test(s)
+1..18
 *** t9600-cvsimport.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping cvsimport tests, cvsps not found
 *** t9601-cvsimport-vendor-branch.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping cvsimport tests, cvsps not found
 *** t9602-cvsimport-branches-tags.sh ***
-# passed all 0 test(s)
 1..0 # SKIP skipping cvsimport tests, cvsps not found
 *** t9603-cvsimport-patchsets.sh ***
-# passed all 0 test(s)
+1..0 # SKIP skipping cvsimport tests, cvsps not found
+*** t9604-cvsimport-timestamps.sh ***
 1..0 # SKIP skipping cvsimport tests, cvsps not found
 *** t9700-perl-git.sh ***
 ok 1 - set up test repository
-# run 2: Perl API ($(PERL) $(@D)/t/t9700/test.pl)
+# run 1: Perl API (perl $(@D)/t/t9700/test.pl)
 ok 2 - use Git;
 ok 3 - open repository
 ok 4 - config scalar: string
@@ -12512,7 +15545,7 @@
 ok 12 - config_path: ~/foo expansion
 ok 13 - config_path: multiple values
 ok 14 - get_color
-ok 15 - config: duplicate entry in scalar context fails
+ok 15 - config: multivar
 ok 16 - config_bool: non-boolean values fail
 ok 17 - ident scalar: author (type)
 ok 18 - ident scalar: committer (type)
@@ -12546,32 +15579,49 @@
 # test_external test Perl API was ok
 # test_external_without_stderr test no stderr: Perl API was ok
 *** t9800-git-p4-basic.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9801-git-p4-branch.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9802-git-p4-filetype.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9803-git-p4-shell-metachars.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9804-git-p4-label.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9805-git-p4-skip-submit-edit.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9806-git-p4-options.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9807-git-p4-submit.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9808-git-p4-chdir.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9809-git-p4-client-view.sh ***
-# passed all 0 test(s)
-1..0 # SKIP skipping git-p4 tests; no p4 or p4d
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9810-git-p4-rcs.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9811-git-p4-label-import.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9812-git-p4-wildcards.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9813-git-p4-preserve-users.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9814-git-p4-rename.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9815-git-p4-submit-fail.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9816-git-p4-locked.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9817-git-p4-exclude.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9818-git-p4-block.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9819-git-p4-case-folding.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9820-git-p4-editor-handling.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
+*** t9821-git-p4-path-variations.sh ***
+1..0 # SKIP skipping git p4 tests; no p4 or p4d
 *** t9901-git-web--browse.sh ***
 ok 1 - URL with an ampersand in it
 ok 2 - URL with a semi-colon in it
@@ -12580,23 +15630,142 @@
 ok 5 - browser command allows arbitrary shell code
 # passed all 5 test(s)
 1..5
+*** t9902-completion.sh ***
+ok 1 - setup for __gitdir tests
+ok 2 - __gitdir - from command line (through $__git_dir)
+ok 3 - __gitdir - repo as argument
+ok 4 - __gitdir - remote as argument
+ok 5 - __gitdir - .git directory in cwd
+ok 6 - __gitdir - .git directory in parent
+ok 7 - __gitdir - cwd is a .git directory
+ok 8 - __gitdir - parent is a .git directory
+ok 9 - __gitdir - $GIT_DIR set while .git directory in cwd
+ok 10 - __gitdir - $GIT_DIR set while .git directory in parent
+ok 11 - __gitdir - non-existing $GIT_DIR
+ok 12 - __gitdir - gitfile in cwd
+ok 13 - __gitdir - gitfile in parent
+ok 14 - __gitdir - resulting path avoids symlinks
+ok 15 - __gitdir - not a git repository
+ok 16 - __gitcomp - trailing space - options
+ok 17 - __gitcomp - trailing space - config keys
+ok 18 - __gitcomp - option parameter
+ok 19 - __gitcomp - prefix
+ok 20 - __gitcomp - suffix
+ok 21 - __gitcomp - doesnt fail because of invalid variable name
+ok 22 - __gitcomp_nl - trailing space
+ok 23 - __gitcomp_nl - prefix
+ok 24 - __gitcomp_nl - suffix
+ok 25 - __gitcomp_nl - no suffix
+ok 26 - __gitcomp_nl - doesnt fail because of invalid variable name
+ok 27 - __git_remotes - list remotes from $GIT_DIR/remotes and from config file
+ok 28 - __git_get_config_variables
+ok 29 - __git_pretty_aliases
+ok 30 - __git_aliases
+ok 31 - basic
+ok 32 - double dash "git" itself
+ok 33 - double dash "git checkout"
+ok 34 - general options
+ok 35 - general options plus command
+ok 36 - git --help completion
+ok 37 - setup for ref completion
+ok 38 - checkout completes ref names
+ok 39 - show completes all refs
+ok 40 - <ref>: completes paths
+ok 41 - complete tree filename with spaces
+ok 42 - complete tree filename with metacharacters
+ok 43 - send-email
+ok 44 - complete files
+ok 45 - completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'
+ok 46 - completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }
+ok 47 - completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }
+not ok 48 - complete with tilde expansion # TODO known breakage
+# still have 1 known breakage(s)
+# passed all remaining 47 test(s)
+1..48
+*** t9903-bash-prompt.sh ***
+ok 1 - setup for prompt tests
+ok 2 - prompt - branch name
+ok 3 - prompt - branch name - symlink symref
+ok 4 - prompt - unborn branch
+ok 5 - prompt - with newline in path
+ok 6 - prompt - detached head
+ok 7 - prompt - describe detached head - contains
+ok 8 - prompt - describe detached head - branch
+ok 9 - prompt - describe detached head - describe
+ok 10 - prompt - describe detached head - default
+ok 11 - prompt - inside .git directory
+ok 12 - prompt - deep inside .git directory
+ok 13 - prompt - inside bare repository
+ok 14 - prompt - interactive rebase
+ok 15 - prompt - rebase merge
+ok 16 - prompt - rebase
+ok 17 - prompt - merge
+ok 18 - prompt - cherry-pick
+ok 19 - prompt - bisect
+ok 20 - prompt - dirty status indicator - clean
+ok 21 - prompt - dirty status indicator - dirty worktree
+ok 22 - prompt - dirty status indicator - dirty index
+ok 23 - prompt - dirty status indicator - dirty index and worktree
+ok 24 - prompt - dirty status indicator - before root commit
+ok 25 - prompt - dirty status indicator - shell variable unset with config disabled
+ok 26 - prompt - dirty status indicator - shell variable unset with config enabled
+ok 27 - prompt - dirty status indicator - shell variable set with config disabled
+ok 28 - prompt - dirty status indicator - shell variable set with config enabled
+ok 29 - prompt - dirty status indicator - not shown inside .git directory
+ok 30 - prompt - stash status indicator - no stash
+ok 31 - prompt - stash status indicator - stash
+ok 32 - prompt - stash status indicator - not shown inside .git directory
+ok 33 - prompt - untracked files status indicator - no untracked files
+ok 34 - prompt - untracked files status indicator - untracked files
+ok 35 - prompt - untracked files status indicator - empty untracked dir
+ok 36 - prompt - untracked files status indicator - non-empty untracked dir
+ok 37 - prompt - untracked files status indicator - untracked files outside cwd
+ok 38 - prompt - untracked files status indicator - shell variable unset with config disabled
+ok 39 - prompt - untracked files status indicator - shell variable unset with config enabled
+ok 40 - prompt - untracked files status indicator - shell variable set with config disabled
+ok 41 - prompt - untracked files status indicator - shell variable set with config enabled
+ok 42 - prompt - untracked files status indicator - not shown inside .git directory
+ok 43 - prompt - format string starting with dash
+ok 44 - prompt - pc mode
+ok 45 - prompt - bash color pc mode - branch name
+ok 46 - prompt - bash color pc mode - detached head
+ok 47 - prompt - bash color pc mode - dirty status indicator - dirty worktree
+ok 48 - prompt - bash color pc mode - dirty status indicator - dirty index
+ok 49 - prompt - bash color pc mode - dirty status indicator - dirty index and worktree
+ok 50 - prompt - bash color pc mode - dirty status indicator - before root commit
+ok 51 - prompt - bash color pc mode - inside .git directory
+ok 52 - prompt - bash color pc mode - stash status indicator
+ok 53 - prompt - bash color pc mode - untracked files status indicator
+ok 54 - prompt - zsh color pc mode
+ok 55 - prompt - hide if pwd ignored - env var unset, config disabled
+ok 56 - prompt - hide if pwd ignored - env var unset, config disabled, pc mode
+ok 57 - prompt - hide if pwd ignored - env var unset, config unset
+ok 58 - prompt - hide if pwd ignored - env var unset, config unset, pc mode
+ok 59 - prompt - hide if pwd ignored - env var set, config disabled
+ok 60 - prompt - hide if pwd ignored - env var set, config disabled, pc mode
+ok 61 - prompt - hide if pwd ignored - env var set, config unset
+ok 62 - prompt - hide if pwd ignored - env var set, config unset, pc mode
+ok 63 - prompt - hide if pwd ignored - inside gitdir (stdout)
+ok 64 - prompt - hide if pwd ignored - inside gitdir (stderr)
+# passed all 64 test(s)
+1..64
 /usr/gnu/bin/make aggregate-results
 make[4]: Entering directory `$(@D)/t'
-for f in test-results/t*-*.counts; do \
+for f in 'test-results'/t*-*.counts; do \
 	echo "$f"; \
 done | '/bin/bash' ./aggregate-results.sh
 
-failed test(s): t0202 t0204 t7406 t9100 t9101 t9102 t9103 t9104 t9105 t9106 t9107 t9108 t9109 t9110 t9111 t9112 t9114 t9115 t9116 t9117 t9118 t9120 t9121 t9122 t9123 t9124 t9125 t9127 t9128 t9129 t9130 t9131 t9132 t9133 t9134 t9135 t9136 t9137 t9138 t9139 t9140 t9141 t9142 t9143 t9144 t9145 t9146 t9150 t9151 t9152 t9153 t9154 t9155 t9156 t9157 t9158 t9159 t9160 t9161 t9162
+failed test(s): t0204 t9500
 
 fixed   0
-success 7760
-failed  290
-broken  46
-total   8274
+success 12879
+failed  3
+broken  178
+total   13280
 make[4]: Leaving directory `$(@D)/t'
 /usr/gnu/bin/make clean
 make[4]: Entering directory `$(@D)/t'
-rm -f -r 'trash directory'.* test-results
+rm -f -r 'trash directory'.* 'test-results'
 rm -f -r valgrind/bin
 rm -f .prove
 make[4]: Leaving directory `$(@D)/t'